SHU EQU 40H
TX EQU 41H //定时0.5秒
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP TIME0
ORG 0030H
MAIN:
MOV P2,#00H //关闭所有数码管
MOV SP,#60H //设置堆栈地址
MOV SHU,#0
MOV TX,#0 //清零
MOV TMOD,#01H
MOV TH0,#3CH //初值 定时500ms
MOV TL0,#0B0H
SETB EA
SETB ET0
SETB TR0
LOOP:
LCALL DISPLAY //调用显示时间
SJMP LOOP
DISPLAY: //显示函数
MOV DPTR,#TAB
MOV A,SHU //将数值送到A
MOV B,#10
DIV AB //分离个位和十位
MOVC A,@A+DPTR
MOV P1,A //显示十位
MOV P2,#40H //位选
DJNZ R2,$ //延时
MOV P2,#00H //关闭数码管
MOV A,B
MOVC A,@A+DPTR
MOV P1,A //显示个位
MOV P2,#80H //位选
DJNZ R2,$ //延时
MOV P2,#00H //关闭数码管 消隐
RET
TIME0:
PUSH PSW
PUSH ACC
MOV TH0,#3CH //重新载入初值
MOV TL0,#0B0H
INC TX //500ms TX自动加一次
MOV A,TX
CJNE A,#10,TIME10 //0.5s一次 ,10*50ms=0.5S
MOV TX,#0
INC SHU //秒自动加1
MOV A,SHU
CJNE A,#100,TIME10 //SHU是否到100
MOV SHU,#0
TIME10:
POP ACC //出栈
POP PSW
RETI
TAB:
DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H //共阴数码管段码
END
本文介绍了一段使用SHU EQU40H进行定时的嵌入式程序,通过TX EQU41H设置定时器,实现0.5秒周期的计数,并展示了主函数、显示时间和延时函数的详细实现过程。

4951

被折叠的 条评论
为什么被折叠?



