?? lsp(70917).asm
字號:
;劉思平2007年9月14號編訂
;*********************************************
;具體功能說明:
;本程序在基本功能上和其他四鍵防盜器相同。
;可以設置開鑰匙和關鑰匙語音,此兩段語音。
;六音報警:
;*********************************************
;單片機解碼模塊原代碼
/* TCC EQU 0x01
R2 equ 0x02
R3 EQU 0x03
port5 EQU 0x05
port6 EQU 0x06 ;狀態標志位
KEY_STATUS EQU 0X10 ;低半字節為按鍵標志,高半字節為控制標志
SIGNAL_LOW EQU 0X11 ;信號電平低計數器
SIGNAL_HIGH EQU 0X12 ;信號電平高計數器
DATA_RECORDER EQU 0X13 ;接收碼數據字節
CODE_RECORDER2 EQU 0X14 ;接收碼地址高字節
CODE_RECORDER1 EQU 0X15 ;接收碼地址低字節
CODE_TOTAL EQU 0X16 ;接收數據位計數器
KEY_COUNTER EQU 0X17 ;兩次按鍵檢測計數器
DELAYL equ 0x18 ;暫用延時寄存器標志
NUMBER equ 0x19 ;暫用振動數據寄存器標志
DELAY0 equ 0x20 ;暫用振動數據寄存器標志
SEN equ 0x21 ;暫用振動狀態寄存器標志
TIME1 equ 0x22 ;暫用聲音狀態寄存器標志
;******************KEY_STATUS標志位定義
;**************************************
AUTORUN_KEY EQU 0 ;遙控鍵標志
LOCK_KEY EQU 1 ;防盜鍵標志
SEARCH_KEY EQU 2 ;尋車鍵標志
OPEN_KEY EQU 3 ;解除鍵標志
PRESS_FLAG EQU 4 ;有鍵按下標志
CHECK_FLAG EQU 5 ;校驗標志
;*********************************************************
;*********************************************************
CODE_ADDRESS1 EQU 0B10001100;遙控器地址碼,更改常數即可實現其他遙控器收碼
CODE_ADDRESS2 EQU 0B00101100
AUTORUN_VALUE EQU 0B00000011;遙控器相應鍵值,改變相應數值即可更改其功能
LOCK_VALUE EQU 0B00001100
SEARCH_VALUE EQU 0B00110000
OPEN_VALUE EQU 0B11000000
;**********當PORT6.2口電平為高時調用該程序收碼
;************PORT6.1為信號輸入口
colleck_2262:
mov a,@0xf0
and KEY_STATUS,a
clr CODE_TOTAL
clr signal_high
collectL:
inc signal_high
mov a,SIGNAL_HIGH
SUB A,@30
JBS R3,0
RET
CLR signal_low
call delay20us
jbs port6,1
jmp colleck_low
jmp collectL
colleck_low:
mov a,signal_high ;信號高電平寬度<80US時濾除
sub a,@4
jbc r3,0
ret
mov a,@20 ;信號高電平寬度在80-400US時為采集為0
sub a,signal_high ;信號高電平寬度在400US以上時為采集為1
rrc data_recorder
rrc code_recorder2
rrc code_recorder1
inc CODE_TOTAL
clr signal_high
mov a,@24
xor a,CODE_TOTAL
jbc r3,2
jmp collect_end
input_low:
inc signal_low
mov a,signal_low ;信號低電平寬度大于800US時濾除
sub a,@40
jbs r3,0
ret
call delay20us
jbs port6,2 ;3
jmp input_low
jmp collectl
collect_end:
mov a,code_recorder1 ;校驗低字節地址
xor a,@code_address1
jbs r3,2
ret
mov a,code_recorder2 ;校驗高字節地址
xor a,@code_address2
jbs r3,2
ret
jbs key_status,check_flag ;是否是第一串收碼?
jmp storage_data
bc key_status,check_flag
mov a,com_data_rec
xor a,data_recorder
jbs r3,2
jmp storage_data
mov a,data_recorder
xor a,@autorun_value ;是啟動鍵?
jbs r3,2
jmp key1
bs KEY_STATUS,autorun_key ;置啟動鍵標志
bs KEY_STATUS,press_flag ;置有鍵按下標志
clr key_counter ;清除按鍵間隔計數器
ret
key1:
mov a,data_recorder
xor a,@open_value ;是解除鍵?
jbs r3,2
jmp key2
bs KEY_STATUS,open_key
bs KEY_STATUS,press_flag
clr key_counter
ret
key2:
mov a,data_recorder
and a,@0x0c ;同時有兩個鍵按下時不為0X30
xor a,@lock_value ;是防盜鍵?
jbs r3,2
jmp key3
bs KEY_STATUS,lock_key
bs KEY_STATUS,press_flag
clr key_counter
key3:
mov a,data_recorder
and a,@0x30
xor a,@search_value ;是尋車鍵?
jbs r3,2
ret
bs KEY_STATUS,open_key
bs KEY_STATUS,press_flag
clr key_counter
ret
storage_data: ;第一次收碼存儲數據字節
bs KEY_STATUS,press_flag
mov a,data_recorder
mov com_data_rec,a
ret
delay20us:
wdtc
mov a,@3 ;9
mov DELAYL,a
delay20us_1:
nop
djz DELAYL
JMP delay20us_1
ret
;*********************************
; 檢測振動模塊原代碼:
; 數據寄存器定義
NUMBER0 EQU 0X1D ;振動寬度計數器
GRADEDATA EQU 0X1E ;當前靈敏度
COM_DATA_REC EQU 0X1F ;上一次數據寄存器
;********************************************
;PSW位定義
TCINTBIT EQU 0 ;中斷計數標志位,約為750ms(TCC Rate=1:256)
VIBRABIT EQU 1 ;是否達到當前靈敏度寬度,即是否有振動
CHECK_Vibra:
CLR NUMBER
CLR TCC
CLR NUMBER0
BC R2,TCINTBIT
CELLECTION_L: ;采集數據子程序
MOV A,@89 ;730ms
SUB A,NUMBER
JBC R3,0
BS R2,TCINTBIT
JBC R2,TCINTBIT
JMP CELLECTION_CN4 ;是否超時
jbs port6,5
jmp cellection_l
CELLECTION:
JBS PORT6,5
JMP CELLECTION_END
MOV A,@53 ;DELAY 60us
call delay0
inc number0
jmp CELLECTION
CELLECTION_END:
MOV A,GRADEDATA ;比較振動靈敏度
SUB A,NUMBER0
JBS R3,0
JMP CLRNUMBER0
CLR NUMBER0
BS R2,VibraBIT ;置檢測到振動標志
RET
CELLECTION_CN4:
CLR NUMBER0
BC R2,TCINTBIT
BC R2,VibraBIT
RET
CLRNUMBER0:
CLR NUMBER0
JMP CELLECTION_L
;**********************************
*/
; 警報發聲模塊原代碼
;注:警報音頻率為1.8K到3.5K之間,具體請查資料
; OSCILLATION:R/C=晶振 CLOCK=2
; Frequency=4MHZ
;****************************
;****************************
Fre_COUNT EQU 0X37 ;聲音頻率變化計數器,從1.8~3.55KHZ
Fre_Repeat EQU 0X38 ;同一頻率的重復次數
SOUND_TEMP EQU 0X39
S_Loop EQU 67
S_MAX EQU 138
S_MIN EQU 71
S_Repeat EQU 4
;開始0.2秒發音************************
SOUND200ms:
SOUND_LH: ;1.8-3.55KHz
MOV A,@S_Loop ;66=134-68
MOV Fre_COUNT,A
SOUND_LH_LP:
MOV A,@S_Repeat
mov Fre_Repeat,A
MOV A,Fre_COUNT
ADD A,@S_MIN
REPEAT0_LP:
BS PORT6,0
CALL SOUNDDELAY0
BC PORT6,0
CALL SOUNDDELAY0
DJZ Fre_repeat
JMP repeat0_lp
DJZ Fre_COUNT
JMP SOUND_LH_LP
SOUND_HL: ;3.55-1.8KHz
MOV A,@S_Loop ;66=134-68
MOV Fre_COUNT,A
SOUND_HL_LP: ;3.55-1.8KHz
MOV A,@S_Repeat
MOV Fre_Repeat,A
MOV A, Fre_COUNT
SUB A,@S_MAX
REPEAT1_LP:
BS PORT6,0
CALL SOUNDDELAY0
BC PORT6,0
CALL SOUNDDELAY0
DJZ Fre_Repeat
JMP repeat1_lp
DJZ Fre_COUNT
JMP SOUND_HL_LP
SOUND_END:
RET
;*******************************************
Sound2s: ;2S內短鳴兩聲
WARNING1:
CALL Sound200ms
CALL Delay800ms
CALL Sound200ms
CALL Delay800ms
RET
Delay800ms :
CLR TIME1 ;get ready for 0.8 second delay.
Sound_delay:
MOV A,@196 ;delay0.8second
SUB A,TIME1
JBS R3,0
JMP Sound_delay
RET
;********************************************
Sound15s: ;連續報警15S
WARNING2:
MOV A,@73
MOV SOUND_TEMP,A
Soundls_lp:
CALL Sound200ms
JBC PORT6,4 ;SDT上電立即中斷報警
RET
DJZ SOUND_TEMP
JMP Soundls_lp
ret
;***************************
;***************************
SOUNDDELAY1 EQU 0X3A
sounddelay:
mov a,@18
mov sounddelay1,a ;=(A*9)+3
SOUNDDELAY0:
wdtc
sounddelayus_1:
nop
nop
nop
nop
nop
nop
djz sounddelay1
jmp sounddelayus_1
ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -