?? 副機.asm
字號:
ZDFS: CLR LED1 ;指示燈亮
SETB FSBB ;B端為1
SETB FSCC ;C端為1
CLR FSDD ;D端為0
CLR FSKZ ;允許發射
ACALL TZFS ;調用停止發射程序
RET ;返回
;----------------------------------------------------------------
;以下為微波輸出(有盜情)的發射程序
;----------------------------------------------------------------
;微波輸出(有盜情)發射編碼101給主機進行報警
WBFS: CLR LED1 ;指示燈亮
SETB FSBB ;B端為1
CLR FSCC ;C端為0
SETB FSDD ;D端為1
CLR FSKZ ;允許發射
ACALL TZFS ;調用停止發射程序
RET ;返回
;----------------------------------------------------------------
;以下為聯絡主機的發射程序
;----------------------------------------------------------------
;聯絡主機發射編碼001給主機
GJFS: CLR LED1 ;指示燈亮
CLR FSBB ;B端為0
CLR FSCC ;C端為0
SETB FSDD ;D端為1
CLR FSKZ ;允許發射
ACALL TZFS ;調用停止發射程序
RET ;返回
;----------------------------------------------------------------
;以下為電源低壓的發射程序
;----------------------------------------------------------------
;子機電源低壓發射編碼010給主機進行報警
DYFS: CLR LED1 ;指示燈亮
CLR FSBB ;B端為0
SETB FSCC ;C端為1
CLR FSDD ;D端為0
CLR FSKZ ;允許發射
ACALL TZFS ;調用停止發射程序
RET ;返回
;----------------------------------------------------------------
;以下為停止發射程序
;----------------------------------------------------------------
TZFS: ACALL YS2 ;延時
ACALL YS2 ;延時
SETB FSKZ ;停止發射
CLR FSBB ;B端為0
CLR FSCC ;C端為0
CLR FSDD ;D端為0
SETB LED1 ;指示燈滅
RET ;返回
;----------------------------------------------------------------
;以下為初始化程序
;----------------------------------------------------------------
CLEAR1:MOV P1MO,#P1MA ;P1端口狀態
MOV P1M1,#P1MB
MOV SP,#50H ;設推棧初值
SETB FSDY ;關閉發射編碼IC電源
SETB FSKZ
CLR FSDD ;發射電路不發射(D端為0)
CLR FSCC ;發射電路不發射(C端為0)
CLR FSBB ;發射電路不發射(B端為0)
CLR CGDY ;關傳感器電源
CLR SPK1 ;關報警喇叭
RET
;----------------------------------------------------------------
;以下為進入防盜后AD轉換后初始化程序
;----------------------------------------------------------------
CLEAR2:MOV P1MO,#P1MA ;P1端口狀態
MOV P1M1,#P1MB
;MOV SP,#50H ;設推棧初值
SETB FSDY ;關閉發射編碼IC電源
SETB FSKZ
CLR FSDD ;發射電路不發射(D端為0)
CLR FSCC ;發射電路不發射(C端為0)
CLR FSBB ;發射電路不發射(B端為0)
SETB CGDY ;開傳感器電源
CLR SPK1 ;關報警喇叭
RET
;----------------------------------------------------------------
;以下為外中斷(接收頭收到信號)處理程序
;----------------------------------------------------------------
INT00:CLR EX0 ;關外中斷
MOV A,P3 ;收到子機的反饋信號則判斷是否正確
ANL A,#JSBM ;屏蔽P3.7、P3.6、P3.1、P3.0
MOV 34H,A
JNB JSVT,$ ;等待主機停止發射
;SETB EA ;開總中斷允許
RETI
;----------------------------------------------------------------
;以下為處理程序
;----------------------------------------------------------------
;中斷處理程序
INTT0:CLR EA ;關總中斷
PUSH ACC ;進棧保護ACC數據
PUSH PSW ;進棧保護PSW數據
MOV TH0,#3CH ;設T1為100mS
MOV TL0,#0B0H
INC 30H ;ms時間計數器
MOV A,30H
CJNE A,#100,LOP2 ;計時計數器,10s進位1次
MOV 30H,#00H ;ms時間計數器清零,重新開始計時
MOV R0,#01H ;10s到標志
LOP2: POP PSW ;PSW出棧
POP ACC ;ACC出棧
SETB EA ;開總中斷
RETI ;中斷返回
;----------------------------------------------------------------
;以下為AD轉換程序,監測電源電源
;----------------------------------------------------------------
;AD轉換
ADAD:ACALL ADC_Power_On ;開ADC電源,第一次使用時要打開內部模擬電源
;開ADC電源,可適當加延時,1mS以內就足夠了
ACALL Set_ADC_Channel_0 ;設置P1.0作為A/D轉換通道
ACALL Get_AD_Result ;測量電壓并且取A/D轉換結果
MOV A, ADC_Chl0 ;A/D轉換結果
RET
;┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
ADC_Power_On:
PUSH ACC
ORL ADC_CONTR,#80H ;開A/D轉換電源
MOV A, #20H
ACALL Delay ;開A/D轉換電源后要加延時,ImS以內就足夠了
POP ACC
RET
;┈┈┈┈┈┈┈┈┈┈┈
Set_ADC_Channel_0:
MOV ADC_CONTR,#ADC_Powerl0
;選擇P1.0作為A/D轉換通道
MOV A,#05H ;更換A/D轉換通道后要適當延時,使輸入電壓穩定
;以后如果不更換A/D轉換通道的話,不需要加延時
ACALL Delay ;切換A/D轉換通道,加延時20uS~200uS就可以了,
;也輸入電壓源的內阻有關
;如果輸入電壓信號源的內阻在10K以下,可不加延時
RET
;┈┈┈┈┈┈┈┈┈┈┈
Get_AD_Result:
PUSH ACC ;入棧保護
MOV ADC_DATA,#0
ORL ADC_CONTR,#00001000B ;啟動 AD 轉換
Wait_AD_Finishe:
MOV A,#00010000B ;判斷 AD 轉換是否完成
ANL A,ADC_CONTR
JZ Wait_AD_Finishe ;AD 轉換尚未完成,繼續等待
ANL ADC_CONTR,#11100111B ;清0 ADC_FLAG,ADC_START位,停止A/D轉換
MOV A,ADC_DATA
MOV ADC_Chl0,A ;保存 AD 轉換結果
POP ACC
RET
;┈┈┈┈┈┈┈┈┈┈┈
Delay:
PUSH 02 ;將寄存器組0的R2入棧
PUSH 03 ;將寄存器組0的R3入棧
PUSH 04 ;將寄存器組0的R4入棧
MOV R4,A
Delay_Loop0:
MOV R3,#200 ;2 CL0CK┈┈┈┈┈┈┈┈+
Delay_Loop1: ; │
MOV R2,#249 ;2 CL0CK┈+ │
Delay_Loop: ; │1002 CLOCK│200406 CLOCK
DJNZ R2, Delay_LooP ;4 CL0CK │ │
DJNZ R3, Delay_LooP1 ;4 CL0CK ┈+ │
DJNZ R4, Delay_LooP0 ;4 CL0CK┈┈┈┈┈┈┈┈+
POP 04
POP 03
POP 02
RET
;----------------------------------------------------------------
;----------------------------------------------------------------
;以下為延時子程序
;----------------------------------------------------------------
;延時子程序
YS1: MOV R6,#100
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,#05H ;長長時間延時
Y30: MOV R6,#0FFH
Y31: MOV R7,#0FFH
Y32: NOP
NOP
NOP
DJNZ R7,Y32
DJNZ R6,Y31
DJNZ R5,Y30
RET
ORG 0400H
NOP ;設置軟件陷阱
NOP
NOP
LJMP KS
END
;*****************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -