decode.txt
来自「摩托车报警器,包括原理图及其主要模块的源程序」· 文本 代码 · 共 311 行
TXT
311 行
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 ;两次按键检测计数器
;/**********************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 ;校验标志
;/***********************CONSTANT DEFINE*************************************/
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.2为信号输入口
;Rosc = 1.5Mohm
;0码
; 165uS 490uS 165uS 490uS
; ____ _____
;_| |_________| |_________|
;1码
; 490uS 165uS
; _________ __________
;_| |____| |____|
;悬空
; 165uS 490uS
; ____ __________
;_| |_________| |____|
collect_2262:
mov a,@0xf0
And KEY_STATUS,a
clr code_total
clr signal_high
collect1:
inc signal_high
MOV A,SIGNAL_HIGH
SUB A,@30
JBS R3,0
RET
clr signal_low
call delay20us
jbs port6,2
jmp collect_low
jmp collect1
collect_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 collect1
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,search_key
bs KEY_STATUS,press_flag
clr key_counter
ret
storage_data: ;第一次收码存储数据字节
bs KEY_STATUS,check_flag
mov a,data_recorder
mov com_data_rec,a
ret
delay20us:
wdtc
mov a,@3;9
mov delay1,a
delay20us_1:
nop
djz delay1
jmp delay20us_1
ret
;*********************************************************
;
; 检测震动模块
;数据寄存器定义
NUMBER0 EQU 0X1D ;振动宽度计数器
GRADEDATA EQU EQU0X1E ;当前灵敏度
COM_DATA_REC EQU 0X1F ;上一次数据寄存器
;PSW位定义
TCINTBIT EQU 0 ;中断计数标志位,约为750ms(TCC Rate=1:256)
VibraBIT EQU 1 ;是否达到当前灵敏度宽度,即是否有振动
CHECK_Vibra:
CELLECTION_VIB:
CLR NUMBER ;检测振动前先把计数器清0
CLR TCC
CLR NUMBER0
BC PSW,TCINTBIT
CELLECTION_L: ;采集数据子程序
MOV A,@89 ;730ms
SUB A,NUMBER
JBC R3,0
BS PSW,TCINTBIT
JBC PSW,TCINTBIT
JMP CELLECTION_CN4 ;是否超时
JBS PORT5,SEN
JMP CELLECTION_L
CELLECTION:
JBS PORT5,SEN
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 PSW,VibraBIT ;置检测到振动标志
ret
CELLECTION_CN4:
CLR NUMBER0
BC PSW,TCINTBIT
BC PSW,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
;'Replace program variable value and debug is more than easy.
S_Loop EQU 67 ;'MAX-MIN
S_MAX EQU 138
S_MIN EQU 71
S_Repeat EQU 4
;开始0.2秒发音
SOUND200ms:
SOUND_LH: ;1.8~3.55
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,BUZ
CALL SOUNDDELAY0
BC PORT6,BUZ
CALL SOUNDDELAY0
DJZ Fre_Repeat
JMP repeat0_lp
DJZ Fre_COUNT
JMP SOUND_LH_LP
SOUND_HL: ;3.55~1.8
MOV A,@S_Loop ;66=134-68
MOV Fre_COUNT,A
SOUND_HL_LP:
MOV A,@S_Repeat ;
MOV Fre_Repeat,A
MOV A,Fre_COUNT
SUB A,@S_MAX ;
repeat1_lp BS PORT6,BUZ
CALL SOUNDDELAY0
BC PORT6,BUZ
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 ;'delay 0.8 second
SUB A,TIME1
JBS R3,0
JMP Sound_delay
RET
;************************************************
Sound15s: ;连续报警15S
WARNING2:
MOV A,@73
MOV SOUND_TEMP,A
Sound1s_lp CALL Sound200ms
JBC PORT6,SDT ;'SDT上电立即中断报警
RET
DJZ SOUND_TEMP
JMP Sound1s_lp
RET
;============================
SOUNDDELAY1 EQU 0X3A
sounddelay:
mov a,@18 ;
sounddelay0:
mov sounddelay1,a ;=(A*9)+3
wdtc
sounddelayus_1:
nop
nop
nop
nop
nop
nop
djz sounddelay1
jmp sounddelayus_1
ret
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?