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