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

📄

📁 sdfs就很高很高很高很高很高高交会馆
💻
📖 第 1 页 / 共 3 页
字号:
                JC       ERROUT         ;<0096H,作废
                MOV      R4,#03H        ;窗口0的上限
                MOV      R5,#0B6H
                MOV      R2,TH1         ;取T0计数次数
                MOV      R3,TL1
                LCALL    SUB0           ;计数值大于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计数次数
                MOV      R3,TL1
                LCALL    SUB0           ;计数值小于044CH吗?
                JC       ERROUT          ;<044CH,作废
                MOV      R4,#07H        ;窗口1的上限
                MOV      R5,#3AH        ;#073A
                MOV      R2,TH1         ;取T1计数次数
                MOV      R3,TL1
                LCALL    SUB0           ;计数值大于#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           ;被减数低位送A
                SUBB     A,R5           ;低位减
                JNC      X1_S1          ;没进位,去处理高位减法
                DEC      R2             ;有进位,被减数高位减1
X1_S1:          CLR      C              ;清C
                MOV      A,R2           ;被减数高位
                SUBB     A,R4           ;减被减数高位
                RET                     ;返回
;*********************************************************************
;*             遥控切换当前时间,开机时间,关机时间调整程序          *
;*********************************************************************                                     
FUN1:           CLR     TR0             ;禁止T0计数 
                CLR     ET0             ;禁止T0中断
                INC     WORK_MODE       ;时间选择寄存器加"1"
                MOV     A,WORK_MODE
                CJNE    A,#01H,ONHOUR   ;选择寄存器为"1",转开机调整标志
                SETB    00H             ;置开始调整标志为"1"
                SETB    01H             ;置当前时间标志为"1"
                CLR     02H             ;清开机时间标志
                CLR     03H             ;清关机时间标志
                CLR     P3.0            ;LED1亮
                SETB    P3.1            ;LED2灭
                AJMP    EXIT            ;转中断退出      
ONHOUR:         CJNE    A,#02H,OFFHOUR  ;选择寄存器为"2",转关机调整标志
                CLR     01H             ;清当前时间标志
                SETB    02H             ;置开机时间标志为"1"
                CLR     03H             ;清关机时间标志
                CLR     P3.1            ;LED2亮
                SETB    P3.0            ;LED1灭
                AJMP    EXIT            ;转中断退出
OFFHOUR:        CJNE    A,#03H,EXIT     ;选择寄存器为"3",不为3转中断退出
                MOV     WORK_MODE,#0    ;时间选择寄存器清0
                CLR     01H             ;清当前时间标志
                CLR     02H             ;清开机时间标志
                SETB    03H             ;置关机时间标志为"1"
                CLR     P3.0            ;LED1亮
                CLR     P3.1            ;LED2亮
;*******************************************************************                
EXIT:           LJMP    ERROUT          ;转中断退出
;*******************************************************************
; *                         遥控调时程序                           *
;*******************************************************************
FUN2:           JNB     00H,EXIT        ;(00H)等于0,转中断退出
                                        ;(00H)等于1,转判(01) 
                JNB     01H,ONHOURADJ   ;(01H)等于0,转开机 "时" 调整;
                                        ;(01H)等于1,当前   "时" 调整
                MOV     R0,C_HOUR
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     C_HOUR,A        ;当前时间"时"加1
                CJNE    A,#24H,EXIT     ;超过24吗(超过清0),不为0中断退出 
                MOV     C_HOUR,#0
                AJMP    EXIT            ;转中断退出

ONHOURADJ:      JNB     02H,OFFHOURADJ  ;(02H)等于0,转关机 "时" 调整;
                                        ;(02H)等于1,开机   "时" 调整
                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            ;转中断退出

OFFHOURADJ:     JNB     03H,EXIT        ;(03H)等于0,转中断退出
                                        ;(03H)等于1,关机 "时" 调整
                MOV     R0,OFF_HOUR
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     OFF_HOUR,A      ;关机时间"时"加1
                CJNE    A,#24H,EXIT     ;超过24吗(超过清0),不为0中断退出
                MOV     OFF_HOUR,#0
                AJMP    EXIT            ;转中断退出       

;*******************************************************************
; *                         遥控调分程序                           *
;*******************************************************************
FUN3:           JNB     00H,EXIT        ;(00H)等于0,转中断退出
                                        ;(00H)等于1,转判(01) 
                JNB     01H,ONMINUTEADJ ;(01H)等于0,转开机 "分" 调整;
                                        ;(01H)等于1,当前   "分" 调整
                MOV     R0,C_MINUTE
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     C_MINUTE,A      ;当前时间"分"加1
                CJNE    A,#60H,EXIT     ;超过60吗(超过清0),不为0中断退出
                MOV     C_MINUTE,#0
                AJMP    EXIT            ;转中断退出
ONMINUTEADJ:    JNB     02H,OFFMINUTEADJ;(02H)等于0,转关机 "分" 调整;
                                        ;(02H)等于1,开机   "分" 调整
                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            ;转中断退出
OFFMINUTEADJ:   JNB     03H,EXIT        ;(03H)等于0,转中断退出 
                                        ;(03H)等于1,关机 "分" 调整    
                MOV     R0,OFF_MINUTE
                MOV     A,#01H
                ADD     A,R0
                DA      A
                MOV     OFF_MINUTE,A    ;关机时间"分"加1
                CJNE    A,#60H,EXIT     ;超过60吗(超过清0),不为0中断退出
                MOV     OFF_MINUTE,#0
                AJMP    EXIT            ;转中断退出

;*******************************************************************
; *                         遥控启动程序                           *
;*******************************************************************
FUN4:           SETB    EX0             ;开INT0中断
                SETB    TR0             ;允许T0计数  
                SETB    ET0             ;允许T0中断
                SETB    P3.7            ;置P3.7口为"1"
                CLR     00H             ;清开始调整标志
                SETB    01H             ;置当前时间标志为"1"
                CLR     02H             ;清开机时间标志
                CLR     03H             ;清关机时间标志
                MOV     C_SECOND,#00H   ;秒清0
                MOV     WORK_MODE,#00H  ;时间选择寄存器清0
                LJMP    EXIT            ;转中断退出
;*******************************************************************
DELAY:          MOV     R0,#0FFH
DELAY1:         DJNZ    R0,DELAY1
                RET                     ;返回
                END                     ;程序结束


参考链接:http://www.picavr.com/news/2008-10/8586.htm

⌨️ 快捷键说明

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