;防盗器主机程序
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
;返回继续检测
评论