四、程序框图
主程序:
开始 重新设置堆栈区地址 用INT21H的25H功能设置0AH外中断(IRQ2)的中断向量 重新设置数据段并显示提示信息 关中断 清除IRQ2的中断屏蔽位 开中断(STI) 主程序等待输入任意键 设置IRQ2中断屏蔽位 用INT21H的4CH功能返回DOS
26
开始 中断计数值COUNT加1 保存寄存器 COUNT=40?用XLAT指令获得显示数字所对应的七段数码管段值 往段锁存器中输入段值 往位锁存器中送入位值Y (CL);(延时CL)中某位为 1,则对应的数码管被选中 (CL)=20H即显示完第六个数码管 N 位值(CL)左移1位即将选下一位数码管显示 COUNT=0,秒的低位值SEC2加1 SEC2=10? SEC2=0,秒的高位值SEC1加1 SEC1=6? SEC1=0,分的低位值MIN2加1 MIN2=10 MIN2=0,分的高位值MIN1加1 MIN1=6? MIN1=0? 熄灭所有的数码管,清除ISR中的标志,并恢复寄存器 IRET 五、程序清单:
INTA00 EQU 20H INTA01 EQU 21H
PORTSEG EQU 211H PORTBIT EQU 210H
STACK SEGMENT
STA DW 512 DUP (?)
TOP EQU LENGTH STA STACK ENDS DATA SEGMENT
27
;PC/XT系统中8259A端口偶
地址
;PC/XT系统中8259A端口奇 地址
;段锁存器端口地址 ;位锁存器端口地址 ;堆栈定义
MIN1 MIN2 GAP1 GAP2 SEC1 SEC2 COUNT LED MES DATA CODE ASSUME START: MOV MOV MOV MOV MOV MOV MOV INT MOV MOV MOV MOV INT CLI MOV IN AND OUT STI
AGAIN:MOV TT: LOOP MOV INT JZ CLI
MOV
DB 0 DB 0
DB 10 DB 10 ;对应6个 LED数码管的显示 DB 0 值 DB 0
DB 0 ;中断次数的计数单元 DB 3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH, 6FH,40H ;LED段码表 DB ‘DISPLAY THE LEDS,PRESS ANY KEY RETURN DOS!’,0AH,0DH,‘$’ ENDS SEGMENT CS:CODE,DS:DATA,SS:STACK
AX,STACK SS,AX ;设置堆栈段及栈指针 ,TOP ,CS ;DS 指向代码段 ,AX
,OFFSET INT_PROC AX,250AH ;设置 OAH号中断向量 21H AX,DATA ;DS指向数据段 DS,AX DX,OFFSET MES AH,09 ;显示提示信息 21 H
;关中断
DX,INTA01 AL,DX ;开放 IRQ2中断的对应的屏蔽 AL,0FBH 位 DX,AL CX,5000 ;延时等待硬件中断 TT AH,01 16H ;BIOS键盘功能判别有否键被 AGAIN 按下 DX, INTA01
28
SP AX DS DX IN OR OUT STI
MOV INT INT_ PROC: PUSH PUSH MOV MOV RIS1: MOV MOV XLAT MOV OUT MOV MOV OUT PUSH MOV DELAY:LOOP POP CMP JZ INC SHL JMP CHG: INC CMP JL MOV 1NC CMP JL MOV INC CMP JL MOV
AL,DX AL,04 DX,AL
AX,4C00H 21H
AX CX
BX,OFFSET MIN1 CL,01 AL,[DI] BX,OFFSET LED
DX,PORTSEG DX,AL AL,CL
DX,PORTBIT DX,AL
CX CX,350H DELAY CX CL,20H CHG DI CL,1 DIS1 COUNT COUNT,40 QUIT
COUNT,0 SEC2 SEC2,10 QUIT SEC2,0 SEC1 SEC1,6 QUIT SEC1,0 29
;关闭IRQ2中断对应的屏蔽位
;返回DOS
;保存寄存器 ;指向数码管显示数据区首址 ;指向第一个数码管
;得到该显示数字对应的段码 ;输出段码 ;输出位码 ;人栈 ;等待一段时间 ;退栈 ;已显示完6个数码管则转 CHG ;显示数据指针加1 ;位码左移 1次 ;对下一位作显示 ;中断次数的计数器加 l ;不足40次转 QUIT ;计数器清0 ;秒值加1 ;秒的低位值不足10,则不产生 进位转 QIJIT ;秒的低位值清0 ;秒的高位值加1 ;秒的高位值不足6,则不产生 ;进位转 QUIT ;清0秒的高位值
INC MIN2 CMP MIN2,10 JL QUIT MOV MIN2,0 INC MIN1 CMP MIN1,6 JL QUIT MOV MIN1,0 QUIT: MOV DX,PORTBIT MOV AL,00 OUT DX,AL MOV DX,INTA00 MOV AL,20H OUT DX,A L POP CX POP AX IRET CODE ENDS END START
六、实验报告要求:
1.总结控制LED显示的方法。 2.说明本实验中74LS273的作用。 3.说明8253在本实验中的功能。
30
;分值加1 ;分的低位值不足10,则不产生
进位转QUIT ;分的低位值清0 ;分的高位值加1 ;分的高位值不足6则不产生 进位转QUIT ;清0分的高位值 ;熄灭所有的数码管 ;发中断结束命令 ;寄存器出栈 ;中断返回