AT89C时钟程序实例.docx
《AT89C时钟程序实例.docx》由会员分享,可在线阅读,更多相关《AT89C时钟程序实例.docx(12页珍藏版)》请在冰点文库上搜索。
AT89C时钟程序实例
;;AT89C2051时钟程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;显示缓冲单元在70H—75H,70H—71H显示秒,72H—73H显示分,74H—75H显示时
;时间计数单元在70H—71H(秒)、76H—77H(分)、78H—79H(时),7AH单元放熄灭符(#0AH)
;计数单元采用BCD码计数,定时器T0设置为50MS溢出中断,为秒计数用,定时器T1为调整时闪烁用
;P3.7为调整按钮,P1口为字符输出口,采用共阳显示管。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;中断入口程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ORG0000H
LJMPSTART
ORG0003H
RETI
ORG000BH
LJMPINTT0
ORG0013H
RETI
ORG001BH
LJMPINTT1
ORG0023H
RETI
ORG002BH
RETI
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;主程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
START:
MOVR0,#70H
MOVR7,#0BH
MOV20H,#00H
CLEARDISP:
MOV@R0,#00H
INCR0
DJNZR7,CLEARDISP
MOV7AH,#0AH
MOVTMOD,#11H
MOVTL0,#0B0H
MOVTH0,#3CH
MOVTL1,#0B0H
MOVTH1,#3CH
SETBEA
SETBET0
SETBTR0
MOVR4,#14H
start1:
LCALLDISPLAY
JNBP3.7,SETMM1
SJMPStart1
SETMM1:
LJMPSETMM
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;1秒定时程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
INTT0:
PUSHACC
PUSHPSW
CLRET0
CLRTR0
MOVA,#0B7H;中断同步修正
ADDA,TL0
MOVTL0,A
MOVA,#3CH
ADDA,TH0
MOVTH0,A
SETBTR0
DJNZR4,OUTT0
ADDSS:
MOVR4,#14H
MOVR0,#71H
ACALLADD1;加1程序
MOVA,R3
CLRC
CJNEA,#60H,ADDMM
ADDMM:
JCOUTT0
ACALLCLR0
MOVR0,#77H
ACALLADD1
MOVA,R3
CLRC
CJNEA,#60H,ADDHH
ADDHH:
JCOUTT0
ACALLCLR0
MOVR0,#79H
ACALLADD1
MOVA,R3
CLRC
CJNEA,#24H,HOUR
HOUR:
JCOUTT0
ACALLCLR0
OUTT0:
MOV72H,76H
MOV73H,77H
MOV74H,78H
MOV75H,79H
POPPSW
POPACC
SETBET0
RETI
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;闪动调时程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
INTT1:
PUSHACC
PUSHPSW
MOVTL1,#0B0H
MOVTH1,#3CH
DJNZR2,INTT1OUT
MOVR2,#06H
CPL02H
JB02H,FLASH1
MOV72H,76H
MOV73H,77H
MOV74H,78H
MOV75H,79H
INTT1OUT:
POPPSW
POPACC
RETI
FLASH1:
JB01H,FLASH2
MOV72H,7AH
MOV73H,7AH
MOV74H,78H
MOV75H,79H
AJMPINTT1OUT
FLASH2:
MOV72H,76H
MOV73H,77H
MOV74H,7AH
MOV75H,7AH
AJMPINTT1OUT
;
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;加1程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
ADD1:
MOVA,@R0
DECR0
SWAPA
ORLA,@R0
ADDA,#01H
DAA
MOVR3,A
ANLA,#0FH
MOV@R0,A
MOVA,R3
INCR0
SWAPA
ANLA,#0FH
MOV@R0,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;清零程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
CLR0:
CLRA
MOV@R0,A
DECR0
MOV@R0,A
RET
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;时钟调整程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
SETMM:
cLRET0
CLRTR0
LCALLDL1S
JBP3.7,CLOSEDIS
MOVR2,#06H
SETBET1
SETBTR1
SET2:
JNBP3.7,SET1
SETB00H
SET4:
JBP3.7,SET3
LCALLDL05S
JNBP3.7,SETHH
MOVR0,#77H;加1分程序
LCALLADD1
MOVA,R3
CLRC
CJNEA,#60H,HHH
HHH:
JCSET4
LCALLCLR0
CLRC
AJMPSET4
CLOSEDIS:
SETBET0
SETBTR0
CLOSE:
JBP3.7,CLOSE
LCALLDISPLAY
JBP3.7,CLOSE
WAITH:
JNBP3.7,WAITH
LJMPSTART1
SETHH:
CLR00H
SETHH1:
JNBP3.7,SET5
SETB01H
SET6:
JBP3.7,SET7
LCALLDL05S
JNBP3.7,SETOUT
MOVR0,#79H
LCALLADD1
MOVA,R3
CLRC
CJNEA,#24H,HOUU
HOUU:
JCSET6
LCALLCLR0
AJMPSET6
SETOUT:
JNBP3.7,SETOUT1
LCALLDISPLAY
JNBP3.7,SETOUT
CLR01H
CLR00H
CLR02H
CLRTR1
CLRET1
SETBTR0
SETBET0
LJMPSTART1
SET1:
LCALLDISPLAY
AJMPSET2
SET3:
LCALLDISPLAY
AJMPSET4
SET5:
LCALLDISPLAY
AJMPSETHH1
SET7:
LCALLDISPLAY
AJMPSET6
SETOUT1:
LCALLDISPLAY
AJMPSETOUT
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;显示程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
DISPLAY:
MOVR1,#70H
MOVR5,#0FEH
PLAY:
MOVA,R5
MOVP3,A
MOVA,@R1
MOVDPTR,#TAB
MOVCA,@A+DPTR
MOVP1,A
LCALLDL1MS
INCR1
MOVA,R5
JNBACC.5,ENDOUT
RLA
MOVR5,A
AJMPPLAY
ENDOUT:
SETBP3.5
MOVP1,#0FFH
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;延时程序;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
DL1MS:
MOVR6,#14H
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
;
DS20MS:
ACALLDISPLAY
ACALLDISPLAY
ACALLDISPLAY
RET
DL1S:
LCALLDL05S
LCALLDL05S
RET
DL05S:
MOVR3,#20H
DL05S1:
LCALLDISPLAY
DJNZR3,DL05S1
RET
END