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

📄 rx.dt

📁 2.4G婴儿监护器接收器,EM78P153S开发
💻 DT
字号:
;******************************************;
;	项目名称:	遥控接收器 
;	设计者:  	小丁 
;	完成日期:	2007年8月16日 
;	芯片型号:	EM78P153S
;	振荡类型:	IRC
;	频率: 		4MHz/2Clock
;	WDT: 		开 
;	CHECKSUM:	 E709
;******************************************;
;	P60	C_Control
;	P61	B_Control
;	P62	A_Control
;	P63	RF
;	P64	继电器 
;	P65	
;========EM78常量定义======================;
Data_Division		equ	@16
A_Port			   equ	r6
A_P				  equ	2
B_Port			   equ	r6
B_P				  equ	1
C_Port			   equ	r6
C_P				  equ	0
RF_Port			  equ	r6
RF				   equ	3
Relay_Port		   equ	r6
Relay				equ	4
;========EM78专用寄存器地址定义============;
include	"em78p153.h"
;========EM78一般寄存器定义================;
Temporary_Register   equ	0x10		   ;1byte 临时变量 
Samples			  equ	0x11		   ;1byte PF采样缓存 
Bit_Counter		  equ	0x12		   ;1byte 接收位计数 
RF_High_Counter	  equ	0x13		   ;1byte 接收高电平计数 
RF_Low_Counter	   equ	0x14		   ;1byte 接收低电平计数 
RF_Byte_Buffer	   equ	0x15		   ;3byte 接收数据 

Hold_RF_Key_Time	 equ	0x18		   ;2byte RF持续键时间 
IO_Buffer			equ	0x1A		   ;1byte IO缓存 
Key_Time			 equ	0x1B		   ;1byte 放键时间 
User_Id			  equ	0x20		   ;2byte 前使用的用户码 
Same_Key_Value	   equ	0x1C
System_Clock		 equ	0x22		   ;1Byte
;========EM78一般控制位定义================;
System_Status		equ	0x2A		   ;1byte 系统变量 
	Hold_RF_Key	  equ	1
	RF_Data		  equ	2
	Save_Data		equ	3
	Error_ID		 equ	4
	Study_ID		 equ	5
	Hold_Key		 equ	6
;**************上电复位入口****************;
	org	0x3FF
	jmp	System_Initialize
	org	0
	jmp	System_Initialize
;**************用户码表入口****************;
Id_Table:
	add	pc,a
	retl	@0x82			   ;Id_Num1(00~FF)
	retl	@0x83			   ;Id_Num2(00~FF)
;**************中断程序入口****************;
      org	8
Tcc_Interrupt_Serve:
;{
	;=============
	bc	intf,tcif
	mov    a,@256-80					    ;4M 40uS
	add    tcc,a
	;=============
	inc	System_Clock
	jbs	status,z
		jmp	Receive_RF
	clr	System_Clock					 ;10mS
	;=============
Not_RF_Key_Time:
	inc	Hold_RF_Key_Time
	jbs	Hold_RF_Key_Time,4
		jmp	Receive_RF_Data
	clr	Hold_RF_Key_Time
	bc	System_Status,Hold_Key
	bc	System_Status,Hold_RF_Key		;是否RF无键160mS
	bs	C_Port,C_P
	bs	B_Port,B_P
	bs	A_Port,A_P
	inc	Hold_RF_Key_Time+1
	jbc	Hold_RF_Key_Time+1,5			;5S
		bc	Relay_Port,Relay
	;=============
Receive_RF:
	jmp	Receive_RF_Data
;**************用户码表入口****************;	
IR_Sample_Table:
	and	a,@0b00000111
	add	pc,a
	bc	System_Status,RF_Data;000
	ret;001
	ret;010
	ret;011
	ret;100
	ret;101
	ret;110
	bs	System_Status,RF_Data;111
	ret
;==========================================;
;    程序名: Receive_RF
;      功能: 无线接收程序 
;==========================================;
Receive_RF_Data:
	jbc	RF_Port,RF
		bs	status,c
	jbs	RF_Port,RF
		bc	status,c
	rlc	Samples
	mov	a,Samples
	call	IR_Sample_Table
	;-------;
	jbs	System_Status,RF_Data
		jmp	RF_Low_Voltage
RF_High_Voltage:
	bs	 System_Status,Save_Data		  ;数据低电平标置 
	inc	RF_High_Counter
	jbc	RF_High_Counter,7				;长度超出,则重新接收 
		jmp	Error_Data
	clr	RF_Low_Counter
	reti
RF_Low_Voltage:
	inc	RF_Low_Counter
	jbc	RF_Low_Counter,7				 ;长度超出,则重新接收 
		jmp	Error_Data
	;-------;
	jbs	System_Status,Save_Data		  ;下降沿 
		reti
Keep_Data:
	bc	 System_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
		reti
	;****************************************;
Compare_User_ID:
	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
	;=============
Compare_Id_Data:
	mov	a,RF_Byte_Buffer+2
	xor	a,Same_Key_Value
	jbs	status,z
		jmp	Dispose_RF_Key
	jbc	System_Status,Hold_RF_Key		 ;操作时RF无效 
		jmp	RF_Key_Ret
Dispose_RF_Key:
	mov	a,RF_Byte_Buffer+2
	and	a,@0b00000011
	add	pc,a
	jmp	Error_Data							;00
	jmp	Key_1							;01
	jmp	Key_2							;10
	jmp	Error_Data					   ;11
	;=============
Key_1:
	jbc	System_Status,Hold_Key
		jmp	RF_Key_Ret
	bs	C_Port,C_P
	bc	B_Port,B_P
	bc	A_Port,A_P	 
	jmp	RF_Key_Ret
Key_2:
	bc	C_Port,C_P
	bc	B_Port,B_P
	bc	A_Port,A_P
	bs	 Relay_Port,Relay
	clr	Hold_RF_Key_Time+1
	bs	System_Status,Hold_Key
	jmp	RF_Key_Ret
RF_Key_Ret:
	mov	a,RF_Byte_Buffer+2
	mov	Same_Key_Value,a
	bs	 System_Status,Hold_RF_Key
	clr	Hold_RF_Key_Time
Error_Data:
	clr	Bit_Counter
	bc	 System_Status,Save_Data
	reti
;==========================================;
;----------子程序Receive_IR结束------------;
;==========================================;


;****************系统初始化****************;
System_Initialize:
;{
	clr	r5							  ;
	iow	ioc5,@0b00000000				;
	mov	r6,@0b00001111				  ;
	iow	ioc6,@0b00001000				;
	iow	iocd,@0b11110111				;P6全开上拉 
	iow    ioce,@0b10000000				;开看门狗 开P60/INT
	iow    iocf,@0b00000001				;开看门狗 开P60/INT
	contw  @0b00001000					 ;
	;=======
	iclr								   ;初始化清空变量 
	;=======
	mov	a,@0
	call	 Id_Table
	mov	User_Id+0,a
	mov	a,@1
	call	 Id_Table
	mov	User_Id+1,a
	eni
;****************主程序开始****************;
Main_Loop:
	wdtc
	nop
	nop
	jmp	Main_Loop
;==========================================;
;==========================================;
mov	macro	Reg,@Value
	mov	a,@Value
	mov	Reg,a
	endm
;==========================================;
mov	macro	dReg,sReg
	mov	a,sReg
	mov	dReg,a
	endm
;==========================================;
contw	macro	@Value	;contw
	mov	a,@Value
	contw
	endm
;==========================================;
iow	macro	Reg,@Value
	mov	a,@Value
	iow	Reg
	endm
;==========================================;
xora	macro	dReg,sReg	
	mov	a,dReg
	xor	a,sReg
	endm
;==========================================;
xora	macro	Reg,@Value	
	mov	a,Reg
	xor	a,@Value
	endm
;==========================================;
suba	macro	Reg,@Value
	mov	a,Reg
	sub	a,@Value
	endm
;==========================================;
suba	macro	@Value,Reg
	mov	a,@Value
	sub	a,Reg
	endm
;==========================================;
imov	macro	dReg,sReg		;整数移动 
	rmov	dReg+1,sReg+1
	rmov	dReg,sReg
	endm
;==========================================;
iinc	macro	Reg	;int inc
	inc	Reg+1
	jbc	status,z
		inc	Reg
	endm
;==========================================;
idec	macro	Reg	;int dec
	mov	Reg+1,Reg+1
	jbc	status,z
		dec	Reg
	dec	Reg+1
	endm
;==========================================;
ineg	macro	Reg
	com	Reg+1
	inc	Reg+1
	jbc	status,z
		dec	Reg+0
	com	Reg+0
	endm
;==========================================;
iadd	macro	dReg,sReg
	mov	a,sReg+1
	add	dReg+1,a
	jbc	status,c
		inc	dReg+0
	mov	a,sReg
	add	dReg+0,a
	endm
;==========================================;
jnz	macro	Reg
	mov	Reg,Reg
	jbc	status,z
	endm
;==========================================;
ijnz	macro	Reg
	mov	a,Reg+1
	or	a,Reg
	jbc	status,z
	endm
;==========================================;
je	macro	sReg1,sReg2	;相同 
	mov	a,sReg1
	xor	a,sReg2
	jbs	status,z
	endm
;==========================================;
jne	macro	sReg1,sReg2	;不相同 
	mov	a,sReg1
	xor	a,sReg2
	jbc	status,z
	endm
;==========================================;
jh	macro	Reg1,Reg2		;Reg1>Reg2?
	mov	a,Reg1		
	sub	a,Reg2
	jbc	status,c
	endm
;==========================================;
jl	macro	Reg1,Reg2		;Reg1<Reg2?
	mov	a,Reg2
	sub	a,Reg1
	jbc	status,c
	endm
;==========================================;
jlc	macro	Reg,@Value	;Reg<@Value?
	mov	a,@Value
	sub	a,Reg
	jbc	status,c
	endm
;==========================================;
Table	macro	Reg
	mov	a,Reg
	add	pc,a
	endm
;==========================================;
iclr	macro		;indirect Clear Ram
	mov	a,@15
	mov	rsr,a
Initial_User_Ram:				   ;初始化清空变量 
	inc	rsr
	clr	iar	
	mov	a,rsr
	and	a,@0b00111111
	xor	a,@0b00111111
	jbs	status,z
	jmp	Initial_User_Ram		
	clr	rsr
	endm
;==========================================;
	END
;=========================================;
;=========================================;
;=========================================;
;=========================================;
;=========================================;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -