;防盗器主机程序
FSDD EQU P1.7 ;发射控制D端,高电平控制有效
FSCC EQU P1.6 ;发射控制C端,高电平控制有效
FSBB EQU P1.5 ;发射控制B端,高电平控制有效
BJQ1 EQU P1.1 ;报警器,低电平报警
SPK1 EQU P1.0 ;喇叭,驱动方式为脉冲信号
LED1 EQU P3.0 ;指示灯
JSVT EQU P3.2 ;接收头VT端
JSDD EQU P3.3 ;接收头D输出端,有效高电平输出
JSCC EQU P3.4 ;接收头C输出端,有效高电平输出
JSBB EQU P3.5 ;接收头B输出端,有效高电平输出
DYJC EQU P3.7 ;主机电源电压检测端,电源电压低于9V报警提示
P1MO EQU 91H
P1M1 EQU 92H
P1MA EQU 00000000B;定义P1口状态
P1MB EQU 11100011B;设P1.7、P1.6、P1.5、P1.1、P1.0口为推挽输出
JSBM EQU 00111100B;设置接收端口状态,屏蔽P3.7、P3.6、P3.1、P3.0
KJBM EQU 00011000B;设定开机编码为011(即接收头B为0、C为1、D为1)
ZDBM EQU 00110000B;设定振动探测报警编码为110
WBBM EQU 00101000B;设定微波探测报警编码为101
DYBM EQU 00010000B;设定子机电源低压报警编码为010
LLBM EQU 00001000B;设定3分钟联络子机一次编号为001
ORG 0000H ;程序执行开始地址
LJMP KS1 ;跳至KS1
ORG 0003H ;外中断0中断程序入口
RETI ;中断返回
ORG 000BH ;定时器T0中断程序入口
LJMP INTT0 ;中断返回
ORG 0013H ;外中断1中断入口
RETI ;中断返回
ORG 001BH ;定时器T1中断程序入口
RETI ;跳至INTT1中断服务程序
ORG 0023H ;串口中断入口地址
RETI
ORG 0100H
;开机初始化
KS1: MOV P1MO,#P1MA ;定义P1口状态
MOV P1M1,#P1MB ;设P1口部分为推挽输出
CLR SPK1 ;关喇叭
CLR BJQ1 ;关报警器
CLR FSDD ;发射电路不发射(D端为0)
CLR FSCC ;发射电路不发射(C端为0)
CLR FSBB ;发射电路不发射(B端为0)
MOV SP,#50H ;设推栈初值
MOV R0,#05H ;设低压报警次数初值
MOV PSW,#00H ;设程序状态字寄存器为00
MOV SCON,#00H ;设串行口控制寄存器为00
CLR LED1 ;指示灯提示通电
ACALL DIDI ;DI声提示通电
SETB LED1 ;关指示灯
ACALL DYJC1 ;电压检测
;----------------------------------------------------------------
KS2: JB JSVT,$ ;检测是否接收到信号
ACALL YS1
JB JSVT,KS2
MOV A,P3 ;收到子机的反馈信号则判断是否正确
ANL A,#JSBM ;屏蔽P3.7、P3.6、P3.1、P3.0
CJNE A,#KJBM,KS2 ;检查是否是开机信号
KS3: CLR LED1 ;发光管点亮指示
SETB BJQ1 ;开报警声提示
ACALL YS2 ;延时
CLR BJQ1 ;关报警声
SETB LED1 ;发光管灭
JNB JSVT,$ ;等待发射信号停止发射
MOV TMOD,#00010001B;设定时器T1为计数器方式(方式1)
MOV TH0,#3CH ;设T1为100mS
MOV TL0,#0B0H
SETB EA ;开总中断允许
SETB ET0 ;允许定时器T1中断
SETB TR0 ;启动计数器T1
MOV R1,#00H ;100ms时间计数器清零
MOV R3,#0AH
L0: JB JSVT,$ ;检测是否接收到信号
ACALL YS1
JB JSVT,L0
MOV A,P3 ;收到子机的反馈信号则判断是否正确
ANL A,#JSBM ;屏蔽P3.7、P3.6、P3.1、P3.0
CJNE A,#KJBM,L1 ;检查是否是开机信号
CLR EA ;关总中断
SJMP KS3 ;重新开始
L1: CJNE A,#ZDBM,L2 ;检测收到的信号是否是振动探测报警信号
CLR TR0 ;关计数器T1
CLR LED1 ;是报警信号则发光管亮
SETB BJQ1 ;开报警声
;ACALL YS3 ;延时
;CLR BJQ1 ;关报警声
;SETB LED1 ;发光管灭
SETB TR0 ;启动计数器T1
SJMP L0 ;返回继续检测
L2: CJNE A,#WBBM,L3 ;检测收到的信号是否是微波探测报警信号
CLR TR0 ;关计数器T1
SETB BJQ1 ;开报警声
ACALL YS3 ;延时
CLR BJQ1 ;关报警声
SETB TR0 ;启动计数器T1
SJMP L0 ;返回继续检测
L3: CJNE A,#DYBM,L4 ;检测收到的信号是否是子机低压报警信号
CLR TR0 ;关计数器T1
CLR LED1 ;发光管亮
ACALL DIDI ;是则3声DI报警
ACALL DIDI
ACALL DIDI
ACALL DIDI
ACALL DIDI
ACALL DIDI
DJNZ R3,L5
L6: ACALL DIDI
ACALL YS2
SJMP L6 ;返回继续检测
L5: SETB TR0 ;启动计数器T1
SJMP L0 ;返回继续检测
L4: CJNE A,#LLBM,L0 ;检测收到的信号是否是关机信号
CLR TR0 ;关计数器T1
ACALL DIDI ;是则3声DI报警
ACALL DIDI
ACALL DIDI
ACALL DIDI
JNB JSVT,$ ;等待发射信号停止发射
CLR BJQ1 ;关报警声
AJMP KS2 ;返回继续检测
[page]
;----------------------------------------------------------------
;5s时间子程序和电源电压监测中断处理程序
INTT0:CLR TR0 ;关计数器T1
PUSH ACC ;进栈保护ACC数据
PUSH PSW ;进栈保护PSW数据
MOV TH0,#3CH ;设T1为100mS
MOV TL0,#0B0H
INC R1 ;时间计数器,100ms进位1次
CJNE R1,#50,LOP1 ;计时计数器,5s进位1次
MOV R1,#00H ;时间到清零
CLR LED1 ;指示灯闪亮一下指示防盗监测状态
ACALL YS2
SETB LED1
ACALL DYJC1 ;检测电源电压
LOP1: POP PSW ;PSW出栈
POP ACC ;ACC出栈
SETB TR0 ;开计数器T1
RETI ;中断返回
;----------------------------------------------------------------
;以下电源电压检测程序
;----------------------------------------------------------------
DYJC1:JB DYJC,LOP3 ;检测电源电压
CLR LED1 ;发光管亮
ACALL DIDI ;是则2声DI报警
ACALL DIDI
DJNZ R0,LOP3 ;报警超过5次,连续报警多次后关机并进入掉电模式
MOV A,#20 ;低压则连续报警20次
LOP2: ACALL DIDI
ACALL YS2
DEC A
JNZ LOP2
SETB LED1 ;发光管灭
ORL PCON,#2 ;进入掉电模式,只有复位才能启动
NOP
NOP
NOP
AJMP KS1 ;软件陷阱
LOP3: RET
NOP
NOP
NOP
AJMP KS1 ;软件陷阱
;----------------------------------------------------------------
;以下为报警子程序
;----------------------------------------------------------------
;DI声报警子程序
DIDI: MOV 20H,#0F0H ;DI声提示音
L111: SETB SPK1 ;开喇叭
ACALL L222 ;延时时间比INT1长
CLR SPK1 ;关喇叭
ACALL L222 ;
DJNZ 20H,L111 ;不为零转
RET
L222: MOV R2,#08H ;
S00EB:PUSH 02H ;R2(复位后R2即为02H)存放时间常数,进栈保护
L00ED:PUSH 02H ;R2进栈保护
L00EF:PUSH 02H ;进栈
L00F1:DJNZ R2,$ ;R2不为零等待
POP 02H ;出栈
DJNZ R2,L00EF ;R2不为零转
POP 02H ;出栈
DJNZ R2,L00ED ;R2不为零转
POP 02H ;出栈
DJNZ R2,S00EB ;R2不为零转
RET ;子程序返回
;----------------------------------------------------------------
;以下为延时子程序
;----------------------------------------------------------------
;延时子程序
YS1: MOV R6,#0FFH
Y11: MOV R7,#0FFH
Y12: NOP
NOP
NOP
DJNZ R7,Y12
DJNZ R6,Y11
RET
;----------------------------------------------------------------
YS2: MOV R5,#08H ;中长时间延时
Y20: MOV R6,#0FFH
Y21: MOV R7,#0FFH
Y22: NOP
NOP
NOP
DJNZ R7,Y22
DJNZ R6,Y21
DJNZ R5,Y20
RET
;----------------------------------------------------------------
YS3: MOV R5,#50 ;长长时间延时
Y30: MOV R6,#0FFH
Y31: MOV R7,#0FFH
Y32: NOP
NOP
NOP
DJNZ R7,Y32
DJNZ R6,Y31
DJNZ R5,Y30
RET
ORG 0300H
NOP
NOP
NOP
LJMP KS1 ;软件陷阱
END