📄 rf211.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 + -