该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
实验程序:
ORG 0000H
LJMP MAIN
ORG 0003H ;外部中断INT0中断入口
LJMP TINGZHI
ORG 000BH ;定时器T0中断入口
LJMP UPDATE
ORG 0013H ; 外部中断INT1中断入口
LJMP KAISHI
MAIN: MOV DPTR, #TAB ; ;存入表头地址
MOV TMOD, #00H ; ;置T0为方式0
MOV TH0, #0E0H ;;赋定时器初值
MOV TL0, #18H
MOV 79H, #00H ;;显示缓存区清零
MOV 7AH, #00H
MOV 7BH, #00H
MOV 7CH, #00H
MOV 7DH, #00H
MOV R0, #00H ;;溢出计数区清零
MOV R1, #00H
MOV R2, #00H
MOV R3, #00H
MOV R4, #00H
SETB EA ;;CPU开中断
SETB EX0 ;;开外部中断0
SETB EX1 ;;开外部中断1
SETB IT0 ; ;外部中断0位边沿触发方式
SETB IT1 ; ;外部中断1位边沿触发方式
SETB ET0 ;;定时器0允许位
XIAN: MOV A, 79H ; ;显示1ms位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.0
LCALL DELAY
CLR P2.0
MOV A, 7AH ;;显示10ms位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.1
LCALL DELAY
CLR P2.1
MOV A, 7BH ;;显示100ms位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.2
LCALL DELAY
CLR P2.2
MOV A, 7CH ;;显示1s位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.3
LCALL DELAY
CLR P2.3
MOV A, 7DH ; ;显示10s位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.4
LCALL DELAY
CLR P2.4
MOV P0, #80H ;;显示小数点
SETB P2.3
LCALL DELAY
CLR P2.3
JNB P1.1, AA ;;扫描复位键是否按下
JNB P2.5, LAST ;;扫描查看键是否按下
LJMP XIAN ; ;返回显示程序,重新进行显示
AA: LJMP MAIN
LAST: JB P2.5, XIAN ;;扫描查看键是否抬起
MOV A, 59H ; ;调用最终缓存区数据进行显示
MOVC A,@A+DPTR
MOV P0,A
SETB P2.0
LCALL DELAY
CLR P2.0
MOV A, 5AH ;;显示10ms位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.1
LCALL DELAY
CLR P2.1
MOV A, 5BH ;;显示100ms位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.2
LCALL DELAY
CLR P2.2
MOV A, 5CH ;;显示1s位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.3
LCALL DELAY
CLR P2.3
MOV A, 5DH ;;显示10s位数字
MOVC A, @A+DPTR
MOV P0, A
SETB P2.4
LCALL DELAY
CLR P2.4
MOV P0, #80H ; ;显示小数点
SETB P2.3
LCALL DELAY
CLR P2.3
LJMP LAST
KAISHI: MOV 59H, 69H ;;将中间缓存区的数据存入最终缓存区
MOV 5AH, 6AH
MOV 5BH, 6BH
MOV 5CH, 6CH
MOV 5DH, 6DH
SETB TR0 ;启动定时器T0
RETI
TINGZHI: CLR TR0 ;;停止定时器T0
MOV 69H, 79H ;;将显示缓存区的数据存入中间缓存区
MOV 6AH, 7AH
MOV 6BH, 7BH
MOV 6CH, 7CH
MOV 6DH, 7DH
RETI
UPDATE: MOV TH0, #0E0H ;;重赋定时器初值
MOV TL0, #18H
MOV A, 79H
ADD A, #01H ;;1ms位加一
MOV 79H, A
MOV A, R0
ADD A, #01H
MOV R0, A
CJNE R0, #0AH, EXIT ;;判断1ms位是否满10
MOV 79H, #00H ;;对1ms位清零
MOV R0, #00H
MOV A, 7AH
ADD A, #01H ; ;10ms位加一
MOV 7AH, A
MOV A, R1
ADD A, #01H
MOV R1, A
CJNE R1, #0AH, EXIT ;;判断10ms位是否满10
MOV 7AH, #00H ;;对10ms位清零
MOV R1, #00H
MOV A, 7BH
ADD A, #01H ; ;100ms位加一
MOV 7BH, A
MOV A, R2
ADD A, #01H
MOV R2, A
CJNE R2, #0AH, EXIT ; ;判断100ms位是否满10
MOV 7BH, #00H ; ;对100ms位清零
MOV R2, #00H
MOV A, 7CH
ADD A, #01H ;;1s位加一
MOV 7CH, A
MOV A, R3
ADD A, #01H
MOV R3, A
CJNE R3, #0AH, EXIT ;;判断1s位是否满10
MOV 7CH, #00H ; ;对1s位清零
MOV R3, #00H
MOV A, 7DH
ADD A, #01H ;;10s位加一
MOV 7DH, A
MOV A, R4
ADD A, #01H
MOV R4, A
CJNE R4, #0AH, EXIT ;;判断10s位是否满10
MOV 7DH, #00H ;;对10s位清零
EXIT:RETI
DELAY :MOV R7, #5 ;;延时程序
DEL1: MOV R6, #7
DEL2: DJNZ R6, DEL2
DJNZ R7, DEL1
RET
TAB: DB 3FH,06H,5BH,4FH, 66H
DB 6DH, 7DH, 07H, 7FH, 6FH
END