📄 rf_rxover.c
字号:
#include "C8051F120.h"
#include "INTRINS.H"
sbit dat=P0^7; //data
sbit pwr=P0^3; //pwr
sbit led=P0^4; //clk2
sbit dout0=P0^5; //dout2
sbit clk=P0^6; //clk1
sbit cs=P4^7; //cs
sbit ce=P4^6; //ce
sbit dr2=P4^5; //dr2
sbit dr1=P4^4; //dr1
unsigned char variable1;
unsigned char variable2;
unsigned char rec_data[4];
unsigned char config_data[15];
unsigned char m;
unsigned char n;
unsigned char temp;
//
void delayus(unsigned char us)
{unsigned char i;
for (i=0;i<us;i++)
{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
}
void delayms(unsigned char ms)
{unsigned char rrr,cnt;
for (rrr=0;rrr<ms;rrr++)
{
for(cnt=0;cnt<4;cnt++)
delayus(250);
}
}
void Oscillator_Init()
{
int i = 0;
SFRPAGE = CONFIG_PAGE;
OSCXCN = 0x77;
for (i = 0; i < 3000; i++); // Wait 1ms for initialization
while ((OSCXCN & 0x80) == 0);
CLKSEL = 0x01;
}
void Port_IO_Init()
{
SFRPAGE = CONFIG_PAGE;
P0MDOUT = 0XFF;
P4MDOUT = 0xEF;
XBR2 = 0x40;
dr1=1;
n++;
}
void pwrconfig(void)
{
int i,j;
m=0;
config_data[0]=0x20; //119:112
config_data[1]=0x20; //112:104,通道1数据长度
config_data[2]=0x00; //103:64,channel 2 address
config_data[3]=0xcc;
config_data[4]=0xcc;
config_data[5]=0xcc;
config_data[6]=0xcc;
config_data[7]=0x00; //63:24,channel 1 address
config_data[8]=0xcc;
config_data[9]=0xcc;
config_data[10]=0xcc;
config_data[11]=0xcc;
config_data[12]=0x83; //address width,CRC 16bits
config_data[13]=0x4e;
config_data[14]=0x05; //定义工作模式为接收模式
pwr=0; //掉电模式
cs=0;
ce=0;
clk=0;
dat=0;
pwr=1; //数据发送结束,进入stand by mode
delayms(5);
cs = 1; //进入配置方式
delayus(6); //CS到dat至少延迟5us Tcs2data
dat=0;
for(i=0;i<15;i++)
{
variable1=config_data[i];
for(j=7;j>=0;j--)
{
clk=0;
SFRPAGE = CONFIG_PAGE;
dat=(variable1>>j)&0x01; //配置先写入高位MSB
delayus(5); //Ts
clk=1;
delayus(5); //时钟信号高电平保持最多3ms
clk=0; //数据在CLK1上升沿写入
}
m++;
}
cs=0; //CS置低使配置有效
}
void Receive_data(void)
{
int i,j;
n=0;
pwr = 1; //待机模式
ce = 0 ;
cs = 0;
clk=0;
delayus(1);
ce=1; //进入工作(接收)模式
P0MDOUT = 0X7F;
dat=1;
delayms(6);
//dat=0;
if(dr1==1)
{
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
variable2<<=1;
clk=0;
temp=dat&0x01;
variable2+=temp;
delayus(5);
clk=1;
delayus(5);//dr12clk
n++;
}
rec_data[i]=variable2;
variable2=0x00;
}
}
}
void main()
{
Oscillator_Init();
WDTCN = 0Xde;
WDTCN = 0Xad;
Port_IO_Init();
pwrconfig();
Receive_data();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -