;防盜器子機程序
FSDY EQU P1.7 ;發(fā)射電源端,高電平為輸出
FSKZ EQUP1.6 ;發(fā)射控制端,低電平有效
FSDD EQU P1.5 ;發(fā)射控制D端,高電平控制有效
FSCC EQU P1.4 ;發(fā)射控制C端,高電平控制有效
FSBB EQU P1.3 ;發(fā)射控制B端,高電平控制有效
CGDY EQU P1.2 ;傳感器電源端,高電平為輸出
SPK1 EQU P1.1 ;報警喇叭,高電平為輸出,暫時不用
DYAD EQU P1.0 ;電源AD輸入端
CGQ1 EQU P3.0 ;振動傳感器
CGQ2 EQU P3.1 ;微波傳感器
JSVT EQU P3.2 ;接收頭VT端
JSDD EQU P3.3 ;接收頭D輸出端,有效高電平輸出
JSCC EQU P3.4 ;接收頭C輸出端,有效高電平輸出
JSBB EQU P3.5 ;接收頭B輸出端,有效高電平輸出
LED1 EQU P3.7 ;指示燈
P1MO EQU 91H
P1M1 EQU 92H
P1MA EQU 00000001B
P1MB EQU 10111110B
JSBM EQU 00111100B;設(shè)置接收端口狀態(tài),屏蔽P3.7、P3.6、P3.1、P3.0
KJBM EQU 00100000B;設(shè)定開機編碼為011(即接收頭B為0、C為1、D為1)
ZDBM EQU 00110000B;設(shè)定振動探測報警編碼為110
WBBM EQU 00101000B;設(shè)定微波探測報警編碼為101
DYBM EQU 00010000B;設(shè)定子機電源低壓報警編碼為010,也是接收尋車
GJBM EQU 00001000B;設(shè)定2分鐘聯(lián)絡(luò)子機一次編號為001,也是接收啟動
DYBJ EQU 80H ;設(shè)定電源低電壓(9V以下)報警值
;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
;A/D轉(zhuǎn)換程序。
ADC_CONTR EQU 0C5H ;A/D轉(zhuǎn)換寄存器
ADC_DATA EQU 0C6H ;A/D轉(zhuǎn)換結(jié)果寄存器,
;為10位A/D轉(zhuǎn)換結(jié)果的高8位
;ADC_LOW2 EQU 0BEH ;A/D轉(zhuǎn)換結(jié)果寄存器,低2位有效,
;為10位A/D轉(zhuǎn)換結(jié)果的低2位
;如果不用ADC_L0W2的低2位,
;只用ADC_DATA的8位,則為8位A/D轉(zhuǎn)換
ADC_Powerl0 EQU 11100000B;P1.0作為A/D輸入
;定義變量
ADC_Chl0 EQU 32H ;0通道A/D轉(zhuǎn)換結(jié)果
;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
ORG 0000H ;程序執(zhí)行開始地址
LJMP KS ;跳至KS
ORG 0003H ;外中斷0中斷程序入口
LJMP INT00 ;中斷返回
ORG 000BH ;定時器T0中斷程序入口
LJMP INTT0 ;跳至INTT0中斷服務(wù)程序
ORG 0013H ;外中斷1中斷入口
RETI ;中斷返回
ORG 001BH ;定時器T1中斷程序入口
RETI ;中斷返回
ORG 0023H ;串口中斷入口地址
RETI
ORG 100H
;開機初始化
KS: ACALL CLEAR1 ;設(shè)定初值
MOV PSW,#00H ;設(shè)程序狀態(tài)字寄存器為00
MOV SCON,#00H ;設(shè)串行口控制寄存器為00
CLR LED1 ;指示燈提示通電
ACALL YS2 ;延時
SETB LED1 ;關(guān)指示燈
;----------------------------------------------------------------
;開機檢測
ACALL ADAD
SUBB A,#DYBJ ;與預定值比較
ACALL CLEAR1 ;重新設(shè)定初值
JNC KS2 ;電壓低報警,正常才能開防盜器
MOV A,#20 ;低壓則連續(xù)報警20次
KS1: ACALL DYFS ;電壓低發(fā)射010報警信號
CLR LED1 ;紅燈亮
ACALL YS2 ;延時
SETB LED1 ;紅燈滅
ACALL YS2 ;延時
DEC A
JNZ KS1
CLR LED1 ;紅燈閃20次后常亮
ORL PCON,#2 ;進入掉電模式,只有復位才能啟動
NOP
NOP
NOP
AJMP KS ;軟件陷阱
;--------------------------------------------------
;電源電壓檢測(AD轉(zhuǎn)換)后進入待機狀態(tài)
;--------------------------------------------------
KS2: CLR IT0 ;外部中斷低電平觸發(fā)
SETB EA ;開總中斷允許
SETB EX0 ;開外部中斷0
KS3: ORL PCON,#01H ;進入待機,只有外中斷或復位才能啟動
NOP ;退出中斷后設(shè)置軟件陷阱
NOP
NOP
CJNE A,#KJBM,KS2 ;必須是開機信號,信號不對返回繼續(xù)進入待機
;--------------------------------------------------
;開始進入防盜狀態(tài)
;--------------------------------------------------
KS0: SETB CGDY ;打開振動和微波探測頭電源
CLR A ;A清零
CLR LED1 ;進入報警監(jiān)測狀態(tài),指示燈亮
SETB SPK1 ;報警器響一下,進入防盜狀態(tài)
ACALL YS3 ;延時
CLR SPK1 ;關(guān)報警器
ACALL KJFS ;發(fā)射011回應(yīng)主機,表示收到并進入防盜狀態(tài)
SETB LED1 ;指示燈滅
ACALL YS2
;--------------------------------------------------
;
;--------------------------------------------------
MOV TMOD,#00010001B;設(shè)定時器T1為計數(shù)器方式(方式1)
MOV TH0,#3CH ;設(shè)T1為100mS
MOV TL0,#0B0H
SETB ET0 ;允許定時器T1中斷
SETB TR0 ;啟動計數(shù)器T1
MOV 30H,#00H ;100ms時間計數(shù)器清零
MOV R0,#00H ;10s時間到標志位清零
MOV 34H,#00H
MOV 33H,#0FH
MOV 35H,#00H
MOV R1,#0FH
;--------------------------------------------------
;正式進入防盜狀態(tài)
;--------------------------------------------------
KS4: JNB CGQ1,KS5 ;檢測振動傳感器是否輸出(有盜情)
ACALL YS1
JNB CGQ1,KS5
CLR TR0 ;關(guān)定時中斷
INC 35H
MOV A,35H
CJNE A,#10,S2
DEC 35H
SETB SPK1 ;報警器響一下
ACALL YS2 ;延時
CLR SPK1 ;關(guān)報警器
SJMP KS5
S2: ACALL ZDFS ;檢測到振動傳感器有輸出,發(fā)射110報警信號
ACALL YS2 ;延時
SETB TR0 ;開定時中斷允許
KS5: JB CGQ2,KS6 ;檢測微波傳感器是否輸出(有盜情)
;ACALL YS1
;JB CGQ2,KS6
CLR TR0 ;關(guān)定時中斷
DJNZ R1,S1
INC R1
SETB SPK1 ;報警器響一下,進入防盜狀態(tài)
ACALL YS2 ;延時
CLR SPK1 ;關(guān)報警器
SJMP KS6
S1: ACALL WBFS ;檢測到微波傳感器有輸出,發(fā)射101報警信號
ACALL YS2 ;延時
SETB TR0 ;開定時中斷允許
KS6: CJNE R0,#01H,KS7 ;10S檢測一次電源電壓
CLR TR0 ;關(guān)定時中斷
ACALL ADAD ;調(diào)用電源電壓檢測程序
ACALL CLEAR2 ;重新設(shè)定初值
SUBB A,#DYBJ ;與預定值比較
CLR A ;A清零
MOV R0,#00H ;10s時間到標志位清零
SETB TR0 ;開定時中斷允許
JNC KS7 ;電壓低報警
CLR TR0 ;關(guān)定時中斷
ACALL DYFS ;電壓低發(fā)射010報警信號
SETB TR0 ;開定時中斷允許
DJNZ 33H,KS7
CLR LED1
CLR TR0 ;關(guān)定時中斷
AJMP KS2
KS7: MOV A,P3 ;收到子機的反饋信號則判斷是否正確
ANL A,#JSBM ;屏蔽P3.7、P3.6、P3.1、P3.0
CJNE A,#GJBM,KS8 ;檢測是否收到主機的關(guān)機信號
CLR ET0 ;無信號則關(guān)定時器T1中斷
CLR CGDY ;關(guān)傳感器電源
CLR LED1 ;進入報警監(jiān)測狀態(tài),指示燈亮
SETB SPK1 ;報警器響一下,進入防盜狀態(tài)
ACALL YS2 ;延時
CLR SPK1 ;關(guān)報警器
ACALL YS3 ;延時
SETB SPK1 ;報警器響一下,進入防盜狀態(tài)
ACALL YS3 ;延時
CLR SPK1 ;關(guān)報警器
ACALL GJFS ;調(diào)用關(guān)機發(fā)射程序
SETB LED1 ;進入報警監(jiān)測狀態(tài),指示燈亮
JNB JSVT,$ ;等待主機停止發(fā)射
AJMP KS2 ;返回進入待機狀態(tài)
KS8: CJNE A,#KJBM,S3
JNB JSVT,$ ;等待主機停止發(fā)射
AJMP KS0 ;返回進入待機狀態(tài)
S3: CJNE A,#DYBM,S4
SETB SPK1 ;報警器響一下,進入防盜狀態(tài)
ACALL YS3 ;延時
CLR SPK1 ;關(guān)報警器
MOV R1,#01H
S4: AJMP KS4
;****************************************************************
;----------------------------------------------------------------
;以下為子程序
;----------------------------------------------------------------
;----------------------------------------------------------------
;以下為開機發(fā)射程序
;----------------------------------------------------------------
;主機開機子機發(fā)射編碼011給主機以聯(lián)通
KJFS: CLR LED1 ;指示燈亮
CLR FSBB ;B端為0
SETB FSCC ;C端為1
SETB FSDD ;D端為1
CLR FSKZ ;允許發(fā)射
ACALL TZFS ;調(diào)用停止發(fā)射程序
RET ;返回
;----------------------------------------------------------------
;以下為振動輸出(有盜情)的發(fā)射程序
;----------------------------------------------------------------
;振動輸出(有盜情)發(fā)射編碼110給主機進行報警
ZDFS: CLR LED1 ;指示燈亮
SETB FSBB ;B端為1
SETB FSCC ;C端為1
CLR FSDD ;D端為0
CLR FSKZ ;允許發(fā)射
ACALL TZFS ;調(diào)用停止發(fā)射程序
RET ;返回
技術(shù)專區(qū)
評論