📄
字号:
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 + -