实验内容:
计时器基本功能:
1)CPU必须用8086
2)计时器最小计时单位为秒。
3)以00:00格式显示计时,前2位表示分钟,后2位表示秒。
4)计时器是正计时方式
5)有暂停、继续计时功能
6)有复位计时功能
7)每次按下暂停键,能显示计时间隔时间
参考书籍:
微机原理与接口技术——基于8086和Proteus仿真(第3版)(作者:顾晖等),p273,13.1电子秒表。若有补充内容,放在评论区。
具体实现的功能描述:
1)CPU 使用 8086
2)计时器最小计时单位为秒。
3)按下 START 键,以正计时方式开始计时。以 00:00 格式在数 码管 L1 上显示计时,前 2 位表示分钟,后 2 位表示秒。
4) 数码管 L1 显示正常计时时间,数码管 L2 显示两次按下暂停 的时间间隔。在正常计时情况下,按下 PAUSE/RESUME 键,计时 器暂停计时,数码管 L1 显示暂停时刻,数码管 L2 显示从暂停 时刻从 0 开始计时的时间,直到再次按下暂停,计时器从暂停 时刻开始继续计时, L1 显示对应的计时时间,数码管 L2 开始 显示从继续计时时刻从 0 开始计时的时间,直到再次按下暂 停,回到前述的暂停情况。
5) 按下 RESET 键,计时器复位,数码管 L1 显示 0000,然后按 下 START 键,可以重新从 0000 开始计时。
电路图:
电路图的绘制和项目创建可以参看专栏的其他文章。如:【Proteus】绘制简单的电路图-CSDN博客
1.I/O 地址译码电路:
2. 8253 计时电路:
注意: 这里clk0设为了1khz,数码管显示比较接近1s
3.8255A 显示及中断电路:
4.总览和器件列表(图的左边)
汇编代码(部分):
A8255 EQU 0000H ;用于显示正常计时时间8255A各端口地址
B8255 EQU 0002H
C8255 EQU 0004H
CTR8255 EQU 0006H
AA8255 EQU 0300H ;用于显示暂停时间间隔8255A各端口地址
BB8255 EQU 0302H
CC8255 EQU 0304H
CCTR8255 EQU 0306HCH0 EQU 0200H ;8253计数器0的端口地址
CTR8253 EQU 0206H ;8253 控制端口地址
AD245 EQU 0100H ;74LS245地址 CODE SEGMENT 'CODE'ASSUME DS:DATA,CS:CODE,SS:SSEG
START: MOV AX,SSEG MOV SP,AXCLI ;关中断MOV AX,0 ;设中段向量 MOV ES,AXMOV BX,2*4 ;NMI为2号中断MOV AX,OFFSET INTR_KEYMOV WORD PTR ES:[BX],AXMOV AX,SEG INTR_KEYMOV WORD PTR ES:[BX+2],AXSTI ;开中断MOV AX,DATA ;初始化数据段MOV DS,AXMOV AX,DATAMOV ES,AXMOV AL,10001001B ;8255A初始化MOV DX,CTR8255OUT DX,ALMOV AL,10001001B ;8255A初始化MOV DX,CCTR8255OUT DX,AL
RUN:CALL RUNNING ;循环等待中断JMP RUN INTR_KEY PROC ;中断服务程序PUSH AX ;现场保护PUSH BXPUSHFCALL KEY ;读取按钮状态TEST AL,01H ;检测启动按钮JZ K1TEST AL,02H ;检测暂停按钮JZ K2TEST AL,04H ;检测复位按钮JZ K3
K1:MOV KEYST,1 ;按钮标志位置为1JMP FIN
K2:MOV KEYST,2 ;按钮标志位置为 2INC PAUSEKEY ;记录暂停按钮按下次数JMP FIN
K3:MOV KEYST,3 ;按钮标志位置为3
FIN:POPF ;恢复现场POP BXPOP AXIRET
INTR_KEY ENDP RUNNING PROC ;根据当前的中断触发类型,转入不同的显示
AGAIN: CMP KEYST,1JZ T1CMP KEYST,2JZ T2CMP KEYST,3JZ T3JMP E0
T1:MOV AL,0 ;正常计时和继续计时,暂停时间清零LEA DI,PAUSEBUFMOV CX,4CLDREP STOSBCALL TIME ;转入计时JMP E0
T2:TEST PAUSEKEY,1 ;检测暂停按钮按下次数,转入暂停或继续计时JZ T1 CALL PAUSETIME ;调用暂停时间计时子程序MOV AL,0 ;奇数次,把继续计时时间暂存区清零LEA DI,RESUMEBUFMOV CX,4CLDREP STOSBJMP E0
T3:CALL RESET ;系统复位
E0:CALL DISP ;调用显示子程序CMP KEYST,3JZ OUT2CMP KEYST,1JZ OUT2TEST PAUSEKEY,1 JZ OUT1CALL PAUSEDISP ;调用暂停计时时间显示子程序JMP OUT2
OUT1:CALL RESUMEDISP ;调用继续计时时间显示子程序
OUT2:RET
RUNNING ENDPTIME PROC ;计时子程序,按时间进位规则PUSH AXPUSH BXPUSH SIPUSH DILEA SI,TIMEBUF ;10毫秒MOV AH, [SI]INC AHCMP AH,100JZ S1MOV [SI],AHJMP S5
S1:MOV AH,0 ;秒MOV [SI],AHMOV AH,[SI+1]INC AHCMP AH,60JZ S2MOV [SI+1],AHJMP S5
S2:MOV AH,0 ;分MOV [SI+1],AHMOV AH,[SI+2]INC AHCMP AH,60JZ S3MOV [SI+2],AHJMP S5
S3:MOV AH,0 ;时MOV [SI+2],AHMOV AH,[SI+3]INC AHCMP AH,24JZ S4MOV [SI+3],AH JMP S5
S4:MOV AL,0LEA DI,TIMEBUFMOV CX,4CLDREP STOSB
S5:CALL DIGIT ;将正常计时时间转换为数位值CALL RESUMETIME ;从继续计时时刻开始的计时CALL RESUMEDIGIT ;将继续计时时间转换为数位值CALL DELAY8253 ;8253计时POP DIPOP SIPOP BXPOP AXRET
TIME ENDP DIGIT PROC ;将时间转换为数位值PUSH AXPUSH BXPUSH CXPUSH SIPUSH DIMOV BL,4 ;4个时间单位,依次转换LEA DI,LEDBUFLEA SI,TIMEBUF
NEXT: LODSB ;从TIMEBUF中依次取出时间值MOV AH,0MOV CL,10 ;除以10,分离出时间的个位和十位,存入 LEDBUFDIV CLXCHG AH,ALSTOSBMOV AL,AHSTOSBDEC BLJNZ NEXTPOP DIPOP SIPOP CXPOP BXPOP AXRET
DIGIT ENDP DISP PROC ;显示 LEDBUF 中的值PUSH AXPUSH BXPUSH CXPUSH DXPUSH SILEA BX,LEDTABLEA SI,LEDBUFMOV CX,8MOV AH,7FH
LOOP1: MOV AL,[SI]XLAT ;换码,数位值转换成LED显示段码MOV DX,A8255 ;段码值送8255A端口AOUT DX,ALCMP AH,7FHJZ DIS1CMP AH,0BFHJZ DIS1 MOV AL,AH ;LED位选送 8255A端口 BMOV DX,B8255OUT DX,AL
DIS1: CALL DELAYROR AH,1INC SICALL CLRLED ;LED清屏LOOP LOOP1POP SIPOP DXPOP CXPOP BXPOP AXRET
DISP ENDP CLRLED PROC ;清屏子程序PUSH AXPUSH DXMOV AL,0FFHMOV DX,B8255OUT DX,ALPOP DXPOP AXRET
CLRLED ENDP DELAY8253 PROC ;8253延时子程序PUSH AXPUSH DXMOV DX,CTR8253 ;设置8253控制字,计数器0,方式0MOV AL,00010000BOUT DX,ALMOV DX,CH0MOV AL,06HOUT DX,ALMOV DX,AD245
W1:IN AL,DXTEST AL,01H ;检测8253计时是否结束,计数器0输出高电平JZ W1POP DXPOP AXRET
DELAY8253 ENDP DELAY PROC ;软延时PUSH CXMOV CX,50
WAIT1: LOOP WAIT1POP CXRET
DELAY ENDP RESET PROC ;计数复位子程序,数据缓冲区全部清0PUSH AXPUSH CXPUSH DIMOV AL,0LEA DI,TIMEBUFMOV CX,13CLDREP STOSBMOV AL,0LEA DI,PAUSEBUFMOV CX,4CLDREP STOSBMOV AL,0LEA DI,RESUMEBUFMOV CX,4CLDREP STOSBPOP DIPOP CXPOP AX
RESET ENDP KEY PROC ;读开关子程序MOV DX,C8255IN AL,DXRET
KEY ENDP
更多(源文件、报告)请见:
西南交大swjtu微机与接口技术实验:计时器源文件与报告资源-CSDN文库