原创 BCD码二进制时钟 仿真

2008-11-17 11:36 5174 7 7 分类: MCU/ 嵌入式

全部proteus仿真文件及KEIL汇编文件打包:rar


点击看大图


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

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条