📄 xl032_szgs01.dt
字号:
;******************************************;
; 项目名称:电动车防盗报警器主机 V1
; 完成日期:2007年12月20日
; 芯片型号:EMC78P153S
; 振荡类型:IRC
; 频率:4MHz/2
; WDT:开
; 中断类型:计数器(TCC)使用
; Checksum: D05F,CodeOption=1367,0003
; 滚码地址:0x07,0x4a,start=0,stop=ffffh,step=1
;******************************************;
;P50 振动信号(I) ;报警声音(O)
;P51 ;闪光灯信号输入(I) ;锁线信号输出(O)
;P52 锁线信号输出(O) ;启动信号输出(O)
;P53 启动信号输出(O) ;启动控制端口(O)
;-------;
;P60 报警声音(O) ;ACC信号(I)
;P61 闪光灯信号输出(O) ;无线信号(I)
;P62 启动控制端口(O) ;振动信号(I)
;P63 5V ;5V
;P64 状态检测口 ;闪光灯信号输出(O)
;P65 发码输出(O)声音控制输出(O) ;闪光灯信号输入(I)
;P66 ;ACC信号(I) ;电喇叭控输入(I)
;P67 ;无线信号(I) ;发码输出(O)声音控制输出(O)
;========EM78常量定义======================;
Contw_Data equ @0b00000011 ; 1:16
R5_Data equ @0b00000001
IOC5_Data equ @0b00000011
R6_Data equ @0b11001000
IOC6_Data equ @0b11011000
IOCB_Data equ @0b11011101
IOCD_Data equ @0b11111101
Key_Status_Buffer equ @0b01000000
;-------;
Data_Division equ @12;17
;-------;
Lamp_Data equ @0b00000010
Quiver_Port equ r5
Quiver equ 0 ;振动
Lock_Port equ r5
Lock equ 2
Start_Port equ r5
Start equ 3
;-------;
Warm_Port equ r6
Warm equ 0
Start_Control_Port equ r6
Start_Control equ 2
Check_Port equ r6
Check equ 4
Code_Port equ r6
Code equ 5
Sound_Control_Port equ r6
Sound_Control equ 5
ACC_Port equ r6
ACC equ 6
RF_Port equ r6
RF equ 7
Lamp_Port equ r6
Lamp equ 1
;Lamp_Check_Port equ r6
;Lamp_Check equ 5
;Beep_Key_Port equ r6
;Beep_Key equ 6
;========EM78专用寄存器地址定义============;
include "em78p153.h" ;专用寄存器头文件见头文件包
;========EM78一般寄存器定义================;
Tcc_Buffer equ 0x10 ;1Byte Tcc缓存
System_Clock equ 0x11 ;3Byte 系统时钟
RF_High_Counter equ 0x14 ;1byte 高电平计数
RF_Low_Counter equ 0x15 ;1byte 低电平计数
Samples equ 0x16 ;1byte 采样缓存
Bit_Counter equ 0x17 ;1byte 位计数
RF_Byte_Buffer equ 0x18 ;3Byte 接收数据缓存
Send_Buffer equ 0x18 ;1Byte
Quiver_Edit_Event equ 0x1B ;1byte 振动级数
Quiver_Counter equ 0x1C ;2Byte 振动计数器
Acc_Time_Counter equ 0x1E ;1Byte 电门次数
Sound_Event_Counter equ 0x1F ;1Byte 声音事件
Sound_Time_Counter equ 0x20 ;5Byte 声音计时变量
I2C_Buffer equ 0x20 ;2Byte I2C缓存
User_Id equ 0x25 ;2byte 用户ID
Hold_Key_Time equ 0x27 ;1Byte 持续键时间
Key_Value equ 0x28 ;1Byte 按键值
Delay_Counter equ 0x29 ;2Byte
Same_Key_Value equ 0x2B ;1Byte
;========EM78一般控制位定义================;
System_Status equ 0x2C ;系统状态标置
; Lamp_Enable equ 0 ; ;
; Lamp_Off equ 1 ;
Not_Sound equ 0
Acc_Warm equ 1
Start_Flag equ 2
; Not_Lock equ 3 ;
Silence_Key equ 3
Find_key equ 4
; Start_Control_Flag equ 4
Edit_Flag equ 5
Sound_Status_Flag equ 6 ;声音状态标置
Warm_Initialize equ 7 ;呜叫初始化标置
System_RF_Status equ 0x2D ;RF状态标置
RF_Key_Hold equ 0 ;RF按键保持标志
Save_Data equ 1 ;保存数据
RF_Data equ 2 ;无线数据
Study_Id equ 3 ;学习ID使能标志
Warm_Enable equ 4 ;报警使能
Quiver_Enable equ 5 ;振动使能
Warm_Again equ 6 ;再次振动
; Warm_No_Sound_Flag equ 7 ;无声
No_Sound equ 7
;==========================================;
org 0x3FF ;上电复位程序入口
jmp System_Initialize
org 0 ;上电复位程序入口
jmp System_Initialize
Warm_Wait_Time_Table:
add pc,a
retl @2 ;0
retl @32 ;1
retl @100 ;2
retl @180 ;3
retl @250 ;4
Userid_Table1:
retl @0x00
;==========================================;
org 8 ;中断服务程序入口
Tcc_Interrupt_Serve:
;{
Save_Environment
clr iocf
mov a,Sound_Event_Counter
add pc,a
jmp Non_Sound_Event ;0
jmp Bi_Sound_Event ;1
jmp Bi_Bi_Sound_Event ;2
jmp Bi_Bi_Bi_Sound_Event ;3
jmp Bi_Bi_Bi_Bi_Sound_Event ;4
jmp Wu_Wu_Sound_Event ;5
jmp Du__Sound_Event ;6
jmp Di_Du_Sound_Event ;7
jmp Du___Sound_Event ;8
jmp Di_Di_Di_Sound_Event ;9
jmp Diu_Diu_Diu_Sound_Event ;10
jmp Non_Sound_Event;jmp Bi___Sound_Event ;11
jmp Non_Sound_Event;jmp Di___Sound_Event ;12
jmp Wu_Wu_Sound_Event ;jmp Wu_Wu_Wu_Sound_Event ;13
jmp Bi_Bi_Bi_Bi_BiSound_Event ;14
;**************查表程序********************;
Get_Data:
add pc,a
retl @0x0
retl @0x2 ;2260 编码用0 2262编码用1
retl @0x3
RF_Sample_Table:
and a,@0b00000111
add pc,a
bc System_RF_Status,RF_Data;000
ret;001
ret;010
ret;011
ret;100
ret;101
ret;110
bs System_RF_Status,RF_Data;111
ret
Di_Di_Di_Sound_Table:
and a,@0b00000011
add pc,a
retl @256-166 ;1344uS=(160+2)*8uS
retl @256-175 ;1416uS=(175+2)*8uS
clr Sound_Time_Counter+2
inc Sound_Time_Counter+1 ;声音变化速度
retl @256-185 ;1496uS=(185+2)*8uS
Di_Di_Di_Sound_Table2:
and a,@0b00000111
add pc,a
retl @256-16 ;160uS=(18+2)*8uS
retl @256-18 ;186uS=(20+2)*8uS
retl @256-20 ;192uS=(22+2)*8uS
retl @256-22 ;208uS=(24+2)*8uS
retl @256-18 ;186uS=(20+2)*8uS
retl @256-24 ;208uS=(24+2)*8uS
retl @256-22 ;192uS=(22+2)*8uS
clr Sound_Time_Counter+2
inc Sound_Time_Counter+1 ;声音变化速度
retl @256-26-18 ;1496uS=(185+2)*8uS
Bi___Sound_Table:
and a,@0b00000111
add pc,a
retl @256-256 ;2060uS=(256+2)*8uS
retl @256-60 ;500uS=(60+2)*8uS
retl @256-190 ;1540uS=(192+2)*8uS
retl @256-130 ;1060uS=(130+2)*8uS
retl @256-130 ;1060uS=(130+2)*8uS
retl @256-193 ;1560uS=(193+2)*8uS
retl @256-65 ;540uS=(65+2)*8uS
retl @256-256 ;2060uS=(256+2)*8uS
Userid_Table0:
retl @0x00
;==========================================;
;******************************************;
;***************主程序开始*****************;
;******************************************;
Main_Loop:
; {
mov a,tcc
xor a,Tcc_Buffer
and a,@0x02 ;30uS
jbc Status,z
jmp Main_Loop
xor Tcc_Buffer,a
eni
;======;
inc System_Clock+0 ;30uS
jbs status,z
jmp Quiver_Key_Samples
jbc System_Clock+1,4
call Edit_End
jbc System_Clock+1,4
clr Same_Key_Value
jbc System_Clock+1,4
bc System_RF_Status,RF_Key_Hold ;0.125S清RF持续标志
jbc System_Status,Find_key
call Find_Car_Key
inc System_Clock+1 ;7.8mS
jbc System_Clock+1,6
jmp Time_500mS
;======;
Key_Samples:
jbc System_Clock+1,0
jmp Same_Key_Status ;有键按下
;======;
Quiver_Key_Samples:
mov a,Sound_Event_Counter
jbs status,z
jmp RF_Samples
jbc System_RF_Status,Quiver_Enable
jmp Key_Quiver
;======;
RF_Samples:
wdtc
jbc RF_Port,RF
bs status,c
jbs RF_Port,RF
bc status,c
rlc Samples
mov a,Samples
call RF_Sample_Table
;-------;
jbs System_RF_Status,RF_Data
jmp RF_Low_Voltage
RF_High_Voltage:
bs System_RF_Status,Save_Data ;数据低电平标置
inc RF_High_Counter
jbc RF_High_Counter,5 ;长度超出,则重新接收
jmp Error_Data
clr RF_Low_Counter
jmp Main_Loop
RF_Low_Voltage:
inc RF_Low_Counter
jbc RF_Low_Counter,5 ;长度超出,则重新接收
jmp Error_Data
;-------;
jbs System_RF_Status,Save_Data ;下降沿
jmp Main_Loop
Keep_Data:
bc System_RF_Status,Save_Data
;-------;
mov a,RF_High_Counter ;0 = 2*Low_Counter > High_Counter / 1 = 2*Low_Counter < High_Counter
add a,@256-Data_Division
rrc RF_Byte_Buffer+2
rrc RF_Byte_Buffer+1
rrc RF_Byte_Buffer+0
;-------;
clr RF_High_Counter
;-------;
inc Bit_Counter
mov a,Bit_Counter
add a,@256-24 ;24 Bits 3Byte
jbs status,c
jmp Main_Loop
;****************************************;
Compare_Id_Data:
mov a,RF_Byte_Buffer+0 ;比较ID
xor a,User_Id+0
jbs status,z
jmp Error_Data
mov a,RF_Byte_Buffer+1
xor a,User_Id+1
jbs status,z
jmp Error_Data
;=============
Dispose_RF_Key:
mov a,RF_Byte_Buffer+2
xor a,Delay_Counter+1
jbs status,z
jmp Dispose_RF_Key2
jbc System_RF_Status,RF_Key_Hold ;操作时RF无效
jmp Hold_RF_Key
Dispose_RF_Key2:
mov a,RF_Byte_Buffer+2
xor a,Same_Key_Value
jbc status,z
jmp Dispose_RF_Key3
mov a,RF_Byte_Buffer+2
mov Same_Key_Value,a
jmp Error_Data
Dispose_RF_Key3:
clr System_Clock+1
;-------;
mov a,RF_Byte_Buffer+2
xor a,@0x0C
jbc status,z
jmp Key_2 ;寻车
;-------;
mov a,RF_Byte_Buffer+2
xor a,@0x03
jbc status,z
jmp Key_4 ;防盗
;-------;
mov a,RF_Byte_Buffer+2
xor a,@0xC0
jbc status,z
jmp Key_1 ;解除
;-------;
mov a,RF_Byte_Buffer+2
xor a,@0x30
jbc status,z
jmp Key_3 ;启动
;-------;
mov a,RF_Byte_Buffer+2
xor a,@0x33
jbc status,z
jmp Key_5 ;启动
;-------;
jmp Error_Data
;=============
Hold_RF_Key:
mov a,Sound_Event_Counter
jbs status,z
jmp Main_Loop
mov a,RF_Byte_Buffer+2 ;寻车
xor a,@0x0C
jbs status,z
jmp RF_Key_Ret2
clr System_Clock+1
inc Hold_Key_Time
jbs Hold_Key_Time,6
jmp Main_Loop
clr Hold_Key_Time
jbc ACC_Port,ACC
jmp Main_Loop
bs System_Status,Edit_Flag
inc Quiver_Edit_Event
mov a,Quiver_Edit_Event
and a,@0b00000111
add pc,a
jmp Edit_Event1;0
jmp Edit_Event2;1
jmp Edit_Event3;2
jmp Edit_Event4;3
jmp Edit_Event5;4
; jmp Edit_Event1;5
; jmp Edit_Event1;6
Edit_Event1: ;7
mov Sound_Event_Counter,@1
bs System_Status,Warm_Initialize
and Quiver_Edit_Event,@0b11110000
jmp Edit_Event_Ret
Edit_Event2:
mov Sound_Event_Counter,@2
bs System_Status,Warm_Initialize
jmp Edit_Event_Ret
Edit_Event3:
mov Sound_Event_Counter,@3
bs System_Status,Warm_Initialize
jmp Edit_Event_Ret
Edit_Event4:
mov Sound_Event_Counter,@4
bs System_Status,Warm_Initialize
jmp Edit_Event_Ret
Edit_Event5:
mov Sound_Event_Counter,@14
bs System_Status,Warm_Initialize
jmp Edit_Event_Ret
Edit_Event_Ret:
bc System_Status,Find_key
jmp RF_Key_Ret;jmp Key_4_2
Edit_End:
jbs System_Status,Edit_Flag
ret
bc System_Status,Edit_Flag
jmp Key_4_2
;=============
Key_1: ;解除
jbs System_RF_Status,No_Sound
jmp $+3
mov Quiver_Edit_Event,@1
bc System_RF_Status,No_Sound
bc System_Status,Not_Sound
mov Sound_Event_Counter,@2
bs System_Status,Warm_Initialize
bc System_RF_Status,Quiver_Enable ;关振动检测
bc Lock_Port,Lock ;关锁线
bc Start_Port,Start ;关启动线
bc System_Status,Start_Flag ;启动再次使能标志
; jbc System_RF_Status,Warm_Enable
; bc System_Status,Not_Lock ;关闭提示设防
bc System_Status,Silence_Key
bc System_RF_Status,Warm_Enable ;关设防使能
jmp RF_Key_Ret
Key_2: ;寻车
bc System_Status,Start_Flag ;启动再次使能标志
jbc System_Status,Edit_Flag
jmp RF_Key_Ret
bs System_Status,Find_key
; bc System_Status,Not_Lock ;关闭提示设防
jmp RF_Key_Ret
Key_5:
jbs System_Status,Start_Flag
jmp RF_Key_Ret
Key_5_2:
; jbc System_RF_Status,Quiver_Enable
; jmp RF_Key_Ret
bs System_RF_Status,No_Sound
bs System_Status,Silence_Key
bs System_Status,Not_Sound
bc System_Status,Start_Flag
jmp Key_4_0
Find_Car_Key:
jbc System_RF_Status,RF_Key_Hold
ret
jbc System_Status,Edit_Flag
ret
bc System_Status,Find_key
jbc System_RF_Status,No_Sound
jmp Find_Car_Key2
mov a,Sound_Event_Counter
jbs status,z
jmp RF_Key_Ret
Find_Car_Key2:
mov a,@5
jbs ACC_Port,ACC
mov a,@13
mov Sound_Event_Counter,a
bs System_Status,Warm_Initialize
bc System_Status,Find_key
bc System_RF_Status,Quiver_Enable
bc System_RF_Status,No_Sound
clr System_Clock+2
ret
Key_3: ;启动
jbc ACC_Port,ACC
jmp RF_Key_Ret
clr Sound_Event_Counter
bc System_Status,Edit_Flag
bc System_Status,Find_key
jbc Start_Port,Start ;已经启动则不动作
jmp RF_Key_Ret
jbs System_Status,Start_Flag
jmp Key_3_2
jbc System_Status,Silence_Key
jmp RF_Key_Ret
bc Lock_Port,Lock
call Delay_200mS
jbs System_RF_Status,No_Sound
jmp $+3
mov Quiver_Edit_Event,@1
bc System_RF_Status,No_Sound
bc System_Status,Not_Sound
mov Sound_Event_Counter,@3
bs System_Status,Warm_Initialize
bc System_RF_Status,Warm_Enable ;关设防使能
bc System_RF_Status,Quiver_Enable ;关振动检测
jbc Check_Port,Check ;为1时,不进开启动信号
jmp Key_3_3
jbc Start_Port,Start
jmp RF_Key_Ret
bs Start_Control_Port,Start_Control
call Delay_50mS;Delay_200mS
bs Start_Port,Start ;报警时输出高
call Delay_300mS
bc Start_Control_Port,Start_Control
jmp RF_Key_Ret
Key_3_3:
bs Start_Port,Start
bc Start_Control_Port,Start_Control
jmp RF_Key_Ret
Key_3_2:
bs System_Status,Start_Flag
jmp RF_Key_Ret
Key_4: ;防盗
bc System_Status,Silence_Key
Key_4_0:
mov a,Sound_Event_Counter
jbc status,z
jmp Key_4_1
clr Sound_Event_Counter
call Delay_6000uS
Key_4_1:
mov Sound_Event_Counter,@1
bs System_Status,Warm_Initialize
Key_4_2:
bc Start_Port,Start
; bc System_Status,Not_Lock ;关闭提示设防
bc System_Status,Start_Flag ;启动再次使能标志
bs System_RF_Status,Warm_Enable
bc System_RF_Status,Warm_Again
bc System_RF_Status,Quiver_Enable
bc Sound_Control_Port,Sound_Control
clr Quiver_Counter+0
clr Quiver_Counter+1
; call Delay_200mS
bs Lock_Port,Lock
jmp RF_Key_Ret
;=============
RF_Key_Ret:
mov a,RF_Byte_Buffer+2
mov Delay_Counter+1,a
bs System_RF_Status,RF_Key_Hold
clr Hold_Key_Time
RF_Key_Ret2:
clr System_Clock+1
clr System_Clock+2
Error_Data:
clr Bit_Counter
clr RF_Low_Counter
clr RF_High_Counter
bc System_RF_Status,Save_Data
jmp Main_Loop
;======;
Time_500mS:
clr System_Clock+1
;======;
mov a,Sound_Event_Counter
xor a,@0
jbc status,z
jmp Flash_Lamp_End
Flash_Lamp:
mov a,@Lamp_Data
xor r6,a ;转向灯闪烁
;======
Flash_Lamp_End:
mov a,Sound_Event_Counter
jbs status,z
jmp Main_Loop
;======;
inc System_Clock+2 ;500mS
jne System_Clock+2,@30 ;15S
jmp Time_15S
jne System_Clock+2,@4 ;2S
jmp Time_2S
jne System_Clock+2,@120 ;60S
jmp Time_60S
jmp Main_Loop
;======;
Time_2S:
;======;
bc System_Status,Start_Flag ;3S内连续按两次启动键有效
bc System_Status,Silence_Key
jbs System_RF_Status,Warm_Enable
jmp Main_Loop
jbc System_RF_Status,Quiver_Enable
jmp Main_Loop
bs System_RF_Status,Quiver_Enable
clr Quiver_Counter+0
jmp Main_Loop
Time_15S:
jbs System_RF_Status,Quiver_Enable ;15S无振动关再次报警
jmp Main_Loop
bc Quiver_Counter+1,0;clr Quiver_Counter+1
bc System_RF_Status,Warm_Again
jmp Main_Loop
Time_60S:
jbs System_RF_Status,Quiver_Enable
jmp Main_Loop
clr Quiver_Counter+1
jmp Main_Loop
;==========================================;
; 程序名: Read_Key
; 功能: 读键程序
;==========================================;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -