📄 计时器-2.dt
字号:
/*
实现上网1小时后,断开网络4小时。
如果断开电源60秒,再上电,可以再上网5分钟。
*/
include "inc.h"
tm_hour == 0x20
tm_minute == 0x21
tm_500ms == 0x22
tm_if_use == 0x23 ;是否开始上网的标志 4分钟算
tm_minute_charge == 0x24 ;开始计时,允许上网60分钟
tm_for_open_5m == 0x25
flagBnetUse == 0x10
BnetUse == 0
flagBnetoff == 0x10
Bnetoff == 1
flagB_500ms == 0x10
B_500ms == 2
flagBlast_staH == 0x10
Blast_staH == 3
Bled_start == 7 ; 开始计时指示灯
Brelay == 6 ;控制继电器 =0时,关断网络
;====================================================
ORG 0X0000
nop; ;程序复位入口
JMP RESET_START ;指令中断入口
ORG 0X0008 ;page 0
; 中断断点保护
EXT_INT:
DISI
MOV TEMP_ACC,A ;将ACC的值存在T_ACC中
SWAPA R3 ;将R3的值SWAP后存于ACC
MOV TEMP_R3,A ;将ACC的值存在T_R3中
BC R3,rpage
MOV A,FSR
BS R4,RP1
BC R4,RP0
MOV TEMP_FSR,A ;将FSR的值存在TEMP_FSR中
MOV A,RPPS ;将RPPS的值存在TEMP_RPPS中
MOV TEMP_RPPS,A
mov a,rb
mov temp_rb,a
BC R4,RP1
BC RB,CALL_1
BC RB,CALL_2
MOV A,RCIDA ;主程中CID地址保护
MOV PTR_MCID,A
bs r4,rp1
PAGE @0X00
JBC RISR,TCIF;发按键声音低频
JMP FSK_INT;rtcc中断fsk解码
MOV A,@0X00
JMP RET_INTX ;dtmf中断
MOV A,@MASK_int0
JMP RET_INTX
FSK_INT:
Bc R4,RP1
INC tm_500ms
Bs R4,RP1
bs flagB_500ms,B_500ms
jbc flagBnetoff,Bnetoff
jmp led_net_off
mov a,@0x0e
xor port7,a
MOV A,@MASK_TCIF;MASK_C8_1
JMP RET_INTX
led_net_off:
Bc R4,RP1
mov a,@0x0e
jbs tm_500ms,0
xor port7,a
Bs R4,RP1
MOV A,@MASK_TCIF;MASK_C8_1
JMP RET_INTX
; 中断返回 恢复断点
RET_INTX MOV RISR,A
RET_INTX0:
mov a,temp_rb
mov rb,a
BC R4,RP1
MOV A,PTR_MCID
MOV RCIDA,A
bs r4,rp1
JBS RPPS,PWDN
BC TEMP_RPPS,PWDN
MOV A,TEMP_RPPS ;恢复RPPS的值
MOV RPPS,A
MOV A,TEMP_FSR ;恢复FSR的值
MOV FSR,A
SWAPA TEMP_R3 ;将T_R3的值SWAP后存于ACC
MOV R3,A ;将ACC的值SWAP后存于R3
SWAP TEMP_ACC ;将T_ACC的值SWAP
SWAPA TEMP_ACC ;将T_ACC的值SWAP后存于ACC
RETI ;中断返回
RESET_START:
add a,@0xff;
add a,@0xff;
add a,@0xff;
add a,@0xff;
add a,@0xff;
add a,@0xff;
add a,@0xff;
mov a,@0x80
mov ra,a
mov a,@0x44;
contw
mov a,@0x01
iow iocf
clr r4
clr tm_hour
clr tm_minute
clr tm_500ms
clr tm_if_use
clr tm_minute_charge
mov a,@00
iow ioc5
iow ioc6
iow ioc8
iow ioc9
mov a,@0x01
iow ioc7
mov a,@0xfa
mov port7,a
BS R3,RPAGE ;PORT7
MOV A,@0X01
IOW PPORT7
clr R3
bs port7,Brelay ;开 bit6
bc flagBnetUse,BnetUse
bc flagBnetoff,Bnetoff
lp_wait0: clr tm_if_use
LP_wait:
not_1minute:
eni
;----------------------------------
Press_60S_open_5minute:
jbc flagB_500ms,B_500ms;1S的标志
jbs flagBnetoff,Bnetoff ;59-62秒
jmp not_pro_key
bc flagB_500ms,B_500ms ;变低60秒,开5分钟
jbs flagBlast_staH,Blast_staH
jmp have_low
_last_sta_H:
jbs port7,0
clr tm_for_open_5m
jmp not_pro_key
have_low:
inc tm_for_open_5m;500ms加1
jbs port7,0
jmp not_pro_key
mov a,@56
sub a,tm_for_open_5m
jbs psw,c
jmp not_pro_key
mov a,@63 ;57-62
sub a,tm_for_open_5m
jbs psw,c
jmp Open_net_5minute
not_pro_key:
bc flagBlast_staH,Blast_staH
jbc port7,0
bs flagBlast_staH,Blast_staH
;----------------------------------
clr r4
mov a,@59*2;59
sub a,tm_500ms
JBs r3,c
jmp not_1minute
;-------------到了1分钟!--------
clr tm_500ms
jbs port7,0
jmp reach_1minute
inc tm_if_use
mov a,@5;
sub a,tm_if_use
jbs psw,c
jmp reach_1minute
jbs flagBnetUse,BnetUse;
clr tm_minute_charge ;
bs flagBnetUse,BnetUse;
bc port7,Bled_start ;6
reach_1minute:
inc tm_minute
jbs flagBnetUse,BnetUse
jmp LP_wait
inc tm_minute_charge
mov a,@60
jbc flagBnetoff,Bnetoff
mov a,@250 ;关断4小时后,重新复位!
sub a,tm_minute_charge
jbS psw,c
jmp LP_wait
;----------------------------------
clr tm_minute_charge
jbc flagBnetoff,Bnetoff
jmp net_open
net_off:
mov a,@0x01+0x40
iow ioc7
bs flagBnetoff,Bnetoff
jmp LP_wait
net_open:
jmp RESET_START
;标准断电30秒,开5分钟的网络。
;
;
Open_net_5minute:
mov a,@0x01
iow ioc7
mov a,@0xfe
mov port7,a
clr r4
clr tm_minute
lp_5m:
not_1minute0:
clr r4
mov a,@59*2;59
sub a,tm_500ms
JBs r3,c
jmp not_1minute0
;-------------到了1分钟!--------
inc tm_minute
mov a,@0x05
sub a,tm_minute
jbs psw,c
jmp lp_5m
jmp net_off;lp_wait
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -