日本欧美一区-日本欧美一区二区三区片-日本强好片久久久久久AAA-日本-区一区二区三区A片-日本人伦一区二区三区-日本人妻A片成人免费看

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機 >> 正文

單片機遙控電子鐘程序

作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2011-3-31

;******************************************************
;*標(biāo)題:      單片機遙控電子鐘程序
;*文件:                           
;*版本:    1.0
;*作者:     東哥   
;*郵箱:    picavr@163.com     QQ: 279068079

;******************************************************* 
                K1   BIT  P3.2          ;切換當(dāng)前時間,開機時間,關(guān)機時間(P3.2口定義為K1)
                K2   BIT  P3.4          ;調(diào)時鍵K2(P3.4 口定義為K2)
                K3   BIT  P3.5          ;調(diào)分鍵K3(P3.5 口定義為K3)
                K4   BIT  P3.6          ;啟動鍵K4(P3.6 口定義為K4)
                SI   BIT  P3.3          ;遙控輸入口定義為SI
                C_HOUR     EQU  24H     ;當(dāng)前時的地址定義
                C_MINUTE   EQU  25H     ;當(dāng)前分的地址定義
                C_SECOND   EQU  26H     ;當(dāng)前秒的地址定義
                ON_HOUR    EQU  27H     ;開機時的地址定義
                ON_MINUTE  EQU  28H     ;開機分的地址定義
                OFF_HOUR   EQU  29H     ;關(guān)機時的地址定義
                OFF_MINUTE EQU  30H     ;關(guān)機分的地址定義
                WORK_MODE  EQU  34H     ;當(dāng)前時間,開機時間,關(guān)機時間選擇
                USE_CODE   EQU  35H     ;用戶數(shù)據(jù)代碼地址定義
                DATA_CODE  EQU  36H     ;數(shù)據(jù)代碼地址定義
                COUNT      EQU  50H     ;計數(shù)地址定義
;******************************************************************************
                ORG     0000H           ;主程序入口地址
                AJMP    MAIN            ;轉(zhuǎn)主程序
                ORG     0003H           ;外中斷0中斷入口
                AJMP    INTEX0          ;跳至INTEX0執(zhí)行中斷服務(wù)程序
                ORG     000BH           ;定時器T0中斷入口地址
                AJMP    WTO             ;跳至定時器T0執(zhí)行中斷服務(wù)程序
                ORG     0013H           ;外中斷1中斷入口
                LJMP    INTEX1          ;跳至INTEX1執(zhí)行中斷服務(wù)程序
                ORG     001BH           ;定時器T1中斷入口地址
                RETI                    ;中斷返回(不開中斷)
                ORG     0023H           ;串行口中斷入口地址
                RETI                    ;中斷返回(不開中斷)
                ORG     002BH           ;定時器T2中斷入口地址
                RETI                    ;中斷返回(不開中斷)
;******************************************************************************
;*                                主程序                                   *
;******************************************************************************
                ORG    0030H
MAIN:           MOV    SP,#50H          ;堆棧指針入口地址
                CLR    00H              ;清開始調(diào)整標(biāo)志
                CLR    01H              ;清當(dāng)前時間標(biāo)志
                CLR    02H              ;清開機時間標(biāo)志
                CLR    03H              ;清關(guān)機時間標(biāo)志
                CLR    04H              ;遙控用戶識別標(biāo)志
                MOV    21H,#0           ;10MS定時中斷計數(shù)器初值
                MOV    22H,#0           ;500MS定時中斷計數(shù)器初值
                MOV    C_HOUR,#0
                MOV    C_MINUTE,#0
                MOV    C_SECOND,#0      ;置當(dāng)前時間為00:00:00
                MOV    ON_HOUR,#06H
                MOV    ON_MINUTE,#00H   ;置開機時間為06:00
                MOV    OFF_HOUR,#12H
                MOV    OFF_MINUTE,#00H  ;置關(guān)機時間為12:00
                MOV    WORK_MODE,#0     ;
                MOV    USE_CODE,#00H    ;用戶數(shù)據(jù)代碼為00
                MOV    DATA_CODE,#00H   ;數(shù)據(jù)代碼為00
                MOV    R6,#8            ;數(shù)據(jù)為8位
                MOV    TH0,#0D8H        ;T0 10ms定時初值
                MOV    TL0,#0F0H        ;T0 10ms定時初值
                MOV    TH1,#00H         ;T1 定時初值為00
                MOV    TL1,#00H         ;T1 定時初值為00
                MOV    TMOD,#11H        ;T0 方式1設(shè)定
                MOV    IE,#00H          ;關(guān)所有中斷
                CLR    A                ;
                DEC    A                ;A為#0FFH
                MOV    P0,A             ;P1-P3口置1
                MOV    P1,A             ;
                MOV    P2,A             ;
                MOV    P3,A             ;
                SETB   EA               ;開CPU中斷
                SETB   EX1              ;開外中斷
                SETB   EX0              ;開INT0中斷請求
                CLR    ET0              ;禁止T0中斷   
                CLR    TR0              ;禁止T0計數(shù)
                CLR    IT0              ;置INT0為電平觸發(fā)
                SETB   IT1              ;置INT1為邊沿觸發(fā)
                SETB   PX1              ;置INT1為最高級中斷
                SETB   P3.7             ;置開關(guān)輸出控制端口P3.7為"1"
M:              MOV    A,C_HOUR
                CJNE   A,ON_HOUR,OFF_TIME
                MOV    A,C_MINUTE       ;判斷當(dāng)前時間是否等於開機時間
                CJNE   A,ON_MINUTE,OFF_TIME
                CLR    P3.7             ;置開關(guān)輸出控制端口P3.7為"0"
                AJMP   NEXT                  
OFF_TIME:       MOV    A,C_HOUR
                CJNE   A,OFF_HOUR,NEXT
                MOV    A,C_MINUTE
                CJNE   A,OFF_MINUTE,NEXT;判斷當(dāng)前時間是否等於關(guān)機時間
                SETB   P3.7             ;置開關(guān)輸出控制端口P3.7為"1"  
NEXT:           JNB    01H,ONDISP
                ACALL  DISP1            ;調(diào)當(dāng)前時間顯示子程序 
ONDISP:         JNB    02H,OFFDISP
                ACALL  DISP2            ;調(diào)開機時間顯示子程序
OFFDISP:        JNB    03H,M
                ACALL  DISP3            ;調(diào)關(guān)機時間顯示子程序
                AJMP   M                ;轉(zhuǎn) M 循環(huán)
                NOP                     ;PC值出錯處理
                NOP
                NOP
                AJMP   MAIN             ;重新初始化
                                                           
TAB:            DB 0C0H,0F9H,0A4H,0B0H,99H ;顯示代碼數(shù)據(jù)
                DB 92H,82H,0F8H,80H,90H
;*******************************************************************************************************
;*                                            當(dāng)前時間顯示子程序                                        *
;*******************************************************************************************************
DISP1:          MOV R0,C_HOUR
                MOV DPTR,#TAB           ;筆劃段碼表指針
                MOV A,R0
                SWAP A
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.0
                ACALL DL                ;送顯時高位
                SETB P2.0
                MOV A,R0
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.1
                ACALL DL
                SETB P2.1               ;送顯時低位
                MOV R1,C_MINUTE
                MOV A,R1
                SWAP A
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.2
                ACALL DL
                SETB P2.2               ;送顯分高位
                MOV A,R1
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.3
                ACALL DL
                SETB P2.3               ;送顯分低位
                MOV R2,C_SECOND        
                MOV A,R2
                SWAP A
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.4
                ACALL DL
                SETB P2.4               ;送顯秒高位
                MOV A,R2
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.5
                ACALL DL
                SETB P2.5               ;送顯秒低位
                RET
;*************************************************************************************************************
;*                                         定時器T0中斷服務(wù)子程序                                           *               
;*************************************************************************************************************
WTO:            PUSH   ACC              ;保護現(xiàn)場   
                PUSH   PSW
                MOV    A,#0B7H          ;中斷響應(yīng)時間同步修正
                ADD    A,TL0            ;低8位初值修正
                MOV    TL0,A            ;重裝初值(低8位修正值)
                MOV    A,#0F0H          ;高8位初值修正
                ADDC   A,TH0            ;
                MOV    TH0,A            ;重裝初值(高8位修正值)
                INC    21H
                MOV    A,21H
                CJNE   A,#50,TORETI     ;10mS * 50mS=0.5S
                MOV    21H,#0
                INC    22H
                MOV    A,22H
                CJNE   A,#2,TORETI      ;0.5S * 2 =1S
                MOV    22H,#0
                CPL    P0.0             ;秒指示
                CPL    P0.1
                MOV    A,#01H
                ADD    A,C_SECOND
                DA     A
                MOV    C_SECOND,A       ;當(dāng)前秒加1
                CJNE   A,#60H,TORETI    ;為60嗎(是秒清0,否返回)
                MOV    C_SECOND,#0
                MOV    A,#01H
                ADD    A,C_MINUTE
                DA     A
                MOV    C_MINUTE,A       ;當(dāng)前分加1
                CJNE   A,#60H,TORETI    ;為60嗎(是分清0,否返回)
                MOV    C_MINUTE,#0
                MOV    A,#01H
                ADD    A,C_HOUR
                DA     A
                MOV    C_HOUR,A         ;當(dāng)前時加1
                CJNE   A,#24H,TORETI    ;為24嗎(是時清0,否返回)
                MOV    C_HOUR,#0
TORETI:         POP    PSW              ;恢復(fù)現(xiàn)場
                POP    ACC
                RETI
;**************************************************************************************************
;                                 開機時間顯示子程序                                              *
;**************************************************************************************************
DISP2:          MOV R0,ON_HOUR
                MOV DPTR,#TAB           ;筆劃段碼表指針
                MOV A,R0
                SWAP A
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.0
                ACALL DL                ;送顯時高位
                SETB P2.0
                MOV A,R0
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.1
                ACALL DL                ;送顯時低位
                SETB P2.1
                MOV R1,ON_MINUTE
                MOV A,R1
                SWAP A
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.2
                ACALL DL                ;送顯分高位      
                SETB P2.2
                MOV A,R1
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.3
                ACALL DL                ;送顯分低位
                SETB P2.3
                RET
;*************************************************************************************************
;                                      關(guān)機時間顯示子程序                                        *
;*************************************************************************************************
DISP3:          MOV R0,OFF_HOUR
                MOV DPTR,#TAB           ;筆劃段碼表指針   
                MOV A,R0
                SWAP A
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.0
                ACALL DL                ;送顯時高位
                SETB P2.0
                MOV A,R0
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.1
                ACALL DL                ;送顯時低位  
                SETB P2.1
                MOV R1,OFF_MINUTE
                MOV A,R1
                SWAP A
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.2
                ACALL DL                ;送顯分高位
                SETB P2.2
                MOV A,R1
                ANL A,#0FH
                MOVC A,@A+DPTR
                MOV P1,A
                CLR P2.3
                ACALL DL                ;送顯分低位
                SETB P2.3
                RET
;************************************************************************************************************
;                                   延時0.16ms子程序                                                        *
;************************************************************************************************************ 
DL:             MOV  31H,#80
DL2:            DJNZ 31H,DL2
                RET
;****************************************************************************************************
;                                     延時10MS子程序,用於消除按鍵抖動而產(chǎn)生誤動作                   *
;****************************************************************************************************
DEL:            MOV  32H,#200
DEL1:           MOV  33H,#250
DEL2:           DJNZ 33H,DEL2
                DJNZ 32H,DEL1
                RET
;*************************************************************************************************************
;                                   按鍵中斷處理子程序                                                        *
;*************************************************************************************************************
INTEX0:         PUSH  ACC                 ;保護現(xiàn)場
                PUSH  PSW
                CLR   EX0                 ;關(guān)外部中斷INT0
                JB    K1,$                ;判斷K1按下否,未按則等待,K1按下
                                          ;LED1亮, LED2熄滅
DISP1_0:        ACALL DISP1               ;
                JNB   K1,DISP1_0          ;等待K1釋放
                ACALL DEL                 ;K1按下開機指示LED1亮,LED2熄滅  
PH4:            CLR   P3.1                ;LED1亮
                SETB  P3.0                ;LED2熄滅  
PH0:            ACALL DISP1               ;調(diào)當(dāng)前時間顯示子程
                JB    K2,PH01             ;判K2按下否,未按則轉(zhuǎn)到判K3
DISP1_1:        ACALL DISP1               ; 
                JNB   K2,DISP1_1          ;等待K2釋放
                ACALL DEL
                MOV   R0,C_HOUR
                MOV   A,#01H
                ADD   A,R0
                DA    A
                MOV   C_HOUR,A            ;當(dāng)前時間時加1
                CJNE  A,#24H,PH0          ;超過24嗎(超過清0)
                MOV   C_HOUR,#0
PH01:           JB    K3,PH1              ;判K3按下否,未按則轉(zhuǎn)判K4
DISP1_2:        ACALL DISP1               ;
                JNB   K3,DISP1_2          ;等待K3釋放          
                ACALL DEL
                MOV   R0,C_MINUTE
                MOV   A,#01H
                ADD   A,R0
                DA    A
                MOV   C_MINUTE,A          ;當(dāng)前時間分加1
                CJNE  A,#60H,PH0          ;超過60嗎(超過清0)
                MOV   C_MINUTE,#0
PH1:            JB    K4,PH10             ;判K4按下否,未按則轉(zhuǎn)到判K1   
DISP1_3:        ACALL DISP1               ;
                JNB   K4,$                ;等待K4釋放
                ACALL DEL
                AJMP  TEND                ;K4按下,轉(zhuǎn)啟動
PH10:           JB    K1,PH0              ;判K1按下否,未按則再
DISP1_4:        ACALL DISP1               ;
                JNB   K1,DISP1_4          ;等待K1釋放
                ACALL DEL                 ;K1按下開機指示LED1熄滅,LED2亮
                SETB  P3.1                ;LED1熄滅
                CLR   P3.0                ;LED2亮

PH2:            ACALL DISP2               ;調(diào)開機時間顯示子程序
                JB    K2,PH201            ;判K2按下否,未按則轉(zhuǎn)到判K3
DISP2_1:        ACALL DISP2               ;
                JNB   K2,DISP2_1          ;等待K2釋放
                MOV   R0,ON_HOUR
                MOV   A,#01H
                ADD   A,R0
                DA    A
                MOV   ON_HOUR,A           ;開機時間時加1
                CJNE  A,#24H,PH2          ;超過24嗎(超過清0)
                MOV   ON_HOUR,#0
PH201:          JB    K3,PH210            ;判K3按下否,未按則轉(zhuǎn)判K4
DISP2_2:        ACALL DISP2               ;
                JNB   K3,DISP2_2          ;等待K3釋放             
                ACALL DEL
                MOV   R0,ON_MINUTE
                MOV   A,#01H
                ADD   A,R0
                DA    A
                MOV   ON_MINUTE,A         ;開機時間分加1
                CJNE  A,#60H,PH2          ;超過60嗎(超過清0)
                MOV   ON_MINUTE,#0
PH210:          JB    K1,PH2              ;判K1按下否,未按則再
DISP2_3:        ACALL DISP2               ;
                JNB   K1,DISP2_3          ;等待K1釋放
                ACALL DEL                 ;K1按下關(guān)機指示LED1. LED2亮
                CLR   P3.0                ;LED1亮    
                CLR   P3.1                ;LED2亮

PH3:            ACALL DISP3               ;調(diào)關(guān)機時間顯示子程序
                JB    K2,PH301            ;判K2按下否,未按則轉(zhuǎn)到判K3
DISP3_1:        ACALL DISP3               ;
                JNB   K2,DISP3_1          ;等待K2釋放
                ACALL DEL
                MOV   R0,OFF_HOUR
                MOV   A,#01H
                ADD   A,R0
                DA    A
                MOV   OFF_HOUR,A          ;關(guān)機時間時加1
                CJNE  A,#24H,PH3          ;超過24嗎(超過清0) 
                MOV   OFF_HOUR,#0
PH301:          JB    K3,PH310            ;判K3按下否,未按則轉(zhuǎn)判K4
DISP3_2:        ACALL DISP3               ;
                JNB   K3,DISP3_2          ;等待K3釋放
                ACALL DEL
                MOV   R0,OFF_MINUTE
                MOV   A,#01H
                ADD   A,R0
                DA    A
                MOV   OFF_MINUTE,A        ;關(guān)機時間分加1
                CJNE  A,#60H,PH3          ;超過60嗎(超過清0)
                MOV   OFF_MINUTE,#0
PH310:          JB    K1,PH3              ;判K1按下否,未按則再
DISP3_3:        ACALL DISP3               ;
                JNB   K1,DISP3_3          ;等待K1釋放
                ACALL DEL
                AJMP  PH4                 ;轉(zhuǎn)當(dāng)前時間調(diào)整

TEND:           SETB  EX0                 ;開INT0中斷
                SETB  TR0                 ;允許T0計數(shù) 
                SETB  01H                 ;置00H為1,啟動計數(shù) 
                SETB  ET0                 ;允許T0中斷
                SETB  P3.7                ;置P3.7口為1
                POP   PSW                 ;恢復(fù)現(xiàn)場
                POP   ACC
                RETI                      ;中斷返回
;**********************************************************************
;;;;;;;;;;;;;;;;;;;;;;;;;     遙控接收程序      ;;;;;;;;;;;;;;;;;;;;;;;
;**********************************************************************
;采用中斷接收
INTEX1:        
                CLR      EA             ;
                CLR      TR1            ;
                JNB      SI,$           ;
                NOP
                NOP
                JNB      SI,$
                SETB     TR1            ;
                MOV      R2,TH1         ;取T0計數(shù)次數(shù)
                MOV      R3,TL1
                MOV      R4,#00H        ;0096H~03B6H為數(shù)據(jù)窗口0
                MOV      R5,#96H        ;窗口0的下限
                LCALL    SUB0           ;計數(shù)值小于00FAH嗎?
                JC       ERROUT         ;<0096H,作廢
                MOV      R4,#03H        ;窗口0的上限
                MOV      R5,#0B6H
                MOV      R2,TH1         ;取T0計數(shù)次數(shù)
                MOV      R3,TL1
                LCALL    SUB0           ;計數(shù)值大于03B6H嗎?
                JNC      X1_01          ;>03B6,去看是否在1的窗口
                CLR      C              ;在窗口0中,清C,移位時移入0
                LJMP     SET_CODE_0     ;去移位處理
X1_01:          MOV      R4,#04H        ;窗口1的下限
                MOV      R5,#4CH        ;044CH~073AH為窗口1
                MOV      R2,TH1         ;取T0計數(shù)次數(shù)
                MOV      R3,TL1
                LCALL    SUB0           ;計數(shù)值小于044CH嗎?
                JC       ERROUT          ;<044CH,作廢
                MOV      R4,#07H        ;窗口1的上限
                MOV      R5,#3AH        ;#073A
                MOV      R2,TH1         ;取T1計數(shù)次數(shù)
                MOV      R3,TL1
                LCALL    SUB0           ;計數(shù)值大于#073AH嗎?
                JNC      ERROUT         ;>073AH,作廢
                SETB     C              ;在窗口1中,將C置1
SET_CODE_0:
                JB       04H,NEXT       ;
                MOV      A,USE_CODE     ;
                RLC      A              ;
                MOV      USE_CODE,A     ;
                DJNZ     COUNT,ERROUT   ;
                MOV      COUNT,#8       ;
                MOV      A,USE_CODE     ;
                CJNE     A,#0E2H,ERROUT ;
                SETB     04H            ;
;**********************************************
ERROUT:      
                MOV      TH1,#00H       ;
                MOV      TL1,#00H       ;
                SETB     TR1            ;
                SETB     EA             ;
                RETI                    ;
;*********************************************
NEXT:     
                MOV      A,DATA_CODE    ;
                RLC      A              ;
                MOV      DATA_CODE,A    ;
                DJNZ     R6,ERROUT      ;
                MOV      R6,#8          ;
                CLR      04H            ;
;*********************************************
                MOV      A,DATA_CODE    ;
                CJNE     A,#00H,CH1     ;
                AJMP     FUN1           ;
           
CH1:            CJNE     A,#10H,CH2     ;
                AJMP     FUN2           ;

CH2:            CJNE     A,#08H,CH3     ;
                AJMP     FUN3           ;
          
CH3:            CJNE     A,#80H,CH4     ;
                AJMP     FUN4           ;

CH4:            CJNE     A,#90H,CH5     ;
                AJMP     ERROUT         ;
CH5:            CJNE     A,#88H,CH6     ;
                AJMP     ERROUT         ;
CH6:            CJNE     A,#4H,CH7      ;
                AJMP     ERROUT         ;
CH7:            CJNE     A,#50H,CH8     ;
CH8:            AJMP     ERROUT         ;
;********************************************************

SUB0:           CLR      C              ;減法子程序
                MOV      A,R3           ;被減數(shù)低位送A
                SUBB     A,R5           ;低位減
                JNC      X1_S1          ;沒進(jìn)位,去處理高位減法
                DEC      R2             ;有進(jìn)位,被減數(shù)高位減1
X1_S1:          CLR      C              ;清C
                MOV      A,R2           ;被減數(shù)高位
                SUBB     A,R4           ;減被減數(shù)高位
                RET                     ;返回
;*********************************************************************
;*             遙控切換當(dāng)前時間,開機時間,關(guān)機時間調(diào)整程序          *
;*********************************************************************                                    
FUN1:           CLR     TR0             ;禁止T0計數(shù)
                CLR     ET0             ;禁止T0中斷
                INC     WORK_MODE       ;時間選擇寄存器加"1"
                MOV     A,WORK_MODE
                CJNE    A,#01H,ONHOUR   ;選擇寄存器為"1",轉(zhuǎn)開機調(diào)整標(biāo)志
                SETB    00H             ;置開始調(diào)整標(biāo)志為"1"
                SETB    01H             ;置當(dāng)前時間標(biāo)志為"1"
                CLR     02H             ;清開機時間標(biāo)志
                CLR     03H             ;清關(guān)機時間標(biāo)志
                CLR     P3.0            ;LED1亮
                SETB    P3.1            ;LED2滅
                AJMP    EXIT            ;轉(zhuǎn)中斷退出     
ONHOUR:         CJNE    A,#02H,OFFHOUR  ;選擇寄存器為"2",轉(zhuǎn)關(guān)機調(diào)整標(biāo)志
                CLR     01H             ;清當(dāng)前時間標(biāo)志
                SETB    02H             ;置開機時間標(biāo)志為"1"
                CLR     03H             ;清關(guān)機時間標(biāo)志
                CLR     P3.1            ;LED2亮
                SETB    P3.0            ;LED1滅
                AJMP    EXIT            ;轉(zhuǎn)中斷退出
OFFHOUR:        CJNE    A,#03H,EXIT     ;選擇寄存器為"3",不為3轉(zhuǎn)中斷退出
                MOV     WORK_MODE,#0    ;時間選擇寄存器清0
                CLR     01H             ;清當(dāng)前時間標(biāo)志
                CLR     02H             ;清開機時間標(biāo)志
                SETB    03H             ;置關(guān)機時間標(biāo)志為"1"
                CLR     P3.0            ;LED1亮
                CLR     P3.1            ;LED2亮
;*******************************************************************               
EXIT:           LJMP    ERROUT          ;轉(zhuǎn)中斷退出
;*******************************************************************
; *                         遙控調(diào)時程序                           *
;*******************************************************************
FUN2:           JNB     00H,EXIT        ;(00H)等于0,轉(zhuǎn)中斷退出
                                        ;(00H)等于1,轉(zhuǎn)判(01)
                JNB     01H,ONHOURADJ   ;(01H)等于0,轉(zhuǎn)開機 "時" 調(diào)整;
                                        ;(01H)等于1,當(dāng)前   "時" 調(diào)整
                MOV     R0,C_HOUR
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     C_HOUR,A        ;當(dāng)前時間"時"加1
                CJNE    A,#24H,EXIT     ;超過24嗎(超過清0),不為0中斷退出
                MOV     C_HOUR,#0
                AJMP    EXIT            ;轉(zhuǎn)中斷退出

ONHOURADJ:      JNB     02H,OFFHOURADJ  ;(02H)等于0,轉(zhuǎn)關(guān)機 "時" 調(diào)整;
                                        ;(02H)等于1,開機   "時" 調(diào)整
                MOV     R0,ON_HOUR
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     ON_HOUR,A       ;開機時間"時"加1
                CJNE    A,#24H,EXIT     ;超過24嗎(超過清0),不為0中斷退出
                MOV     ON_HOUR,#0
                AJMP    EXIT            ;轉(zhuǎn)中斷退出

OFFHOURADJ:     JNB     03H,EXIT        ;(03H)等于0,轉(zhuǎn)中斷退出
                                        ;(03H)等于1,關(guān)機 "時" 調(diào)整
                MOV     R0,OFF_HOUR
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     OFF_HOUR,A      ;關(guān)機時間"時"加1
                CJNE    A,#24H,EXIT     ;超過24嗎(超過清0),不為0中斷退出
                MOV     OFF_HOUR,#0
                AJMP    EXIT            ;轉(zhuǎn)中斷退出      

;*******************************************************************
; *                         遙控調(diào)分程序                           *
;*******************************************************************
FUN3:           JNB     00H,EXIT        ;(00H)等于0,轉(zhuǎn)中斷退出
                                        ;(00H)等于1,轉(zhuǎn)判(01)
                JNB     01H,ONMINUTEADJ ;(01H)等于0,轉(zhuǎn)開機 "分" 調(diào)整;
                                        ;(01H)等于1,當(dāng)前   "分" 調(diào)整
                MOV     R0,C_MINUTE
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     C_MINUTE,A      ;當(dāng)前時間"分"加1
                CJNE    A,#60H,EXIT     ;超過60嗎(超過清0),不為0中斷退出
                MOV     C_MINUTE,#0
                AJMP    EXIT            ;轉(zhuǎn)中斷退出
ONMINUTEADJ:    JNB     02H,OFFMINUTEADJ;(02H)等于0,轉(zhuǎn)關(guān)機 "分" 調(diào)整;
                                        ;(02H)等于1,開機   "分" 調(diào)整
                MOV     R0,ON_MINUTE
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     ON_MINUTE,A     ;開機時間"分"加1
                CJNE    A,#60H,EXIT     ;超過60嗎(超過清0),不為0中斷退出
                MOV     ON_MINUTE,#0
                AJMP    EXIT            ;轉(zhuǎn)中斷退出
OFFMINUTEADJ:   JNB     03H,EXIT        ;(03H)等于0,轉(zhuǎn)中斷退出
                                        ;(03H)等于1,關(guān)機 "分" 調(diào)整   
                MOV     R0,OFF_MINUTE
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     OFF_MINUTE,A    ;關(guān)機時間"分"加1
                CJNE    A,#60H,EXIT     ;超過60嗎(超過清0),不為0中斷退出
                MOV     OFF_MINUTE,#0
                AJMP    EXIT            ;轉(zhuǎn)中斷退出

;*******************************************************************
; *                         遙控啟動程序                           *
;*******************************************************************
FUN4:           SETB    EX0             ;開INT0中斷
                SETB    TR0             ;允許T0計數(shù) 
                SETB    ET0             ;允許T0中斷
                SETB    P3.7            ;置P3.7口為"1"
                CLR     00H             ;清開始調(diào)整標(biāo)志
                SETB    01H             ;置當(dāng)前時間標(biāo)志為"1"
                CLR     02H             ;清開機時間標(biāo)志
                CLR     03H             ;清關(guān)機時間標(biāo)志
                MOV     C_SECOND,#00H   ;秒清0
                MOV     WORK_MODE,#00H  ;時間選擇寄存器清0
                LJMP    EXIT            ;轉(zhuǎn)中斷退出
;*******************************************************************
DELAY:          MOV     R0,#0FFH
DELAY1:         DJNZ    R0,DELAY1
                RET                     ;返回
                END                     ;程序結(jié)束

Tags:單片機,遙控電子鐘,設(shè)計,程序  
責(zé)任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網(wǎng)友評論
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢