⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 89c2051.asm

📁 用AT89C2051的最简单电子钟
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                   ACALL CLR0 
                   MOV	R0,#79H               ;指向小时计时单元(78H-79H) 
                   ACALL ADD1 
                   MOV   A,R3 
                   CLR   C 
                   CJNE  A,#24H,HOUR 
             HOUR: JC    OUTT0 
                   ACALL CLR0 
            OUTT0: MOV   A,66H                 ;查询标志 
                   CJNE  A,#1,OUTT01 
                   MOV   72H,76H               ;中断退出时将分、时计时单元数据移入对应显示单元 
                   MOV   73H,77H 
                   MOV   74H,78H 
                   MOV   75H,79H 
            OUTT01:POP  PSW                   ;出栈 
                   POP   ACC 
                   SETB  ET0                   ;开放T0 
                   RETI                        ;中断返回 
;---------------------------加1程序--------------------------; 
             ADD1: MOV	        A,@R0          ;取当前计时单元数据到A 
                   DEC          R0             ;指向前一地址 
                   SWAP         A              ;A中数据高四位与低四位交换 
                   ORL 	        A,@R0          ;前一地址中数据放入A中低四位 
                   ADD	        A,#01H         ;A加1操作 
                   DA 	        A              ;十进制调整 
                   MOV          R3,A           ;移入R3寄存器 
                   ANL 	        A,#0FH         ;高四位变0 
                   MOV 	        @R0,A          ;放回前一地址单元 
                   MOV	        A,R3           ;取回R3中暂存数据 
                   INC	        R0             ;指向当前地址单元 
                   SWAP	        A              ;A中数据高四位与低四位交换 
                   ANL 	        A,#0FH         ;高四位变0 
                   MOV	        @R0,A          ;数据放入当削地址单元中 
                   RET 
             CLR0: CLR          C 
                   CLR 		A              ;清累加器 
                   MOV 		@R0,A          ;清当前地址单元 
                   DEC 		R0             ;指向前一地址 
                   MOV 		@R0,A          ;前一地址单元清0 
                   RET                         ;子程序返回 
;-------------------------调时闪烁程序----------------------; 
INTT1:          PUSH    ACC 
                PUSH    PSW 
                MOV     TL1,#0B0H 
                MOV     TH1,#3CH 
                DJNZ    R2,INTT1OUT   	      ;0.3秒未到退出中断(50MS中断6次) 
                MOV     R2,#06H       	      ;重装0.3秒定时用初值 
                CPL     02H           	      ;0.3秒定时到对闪烁标志取反 
                JB      02H,FLASH1    	      ;02H位为1时显示单元"熄灭" 
                MOV     A,R5 
                CJNE    A,#01H,NL 
                JMP     NNN1 
             NL:CJNE    A,#02H,NL1 
                LJMP    NNN1 
            NL1:CJNE    A,#03H,NL2 
                LJMP    NLL 
            NL2:CJNE    A,#04H,INTT1OUT 
                LJMP    NLL 
            NLL:MOV     72H,76H 
                MOV     73H,77H 
                MOV     74H,78H 
                MOV     75H,79H 
                AJMP    INTT1OUT 
           NNN1:MOV     72H,7BH 
                MOV     73H,7CH 
                MOV     74H,7DH 
                MOV     75H,7EH 
       INTT1OUT:POP     PSW   	             ;恢复现场 
                POP     ACC 
                RETI                         ;中断退出 
         FLASH1:MOV     A,R5 
                CJNE    A,#01H,ML 
                LJMP    MNN1 
             ML:CJNE    A,#02H,ML1 
                LJMP    MNN2 
            ML1:CJNE    A,#03H,MN 
                LJMP    MLL 
             MN:CJNE    A,#04H,INTT1OUT 
                LJMP    MHL 
            MLL:MOV     72H,7AH 
                MOV     73H,7AH               ;显示单元(72-73H),将不显示分数据 
                MOV     74H,78H 
                MOV     75H,79H 
                AJMP    INTT1OUT 
            MHL:MOV     72H,76H 
                MOV     73H,77H 
                MOV     74H,7AH               ;显示单元(74-75H),小时数据将不显示 
                MOV     75H,7AH 
                AJMP    INTT1OUT 
           MNN1:MOV     72H,7AH 
                MOV     73H,7AH               ;显示单元(72-73H),将不显示闹钟分数据 
                MOV     74H,7DH 
                MOV     75H,7EH 
                AJMP    INTT1OUT 
           MNN2:MOV     72H,7BH 
                MOV     73H,7CH 
                MOV     74H,7AH 
                MOV     75H,7AH               ;显示单元(74-75H),闹钟小时数据将不显示 
                AJMP    INTT1OUT 
;-------------------------显示-------------------------------; 
 DISPLAY:MOV    DPTR,#DISDATA 
         MOV    A,70H 
         MOVC   A,@A+DPTR 
         MOV    P3,A 
         CLR    P1.0 
         NOP 
         NOP 
         NOP 
         SETB   P1.0 
         MOV    A,71H 
         MOVC   A,@A+DPTR 
         MOV    P3,A 
         CLR    P1.1 
         NOP 
         NOP 
         NOP 
         SETB   P1.1 
         MOV    A,72H 
         MOVC   A,@A+DPTR 
         MOV    P3,A 
         CLR    P1.2 
         NOP 
         NOP 
         NOP 
         SETB   P1.2 
         MOV    A,73H 
         MOVC   A,@A+DPTR 
         MOV    P3,A 
         CLR    P1.3 
         NOP 
         NOP 
         NOP 
         SETB   P1.3 
         MOV    A,74H 
         MOVC   A,@A+DPTR 
         MOV    P3,A 
         CLR    P1.4 
         NOP 
         NOP 
         NOP 
         SETB   P1.4 
         MOV    A,75H 
         MOVC   A,@A+DPTR 
         MOV    P3,A 
         CLR    P1.5 
         NOP 
         NOP 
         NOP 
         SETB   P1.5 
         RET 
    BEEP:MOV   A,68H           ;查询标志 
         CJNE  A,#1,BEERE 
         MOV   A,78H           ;查询闹钟时个位 
         CJNE  A,7DH,BEERE 
         MOV   A,79H           ;查询闹钟时十位 
         CJNE  A,7EH,BEERE 
         MOV   A,76H           ;查询闹钟分个位 
         CJNE  A,7BH,BEERE 
         MOV   A,77H           ;查询闹钟分十位 
         CJNE  A,7CH,BEERE 
      BB:CLR   P1.6 
         LCALL DDL 
         SETB  P1.6 
         LCALL DDL 
         JNB   P1.7,BEERR 
   BEERE:RET 
   BEERR:SETB  P1.6 
         MOV   68H,#0 
         LCALL DISPLAY 
         JNB   P1.7,BEERR 
         JMP   BEERE 
 DISDATA:DB 0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH   ;0123456789空白 
       END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -