📄 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 + -