?? 主機.asm
字號:
;防盜器主機程序
FSDD EQU P1.7 ;發(fā)射控制D端,高電平控制有效
FSCC EQU P1.6 ;發(fā)射控制C端,高電平控制有效
FSBB EQU P1.5 ;發(fā)射控制B端,高電平控制有效
BJQ1 EQU P1.1 ;報警器,低電平報警
SPK1 EQU P1.0 ;喇叭,驅(qū)動方式為脈沖信號
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口狀態(tài)
P1MB EQU 11100011B;設(shè)P1.7、P1.6、P1.5、P1.1、P1.0口為推挽輸出
JSBM EQU 00111100B;設(shè)置接收端口狀態(tài),屏蔽P3.7、P3.6、P3.1、P3.0
KJBM EQU 00011000B;設(shè)定開機編碼為011(即接收頭B為0、C為1、D為1)
ZDBM EQU 00110000B;設(shè)定振動探測報警編碼為110
WBBM EQU 00101000B;設(shè)定微波探測報警編碼為101
DYBM EQU 00010000B;設(shè)定子機電源低壓報警編碼為010
LLBM EQU 00001000B;設(shè)定3分鐘聯(lián)絡(luò)子機一次編號為001
ORG 0000H ;程序執(zhí)行開始地址
LJMP KS1 ;跳至KS1
ORG 0003H ;外中斷0中斷程序入口
RETI ;中斷返回
ORG 000BH ;定時器T0中斷程序入口
LJMP INTT0 ;中斷返回
ORG 0013H ;外中斷1中斷入口
RETI ;中斷返回
ORG 001BH ;定時器T1中斷程序入口
RETI ;跳至INTT1中斷服務(wù)程序
ORG 0023H ;串口中斷入口地址
RETI
ORG 0100H
;開機初始化
KS1: MOV P1MO,#P1MA ;定義P1口狀態(tài)
MOV P1M1,#P1MB ;設(shè)P1口部分為推挽輸出
CLR SPK1 ;關(guān)喇叭
CLR BJQ1 ;關(guān)報警器
CLR FSDD ;發(fā)射電路不發(fā)射(D端為0)
CLR FSCC ;發(fā)射電路不發(fā)射(C端為0)
CLR FSBB ;發(fā)射電路不發(fā)射(B端為0)
MOV SP,#50H ;設(shè)推棧初值
MOV R0,#05H ;設(shè)低壓報警次數(shù)初值
MOV PSW,#00H ;設(shè)程序狀態(tài)字寄存器為00
MOV SCON,#00H ;設(shè)串行口控制寄存器為00
CLR LED1 ;指示燈提示通電
ACALL DIDI ;DI聲提示通電
SETB LED1 ;關(guān)指示燈
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 ;發(fā)光管點亮指示
SETB BJQ1 ;開報警聲提示
ACALL YS2 ;延時
CLR BJQ1 ;關(guān)報警聲
SETB LED1 ;發(fā)光管滅
JNB JSVT,$ ;等待發(fā)射信號停止發(fā)射
MOV TMOD,#00010001B;設(shè)定時器T1為計數(shù)器方式(方式1)
MOV TH0,#3CH ;設(shè)T1為100mS
MOV TL0,#0B0H
SETB EA ;開總中斷允許
SETB ET0 ;允許定時器T1中斷
SETB TR0 ;啟動計數(shù)器T1
MOV R1,#00H ;100ms時間計數(shù)器清零
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 ;關(guān)總中斷
SJMP KS3 ;重新開始
L1: CJNE A,#ZDBM,L2 ;檢測收到的信號是否是振動探測報警信號
CLR TR0 ;關(guān)計數(shù)器T1
CLR LED1 ;是報警信號則發(fā)光管亮
SETB BJQ1 ;開報警聲
;ACALL YS3 ;延時
;CLR BJQ1 ;關(guān)報警聲
;SETB LED1 ;發(fā)光管滅
SETB TR0 ;啟動計數(shù)器T1
SJMP L0 ;返回繼續(xù)檢測
L2: CJNE A,#WBBM,L3 ;檢測收到的信號是否是微波探測報警信號
CLR TR0 ;關(guān)計數(shù)器T1
SETB BJQ1 ;開報警聲
ACALL YS3 ;延時
CLR BJQ1 ;關(guān)報警聲
SETB TR0 ;啟動計數(shù)器T1
SJMP L0 ;返回繼續(xù)檢測
L3: CJNE A,#DYBM,L4 ;檢測收到的信號是否是子機低壓報警信號
CLR TR0 ;關(guān)計數(shù)器T1
CLR LED1 ;發(fā)光管亮
ACALL DIDI ;是則3聲DI報警
ACALL DIDI
ACALL DIDI
ACALL DIDI
ACALL DIDI
ACALL DIDI
DJNZ R3,L5
L6: ACALL DIDI
ACALL YS2
SJMP L6 ;返回繼續(xù)檢測
L5: SETB TR0 ;啟動計數(shù)器T1
SJMP L0 ;返回繼續(xù)檢測
L4: CJNE A,#LLBM,L0 ;檢測收到的信號是否是關(guān)機信號
CLR TR0 ;關(guān)計數(shù)器T1
ACALL DIDI ;是則3聲DI報警
ACALL DIDI
ACALL DIDI
ACALL DIDI
JNB JSVT,$ ;等待發(fā)射信號停止發(fā)射
CLR BJQ1 ;關(guān)報警聲
AJMP KS2 ;返回繼續(xù)檢測
;----------------------------------------------------------------
;5s時間子程序和電源電壓監(jiān)測中斷處理程序
INTT0:CLR TR0 ;關(guān)計數(shù)器T1
PUSH ACC ;進棧保護ACC數(shù)據(jù)
PUSH PSW ;進棧保護PSW數(shù)據(jù)
MOV TH0,#3CH ;設(shè)T1為100mS
MOV TL0,#0B0H
INC R1 ;時間計數(shù)器,100ms進位1次
CJNE R1,#50,LOP1 ;計時計數(shù)器,5s進位1次
MOV R1,#00H ;時間到清零
CLR LED1 ;指示燈閃亮一下指示防盜監(jiān)測狀態(tài)
ACALL YS2
SETB LED1
ACALL DYJC1 ;檢測電源電壓
LOP1: POP PSW ;PSW出棧
POP ACC ;ACC出棧
SETB TR0 ;開計數(shù)器T1
RETI ;中斷返回
;----------------------------------------------------------------
;以下電源電壓檢測程序
;----------------------------------------------------------------
DYJC1:JB DYJC,LOP3 ;檢測電源電壓
CLR LED1 ;發(fā)光管亮
ACALL DIDI ;是則2聲DI報警
ACALL DIDI
DJNZ R0,LOP3 ;報警超過5次,連續(xù)報警多次后關(guān)機并進入掉電模式
MOV A,#20 ;低壓則連續(xù)報警20次
LOP2: ACALL DIDI
ACALL YS2
DEC A
JNZ LOP2
SETB LED1 ;發(fā)光管滅
ORL PCON,#2 ;進入掉電模式,只有復(fù)位才能啟動
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 ;關(guān)喇叭
ACALL L222 ;
DJNZ 20H,L111 ;不為零轉(zhuǎn)
RET
L222: MOV R2,#08H ;
S00EB:PUSH 02H ;R2(復(fù)位后R2即為02H)存放時間常數(shù),進棧保護
L00ED:PUSH 02H ;R2進棧保護
L00EF:PUSH 02H ;進棧
L00F1:DJNZ R2,$ ;R2不為零等待
POP 02H ;出棧
DJNZ R2,L00EF ;R2不為零轉(zhuǎn)
POP 02H ;出棧
DJNZ R2,L00ED ;R2不為零轉(zhuǎn)
POP 02H ;出棧
DJNZ R2,S00EB ;R2不為零轉(zhuǎn)
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -