简介:
全部proteus仿真文件及KEIL汇编文件打包成附件。
HOR DATA 30H
MIN DATA 31H
SEC DATA 32H
SECTIME DATA 33H
F1S BIT 00H
HOROUT DATA P0
MINOUT DATA P2
SECOUT DATA P3
;32760晶振除12等于2730,定时中断用15*182实现(自动重装),要求中断程序小
;或者用定时器直接计数2730,但是加上自动修正,中断就直接执行显示程序,主程序空循环
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
LJMP INTT0
ORG 0013H
RETI
ORG 001BH
RETI
ORG 0023H
RETI
ORG 002BH
RETI
ORG 0030H
START:
MOV SP,#50H
mov tl0,#04ah
mov th0,#04ah
setb tr0
mov tmod,#02h
setb et0
setb ea
ACALL CSH
LOP:
JNB F1S,LOP1
CLR F1S
ACALL ADDTIME
ACALL XS
LOP1:
SJMP LOP
ADDTIME: ;增秒
inc SEC ;增秒
mov a,SEC
cjne a,#60,RET1 ;判断秒是否大于60
mov SEC,#0 ;大于60,秒清零
inc MIN ;增分
mov a,MIN
cjne a,#60,RET1 ;判断分是否大于60
mov MIN,#0 ;大于60,分清零
inc HOR ;增时
mov a,HOR
cjne a,#24,RET1 ;判断时是否大于24
mov HOR,#0 ;时清零
RET1:RET
CSH:
MOV HOR, #00
MOV MIN ,#00
MOV SEC ,#00
RET
XS:
MOV A,HOR
ACALL HBCD
CPL A
MOV HOROUT,A
MOV A,MIN
ACALL HBCD
CPL A
MOV MINOUT,A
MOV A,SEC
ACALL HBCD
CPL A
MOV SECOUT,A
RET
INTT0:
PUSH ACC
INC SECTIME
MOV A,SECTIME
CJNE A,#15,T0REI
SETB F1S
MOV SECTIME,#0
CPL P1.0
T0REI:
POP ACC
RETI
YS:
RET
;**********************************************************************
;HBCD: 单字节十六进制整数转换成单字节BCD码整数
;入口条件:待转换的单字节十六进制整数在累加器A中。
;出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
;影响资源:PSW、A、B、R3 堆栈需求: 2字节
HBCD: MOV B,#100 ;分离出百位,存放在R3中
DIV AB
MOV R3,A
MOV A,#10 ;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
ORL A,B ;将十位和个位拼装成BCD码
RET
END