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

📄 rf211.c

📁 RF211短程无线通讯,实现485到无线的收发
💻 C
字号:
#include "absacc.h"
#include "reg51f.h"
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "rf211_1.h"

#define	EnableInterrup();	EA = 1;
#define	DisableInterrup();	EA = 0;

void	sendcode(unsigned char c)
{
	unsigned char test;

	SBUF=c;
	test=0;
	while(TI==0);
	TI=0;
}
/************************************************************************/
void	sendhex(unsigned char c)
{
unsigned char  i,test;
	i=c>>4;
	if (i<=9)
		i+=0x30;
	else
		i+=0x37;
	SBUF=i;
	test=0;
	while (TI==0);
	TI=0;

	i=c & 0xf;
	if (i<=9)
		i+=0x30;
	else
		i+=0x37;
	SBUF=i;
	test=0;
	while (TI==0);
	TI=0;
}
/**********************************************************************/
void	delay_1ms()
{
	TL0 = TimerL0_100us;
	TH0 = TimerH0_100us;
	r_timer = 0;
	while(r_timer!=10);
	r_timer = 0;
}
#define	InitXint0();	IT0 = 1;PX0 = 0;  // 下降沿触发
#define	DisableXint0();	EX0 = 0;
#define	EnableXint0();	EX0 = 1;

void	XINT0_int(void) interrupt 0 using 0
{
	EA = 0;
	wakeup = 1;
	EA = 1;
}
#define	DisableTime0();	TR0 = 0;ET0 = 0;
#define	EnableTime0();	TR0 = 1;ET0 = 1;

void	Time0_int(void) interrupt 1 using 0
{
	TL0 = TimerL0_100us;   //18.432mHz 100us
	TH0 = TimerH0_100us;
	r_timer++;
}
void	bit_delay()
{
}
/******************************************************************************************/
//   写数据时序
//    			______                                          ________
//		SLE		      \________________________________________/
//				_____    _   _   _   _   _   _   _   _   _   _
//		SCK		_____\__/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_________
//				        ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
//		SDATA	_______/___|___|___|___|___|___|___|___|___|___\________
//写寄存器数据:
/*******************************************************************************************/
void	trx_register_wr(unsigned char trx_length,unsigned char trx_addr,
                     unsigned char * updata){
	unsigned char temp,i,j;

	trx_addr <<= 4;
	SCK = 0;
	SLE = 0;
	bit_delay();
	for(temp = 0; temp < 4; temp++){
		SDATA = (trx_addr & 0x80)?1:0;
		trx_addr <<= 1;
		bit_delay();
		SCK = 1;
		bit_delay();
		SCK = 0;
		bit_delay();
	}
	SDATA = 1;
	bit_delay();
	SCK = 1;
	bit_delay();
	SCK = 0;
	bit_delay();
	for(temp = 0;temp < trx_length/8;temp++){
		i = *updata++;
		for( j = 0 ; j < 8 ; j ++ ){
			SDATA = (i & 0x80)?1:0;
			i <<= 1;
			bit_delay();
			SCK = 1;
			bit_delay();
			SCK = 0;
			bit_delay();
		}
	}
	i = *updata;
	for(temp = 0 ; temp < trx_length%8 ; temp++)
	{
		SDATA = (i & 0x80)?1:0;
		i <<= 1;
		bit_delay();
		SCK = 1;
		bit_delay();
		SCK = 0;
		bit_delay();
	}
	SLE = 1;
}
/*****************************************************************************************/
void trx_init(){

	unsigned char trx_addr,count,trx_length;
	unsigned char *ptemp ;

	ptemp = &trx_init_data[0];
	trx_addr = trx_f0_address;
	for(count = 0;count<5; count++){
		trx_length = 0x20;
		trx_register_wr(trx_length,trx_addr,ptemp);
		trx_addr++;
		ptemp += 4;
	}

	trx_addr = trx_dtr_address;
	trx_length = 6;
	trx_register_wr(trx_length,trx_addr,trx_init_dtr);

	trx_addr = trx_wuc_address;
	trx_length = 0x20;
	trx_register_wr(trx_length,trx_addr,trx_init_wuc);

	trx_addr = trx_wur_address;
	trx_length = 0x12;
	trx_register_wr(trx_length,trx_addr,trx_init_wur);

	trx_addr = trx_wua_address;
	trx_length = 0x19;
	trx_register_wr(trx_length,trx_addr,trx_init_wua);

	trx_addr = trx_ctrl2_address;
	trx_length = 0x20;
	trx_register_wr(trx_length,trx_addr,trx_init_ctrl2);
}
/**************************************************************************************/
void make_receiver_mode(){
	unsigned char trx_addr,trx_length;

	trx_addr = trx_ctrl1_address;
	trx_length = 0x08;
	trx_register_wr(trx_length,trx_addr,trx_receiver_mode_data);
	DATAMSG = 1;
}
/**************************************************************************************/
void make_transmit_mode()
{
	unsigned char trx_addr,trx_length;
        
//	DATAMSG = 0;
	trx_addr = trx_ctrl1_address;
	trx_length = 0x08;
	trx_register_wr(trx_length,trx_addr,trx_transmit_mode_data);
}
/*****************************************************************************************/
void transmit_wakeup_message(){
	unsigned char temp1;
	unsigned int  wakeup_msg_buff;

	wakeup_msg_buff = wakeup_message;
	r_timer = 0;
	for(temp1 = 0; temp1 <10; temp1++)
	{
		DATAMSG = (wakeup_msg_buff & 0x8000)? 1: 0;
		wakeup_msg_buff <<= 1;
		while(r_timer != 1);
		r_timer = 0;
	}
	DATAMSG = 0;
}
/*****************************************************************************************/
void transmit_data(unsigned char length,unsigned char *t_Buffer)
{
	unsigned char idata temp,temp1;
	unsigned char idata IO_Data;

	r_timer = 0;
	DATAMSG = 1;
	TL0 = TimerL0_100us;
	TH0 = TimerH0_100us;
	while(r_timer != 100);	//延时10ms
	DATAMSG = 0;
	r_timer = 0;
	for(temp = 0; temp < length; temp++)
	{
		IO_Data = *t_Buffer++;
		for(temp1 = 0; temp1 <8; temp1++)
		{
			while (r_timer == 0);   //等待100us
			r_timer = 0;
			bitC = ((IO_Data)&(0x80))? 1:0;
			IO_Data <<= 1;
			if(bitC == 0)
			{
				DATAMSG = 1;
				while(r_timer == 0);
				r_timer = 0;
				DATAMSG = 0;
			}
			else
			{
				DATAMSG = 0;
				while(r_timer == 0);
				r_timer = 0;
				DATAMSG = 1;
			}
		}
	}
	r_timer = 0;
	while(r_timer == 0);
	DATAMSG = 0;
	return;
}
/***************************************************************************************/
void transmit(unsigned char length,unsigned char *t_Buffer)
{
	unsigned char  idata transmit_count;

/*	for(transmit_count = 0; transmit_count < 3;transmit_count++)
	{
		r_timer = 0;
		while(r_timer != 10);	//1ms
		transmit_wakeup_message();
	}*/
	DATAMSG = 1;
	delay_1ms();
	transmit_data(length,t_Buffer);
	delay_1ms();
	transmit_data(length,t_Buffer);
	return;
}
/****************************************************************************************/
unsigned char  receiver(unsigned char length,unsigned char *r_Buffer){
	unsigned char idata temp,temp1,count,r_count;
	signed char idata temp2,temp3;
	unsigned char idata IO_Data;
	unsigned char code ok[3] = {"OK"};

	make_receiver_mode();
	while(DATAMSG!=1);
start_recerver:
	r_timer = 0;
	r_count = 0;
	count = 0;
	while(r_count < 20)
	{
		if(r_timer == 100)
		{
			r_timer = 0;
			count ++;
			if(count == 34)
				return (fail);
		}
		if(DATAMSG == 0)
			r_count = 0;
		else
			r_count ++;
	}
	r_timer = 0;
	count = 0;
	while(count < 8)
	{
		if(r_timer == 110) 
			goto start_recerver;
		if(DATAMSG == 1)
			count = 0;
		else 
			count ++;
	}
	if(r_timer < 80)
		goto start_recerver;
	r_timer = 0;
	for(count = 0; count <length; count ++)
	{
		for(temp1 = 0; temp1 < 8; temp1++)
		{
			while(r_timer == 0);	
			r_timer = 0;
			r_count = 0;
			for(temp = 0;temp < 8; temp++)
			{	
				if( DATAMSG == 0)
					r_count ++;
			}
			temp2 = r_count - sample_gate;		// sample_gate = 5;
			while(r_timer == 0);
			r_timer = 0;
			r_count = 0;
			for(temp =  0;temp < 8; temp++)
			{
				if( DATAMSG == 0)
					r_count ++;
			}
			temp3 = r_count -sample_gate;
			if(temp2 * temp3 > 0)
				goto start_recerver;
			IO_Data = IO_Data << 1;
			if(temp3 < 0) IO_Data ++;
		}
		*r_Buffer ++= IO_Data;
	}
	make_transmit_mode();
	delay_1ms();
	transmit(3,&ok[0]);
	return (success);
}
/*****************************************************************************************/
void RED_ON()
{
	RED = 0;	
}
void RED_OFF()
{
	RED = 1;
}
void GREEN_ON()
{
	GREEN = 0;
}
void GREEN_OFF()
{
	GREEN = 1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////
//	TH1 = 0xfd;   //19200   7.37M 0xfc 11.0596M 0xfd  12M 0xfd				//
//	TL1 = 0xfd;   //19200									//																						//
//	TH1 = 0xfb;	  //38400   18.432M							//
//	TL1 = 0xfb;										//
//////////////////////////////////////////////////////////////////////////////////////////////////
void InitComm(void)
{

	TMOD=0x21;
	PCON=0x80;
	TCON=0x51;
	SCON=0x70;
	TH1 = 0xfb;
	TL1 = 0xfb;
	TI=0;
	RI=0;
}
void Init_Device()
{
	InitComm();
	InitXint0();
	trx_init();
	EnableInterrup();
	EnableTime0();
	RE = 0;
	DE = 1;
}
void Enable_485_R()
{
	RE = 0;
	DE = 0;	
}
void Enable_485_S()
{
	RE = 1;
	DE = 1;	
}
void main(void)
{
	unsigned char i,ch;
	unsigned char code str[14] = {"good morning!"};

	Init_Device();
	RED_OFF();
	GREEN_ON();
	ch = 0;
	Enable_485_R();
	r_timer = 0;
	while(r_timer != 5);
	r_timer = 0;
	do{
		RI = 0;
		while(RI!=1);
		ch = SBUF;
	}while(ch != '1');
	Enable_485_S();
	r_timer = 0;
	while(r_timer != 5);
	r_timer = 0;
	sendcode(ch);
	for(i=0;i<14;i++)
		sendcode(str[i]);
	RED_ON();
	GREEN_OFF();
	Enable_485_R();
	r_timer = 0;
	while(r_timer != 5);
	r_timer = 0;
	RI = 0;
	while(RI!=1);
}

⌨️ 快捷键说明

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