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

📄 c2051.asm

📁 用AT89C2051的最简单电子钟
💻 ASM
📖 第 1 页 / 共 2 页
字号:
ORG       0000H              ;程序开始入口 
                  LJMP      START 
                  ORG       0003H              ;外中断0中断程序入口 
                  RETI 
                  ORG       000BH              ;定时器T0中断程序入口 
                  LJMP      INTT0              ;跳至INTTO执行 
          ORG       0013H              ;外中断1中断程序入口 
          RETI 
          ORG       001BH              ;定时器T1中断程序入口 
          LJMP      INTT1 
          ORG       0023H              ;串行中断程序入口地址 
                  RETI 
;---------------主程序----------------------; 
             START:MOV     R0,#70H             ;70给R0,清70-7FH显示内存 
                   MOV     R7,#0FH 
         CLEARDISP:MOV     @R0,#00H            ;0给R0中的数为地址的内存中存放(70H) 
                   INC     R0 
                   DJNZ    R7,CLEARDISP 
                   MOV     78H,#2              ;默认时间为12:00,闹钟5:00 
                   MOV     79H,#1 
                   MOV     74H,#2              ;防止上电时数码管显示00小时 
                   MOV     75H,#1 
                   MOV     66H,#1              ;中断退出时66H为1时,分、时计时单元数据移入显存标志 
                   MOV     68H,#1              ;上电默认闹钟开状态 
                   MOV     7DH,#6              ;闹钟时十位 
                   MOV     7CH,#3 
                   MOV     69H,#0 
                   MOV     7AH,#0AH            ;放入"熄灭符"数据 
                   MOV     TMOD,#11H           ;设T0、T1为16位定时器 
                   MOV     TL0,#0B0H           ;50MS定时初值(T0计时用) 
                   MOV     TH0,#3CH 
                   SETB    EA                  ;总中断开放 
                   SETB    ET0                 ;允许T0中断 
                   SETB    TR0                 ;T0定时器开始计时 
                   MOV     R4,#14H             ;1秒定时用初值(50MS×20) 
           START1:LCALL   DISPLAY             ;显示子程序 
                   LCALL   BEEP                ;闹钟查询 
                   JNB 	   P1.7,SETTIME        ;P1.7口为0时转时间调整程序 
                   JMP     START1              ;P1.7口为1时跳回START1 
;-----------------------时间闹钟调整系统--------------------------; 
             NFLAG:MOV          A,68H           ;设置闹钟开关状态 
                   CJNE         A,#1,BEE68 
                   MOV          68H,#0 
                   JMP          E6 
             BEE68:MOV          68H,#1 
                E6:MOV          66H,#8          ;中断退出66H不为1时分、时计时单元数据移入显存标志 
                   MOV          72H,7BH 
                   MOV          73H,7CH 
                   MOV          74H,7DH 
                   MOV          75H,7EH 
                   LCALL        DDL 
                   LCALL        DDL 
                   MOV          72H,68H 
                   MOV          73H,69H 
                   MOV          74H,7AH 
                   MOV          75H,7AH 
                   LCALL        DDL 
                   LCALL        DDL 
                   MOV          66H,#1 
                   LJMP  	START1 
           SETTIME:LCALL        DDL 
                   JB  	        P1.7,NFLAG     ;键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时 
                   MOV          TL1,#0B0H      ;T1闪烁定时初值 
                   MOV          TH1,#3CH 
                   MOV          R2,#06H        ;进入调时状态,赋闪烁定时初值 
                   MOV          66H,#8         ;调闹钟时保持走时,关闭时钟显示数据 
                   SETB         ET1            ;允许T1中断 
                   SETB         TR1            ;开启定时器T1 
              SET1:LCALL        DISPLAY        ;调用显示,防止键按下无显示 
                   JNB 		P1.7,SET1      ;P1.7口为0等待键释放 
                   MOV   	R5,#00H        ;清设置类型闪烁标志 
             SETN1:INC  	R5             ;闹钟分调整 
              SET5:LCALL        DISPLAY 
                   JB 		P1.7,SET5 
            SEETN1:LCALL        DDL            ;有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态 
                   JB 		P1.7,SET6      ;键释放查询,键释放自动转调时 
                   MOV 		R0,#7CH 
                   LCALL 	ADD1 
                   MOV 		A,R3 
                   CLR 		C 
                   CJNE 	A,#60H,HHN1 
              HHN1:JC 		SEETN1 
                   LCALL 	CLR0 
                   JMP          SEETN1 
              SET6:INC  	R5             ;闹钟时调整 
             SEET6:LCALL        DISPLAY 
                   JB    	P1.7,SEET6 
           SEETNH1:LCALL        DDL 
                   JB 		P1.7,SETF 
                   MOV	        R0,#7EH 
                   LCALL        ADD1 
                   MOV	        A,R3 
                   CLR 		C 
                   CJNE 	A,#24H,HOUU1 
             HOUU1:JC 		SEETNH1 
                   LCALL 	CLR0 
                    JMP  	SEETNH1 
              SETF:LCALL        DISPLAY 
                   JB 		P1.7,SETF 
                   LCALL        DDL 
                   JNB 		P1.7,SETOUT     ;短按调时,长按退出 
                   CLR          ET0 
                   CLR          TR0 
                   MOV   	70H,#00H        ;设定后的时间从00秒开始走时 
                   MOV   	71H,#00H 
                   INC  	R5 
              SET3:LCALL        DISPLAY 
                   JB 		P1.7,SET3 
             SETMM:LCALL        DDL 
                   JB 		P1.7,SET4 
                   MOV 		R0,#77H 
                   LCALL 	ADD1 
                   MOV 		A,R3 
                   CLR 		C 
                   CJNE 	A,#60H,MMH 
               MMH:JC 		SETMM 
                   LCALL 	CLR0 
                   AJMP         SETMM 
              SET4:INC          R5 
             SEET4:LCALL        DISPLAY 
                   JB    	P1.7,SEET4 
             SETHH:LCALL        DDL 
                   JB 		P1.7,SETOUT1 
                   MOV	        R0,#79H 
                   LCALL        ADD1 
                   MOV	        A,R3 
                   CLR 		C 
                   CJNE 	A,#24H,HOUU 
              HOUU:JC 		SETHH 
                   LCALL 	CLR0 
                   AJMP  	SETHH 
           SETOUT1:SETB  	ET0 
                   SETB  	TR0             ;计时开始 
            SETOUT:MOV   	R5,#00H         ;清设置类型闪烁标志 
                   CLR   	TR1             ;关闭T1 
                   CLR   	ET1             ;关T1中断 
                   MOV          66H,#1 
           SETOUT2:LCALL        DISPLAY 
                   JNB 		P1.7,SETOUT2 
                   LJMP 	START1 
;--------------------------延时1秒钟-----------------------; 
               DDL:MOV          18H,#36 
              DDL0:MOV          17H,#239 
              DDL1:LCALL        DISPLAY 
                   DJNZ         17H,DDL1 
                   DJNZ         18H,DDL0 
                   RET 
;----------------------------T0中断程序------------------------; 
            INTT0: PUSH  ACC                   ;打包 
                   PUSH  PSW 
                   CLR   ET0 
                   CLR   TR0 
                   MOV   A,#0B7H 
                   ADD   A,TL0 
                   MOV   TL0,A 
                   MOV   A,#3CH 
                   ADDC  A,TH0 
                   MOV   TH0,A 
                   SETB  TR0 
                   DJNZ  R4, OUTT0             ;20次中断未到中断退出 
           ADDSS:  MOV	R4,#14H               ;20次中断到(1秒)重赋初值 
                   MOV 	 R0,#71H               ;指向秒计时单元(70-71H) 
                   ACALL ADD1                  ;调用加1程序(加1秒操作) 
                   MOV   A,R3                  ;秒数据放入A(R3为2位十进制数组合) 
                   CLR	C                     ;清进位标志 
                   CJNE  A,#60H,ADDMM 
           ADDMM:  JC  	 OUTT01                ;小于60秒退出 
                   ACALL CLR0                  ;等于或大于60秒清0 
                   MOV	R0,#77H               ;指向分计时单元(76H-77H) 
                   ACALL ADD1 
                   MOV 	 A,R3 
                   CLR   C 
                   CJNE  A,#60H,ADDHH 
            ADDHH: JC	OUTT0 

⌨️ 快捷键说明

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