前言
- 外部中断0控制计数器的启动/停止
外部中断1控制计数器的清零复位 - P1.0控制LED的段选口使能信号
P1.1控制LED的位选口使能信号
Proteus电路图
asm代码
ORG 0000H
LJMP INIT
ORG 0003H //外部中断0
LJMP INT0SUB
ORG 000BH //定时器T0
LJMP T0INTP
ORG 0013H //外部中断1
LJMP INT1SUB
ORG 0100H
INIT: CLR P1.0 //控制端复位
CLR P1.1
MOV DPTR,#TABLE //指向表头
MOV TMOD,#01H //工作模式
MOV 40H,#00H //时单元清零
MOV 41H,#00H //分单元清零
MOV 42H,#00H //秒单元清零
MOV 43H,#00H //50ms单元清零
MOV TH0,#3CH //设置T0定时初值
MOV TL0,#0B0H
SETB EA //CPU允许中断
SETB ET0 //T0允许中断
SETB EX0 //启动外部中断0
SETB EX1 //启动外部中断1
SETB TR0 //启动T0定时
MAIN: SETB TR0
LCALL DISPLAY
SJMP MAIN
DISPLAY:MOV A,42H //传入秒单元
MOV B,#10
DIV AB
MOV 44H,B //秒个位
MOV 45H,A //秒十位
MOV A,#7FH //第一位
MOV P0,A //输出位信号
SETB P1.1 //上升沿
CLR P1.1
MOV A,44H //秒个位
MOVC A,@A+DPTR
MOV P0,A //输出段信号
SETB P1.0 //上升沿
CLR P1.0
LCALL DELAY //延时1ms
MOV A,#0BFH //第二位
MOV P0,A //输出位信号
SETB P1.1 //上升沿
CLR P1.1
MOV A,45H //秒十位
MOVC A,@A+DPTR
MOV P0,A //输出段信号
SETB P1.0 //上升沿
CLR P1.0
LCALL DELAY //延时1ms
MOV A,41H //传入分单元
MOV B,#10
DIV AB
MOV 44H,B //分个位
MOV 45H,A //分十位
MOV A,#0DFH //第三位
MOV P0,A //输出位信号
SETB P1.1 //上升沿
CLR P1.1
MOV A,44H //分个位
MOVC A,@A+DPTR
MOV P0,A //输出段信号
SETB P1.0 //上升沿
CLR P1.0
LCALL DELAY //延时1ms
MOV A,#0EFH //第四位
MOV P0,A //输出位信号
SETB P1.1 //上升沿
CLR P1.1
MOV A,45H //分十位
MOVC A,@A+DPTR
MOV P0,A //输出段信号
SETB P1.0 //上升沿
CLR P1.0
LCALL DELAY //延时1ms
MOV A,40H //传入时单元
MOV B,#10
DIV AB
MOV 44H,B //时个位
MOV 45H,A //时十位
MOV A,#0F7H //第五位
MOV P0,A //输出位信号
SETB P1.1 //上升沿
CLR P1.1
MOV A,44H //时个位
MOVC A,@A+DPTR
MOV P0,A //输出段信号
SETB P1.0 //上升沿
CLR P1.0
LCALL DELAY //延时1ms
MOV A,#0FBH //第六位
MOV P0,A //输出位信号
SETB P1.1 //上升沿
CLR P1.1
MOV A,45H //时十位
MOVC A,@A+DPTR
MOV P0,A //输出段信号
SETB P1.0 //上升沿
CLR P1.0
LCALL DELAY //延时1ms
RET
T0INTP: PUSH PSW
PUSH ACC
MOV TH0,#3CH //重装载定时初值
MOV TL0,#0B0H
INC 43H //50ms个数+1
MOV A,43H
CJNE A,#20,RETURN//是否到1秒,未到则返回
MOV 43H,#00H //50ms个数清0
INC 42H //秒数+1
MOV A,42H
CJNE A,#60,RETURN//是否到60秒,未到则返回
MOV 42H,#00H //秒数清0
INC 41H //分数+1
MOV A,41H
CJNE A,#60,RETURN//是否到60分,未到则返回
MOV 41H,#00H //分数清0
INC 40H //时数+1
MOV A,40H
CJNE A,#24,RETURN//是否到24时,未到则返回
MOV 40H,#00H //时数清0
RETURN: POP ACC //恢复现场
POP PSW
RETI //中断返回
INT0SUB:CLR TR0 //启动|停止
RETI
INT1SUB:MOV 40H,#00H //时单元清零
MOV 41H,#00H //分单元清零
MOV 42H,#00H //秒单元清零
MOV 43H,#00H //50ms单元清零
RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //段选表
DELAY: MOV 30H,#2 //延时1ms
MOV 31H,#234
NEXT: DJNZ 31H,NEXT
DJNZ 30H,NEXT
RET
END
效果图
版权声明:本文为qq_52516071原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。