⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xl032_szgs01.dt

📁 完整的电动车防盗报警器源码
💻 DT
📖 第 1 页 / 共 3 页
字号:
;******************************************;
;     项目名称:电动车防盗报警器主机 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 + -