无线遥控433MHz编码发射

工作中遇到客户想采用AD检测的不同地电压方式发送不同RF值出来,下面就是具体发送的
做法。
硬件电路:

协议设计

1、引导码--10ms ;2、键码;3、键码反码,如果长按发送会一直输出这样的波形;4、结束码-20ms;

有按键按下就发送3次 ,防止接收设备接收时出现意外。

逻辑0:高电平0.4ms,低电平1ms

逻辑1:高电平1ms,低电平0.4ms

编码的波形

代码是汇编程序,软件流程是有按键按下,AD采集识别具体按键,然后分配键值,使能发送标志F_RF_TX_EN。然后在采用在100us的中断中发送,发送一次完成计数一次,计数到达3次,清除F_RF_TX_EN使能标志。

D_RF_TX_CNT					EQU		D'16'			;发送数据位数
;
D_RF_TX_10MS				EQU		D'100'			;10MS的最大时间,基值100us
;
D_RF_TX_0_H					EQU		4			;0的高电平时间.基值100us
D_RF_TX_0_L					EQU		10			;0的低电平时间.基值100us
;
D_RF_TX_1_H					EQU		10			;1的高电平时间.基值100us
D_RF_TX_1_L					EQU		4			;1的低电平时间.基值100us
;
D_RF_WAIT_TIME				EQU		200			;重新发送的等待时间,基值100us
;
D_RF_RELEASE_TIME			        EQU		12			;单击发送延时,基值10ms
D_RF_TX_RELEASE_CNT			EQU		3
R_RF_TX_FLAG				EQU		0X36
	#DEFINE			F_RF_TX_10MS			R_RF_TX_FLAG,0				;10MS低电平发射完成标志, 1:发射完成.   0:发射未完成.
    #DEFINE                 F_RF_EN				R_RF_TX_FLAG,1			;RF使能标志. 1:启动RF发送,  0:停止RF发送
	#DEFINE			F_RF_EN_START			R_RF_TX_FLAG,2				;RF发送标志. 1:RF发送		0:RF不发送
	#DEFINE			F_RF_TX_STATUS			R_RF_TX_FLAG,3				;RF发送电平状态. 1:发送低电平	0:发送高电平
	#DEFINE			F_RF_EN_STATUS			R_RF_TX_FLAG,4				;RF发送	状态.	 1:使能发送	0:等待时间.	
	#DEFINE			F_RF_EN_FLAG			R_RF_TX_FLAG,5
	
RF_CTRL:
		BTRSS	F_RF_EN						;
		LGOTO	RF_CTRL_OFF_2
RF_CTRL_ON:		
		BTRSC	F_RF_EN_FLAG
		LGOTO	RF_CTRL_ON_WAIT
		;
		BTRSC	F_RF_EN_START
		RET
		;
		BSR	F_RF_EN_FLAG				;置等待标志.
		;
		MOVR	R_RF_DATA1,0
		MOVAR	R_RF_TX_DATA1
		;
		MOVR	R_RF_DATA1,0
		XORIA	0XFF						;取反键值
		MOVAR	R_RF_TX_DATA2
		;
		BCR		F_RF_TX_STATUS
		MOVIA	16							;2*8 
		MOVAR	R_RF_TX_CNT
		CLRR	R_RF_TX_TIME
		;
		BCR	P_RF_OUT					;拉低
		;
		BCR	F_RF_TX_10MS				;
		BSR	F_RF_EN_START				;启动发送.
		;
		RET
		;LGOTO	RF_CTRL_OFF
RF_CTRL_ON_WAIT:
		BTRSC	F_RF_EN_START				;发送一次完成,START置0.
		LGOTO	RF_CTRL_ON_WAIT_1
		;
		BSR	P_RF_OUT					;空闲状态 拉高
		;
		MOVIA	D_RF_WAIT_TIME				;间隔时间 200*100us--20ms
		SUBAR	R_RF_WAIT_TIME,0
		BTRSS	C
		RET
		CLRR	R_RF_WAIT_TIME
		;
		BCR	F_RF_EN_FLAG
		;
		LGOTO	RF_CTRL_OFF					;去判断计数次数
RF_CTRL_ON_WAIT_1:
		CLRR	R_RF_WAIT_TIME				;清除发送等待时间
		BSR		F_RF_EN_FLAG				;置等待标志.
		RET
RF_CTRL_OFF:		
		MOVIA	D_RF_TX_RELEASE_CNT
		SUBAR	R_RF_TX_RELEASE_CNT,0		;R – ACC 
		BTRSS	C
		RET
		LGOTO	RF_CTRL_OFF_3
RF_CTRL_OFF_2:		
		;
		CLRR	R_RF_TX_RELEASE_CNT		
		;
		BCR		F_RF_EN		
		;
		BCR		F_RF_EN_FLAG
		BCR		F_RF_EN_START
		BCR		F_RF_TX_FREE				;
		BSR		P_RF_OUT					;结束,置1 
		RET
RF_CTRL_OFF_3:
            BCR    P_RF_OUT					;拉低		
		LGOTO	RF_CTRL_OFF_2

;RF发送--中断调用--100us发送一次
RF_TX:	
		INCR	R_RF_WAIT_TIME,1			;等待时间
		BTRSC	Z
		DECR	R_RF_WAIT_TIME,1
		;
		BTRSS	F_RF_EN_START				;发送标志位是否置起
		RET
		;
		BTRSS	F_RF_TX_10MS				;引导码
		LGOTO	RF_TX_10MS
		;
		CLRR	R_RF_WAIT_TIME
		INCR	R_RF_TX_TIME,1
		;
		BTRSC	F_RF_TX_STATUS				;数据状态标志位
		LGOTO	RF_TX_L	
RF_TX_H:									;发送1bit的高电平
		BTRSC	R_RF_TX_DATA1,7				;高位先发送---
		LGOTO	RF_TX_H_1
RF_TX_H_0:
		MOVIA	D_RF_TX_0_H				;“1”的低电平时间
		LGOTO	RF_TX_H_2
RF_TX_H_1:
		MOVIA	D_RF_TX_1_H				;“1”的高电平时间
RF_TX_H_2:
		BSR	P_RF_OUT
		;
		SUBAR	R_RF_TX_TIME,0
		BTRSS	C
		RET
		CLRR	R_RF_TX_TIME;
		;
		BSR	F_RF_TX_STATUS			;一个bit,发送完高电平,再发送低电平.
		RET
RF_TX_L:									;发送1bit的低电平
		BTRSC	R_RF_TX_DATA1,7			;高位先发送
		LGOTO	RF_TX_L_1			
RF_TX_L_0:		
		MOVIA	D_RF_TX_0_L			;“0”的低电平时间
		LGOTO	RF_TX_L_2
RF_TX_L_1:								
		MOVIA	D_RF_TX_1_L			;“0”的高电平时间
RF_TX_L_2:
		BCR	P_RF_OUT
		;
		SUBAR	R_RF_TX_TIME,0
		BTRSS	C
		RET
		CLRR	R_RF_TX_TIME;
		;
		RLR	R_RF_TX_DATA2,1				
		RLR	R_RF_TX_DATA1,1
		;
		BCR	F_RF_TX_STATUS				;一个bit,发送完高电平,再发送低电平.
		;
		DECRSZ	R_RF_TX_CNT,1				;发送个数.
		RET
		;
		BCR	F_RF_EN_START				;发送停止.
		
		CLRR	R_RF_WAIT_TIME				;清除等待计数
    	INCR	R_RF_TX_RELEASE_CNT,1		;发送完成 计数一次。
		RET	
RF_TX_10MS:
		BCR	P_RF_OUT					;发送10ms 低电平 ------引导码
		;
		INCR	R_RF_TX_TIME,1
		;
		MOVIA	D_RF_TX_10MS	
		SUBAR	R_RF_TX_TIME,0				;100US 时间基值  
		BTRSS	C
		RET
		;
		CLRR	R_RF_TX_TIME				;
		;
		BSR		F_RF_TX_10MS				;10MS发送完成,置位该标志.并输出高电平
		BSR		P_RF_OUT					;拉高
		;
		RET	
RF_TX_RET:
		;BSR		P_RF_OUT				;默认发送脚为高电平
		RET	  

解码思路

定时中断中处理 时间(80-100us),然后在中断调用接收解码函数,接收起始码判断。判断 L 电平的时间5MS<P_RF_RX<9MS这个范围内说明有启动信号,这个时才往后面接收数据的判断。否则就是不对的起始信号,退出解码函数。逻辑电平1和0的判断都是可以这么处理。具体实现可以看下其他网上的思路。

猜你喜欢

转载自blog.csdn.net/u013830926/article/details/105727603
MHZ