📄 nrf9e5的发射代码.txt
字号:
9e5的发射代码
#include <Nordic\reg9e5.h>
sbit led = P0^7; //指示灯
int sjjx0; //计时
#define config_reg0 0x6c;//=0110_1100 CH_NO;
#define config_reg1 0x0e;//=0000_1110 D7D6-无效,D5-自动重发,D4-接收节能
// D3D2-功率选择,D1-PLL控制,D0-CH_NO第8位
#define config_reg2 0x44;//=0100_0100; D7-无效,D6D5D4-接收地址长度,D3-无效,D2D1D0-发送地址长度
#define config_reg3 0x20;//=0010_0000; D7D6-无效,D5~D0接收数据宽度 32字节
#define config_reg4 0x20;//=0010_0000; D7D6-无效,D5~D0发送数据宽度 32字节
#define config_reg5 0xe7;//接收地址标识1
#define config_reg6 0xe7;//接收地址标识2
#define config_reg7 0xe7;//接收地址标识3
#define config_reg8 0xe7;//接收地址标识4
#define config_reg9 0xdc;//1101_1100;D7-CRC选择,D6-CRC校验使能,D5D4D3-晶振选择
//D2-输出时钟使能,D1D0-输出时钟频率
unsigned char config_reg[10]={0x6c,0x0e,0x44,0x20,0x20,0xe7,0xe7,0xe7,0xe7,0xdc};//配置字节
unsigned char txadd_sbuf[4]={0xe7,0xe7,0xe7,0xe7};//地址
unsigned char txdat_sbuf[32];//发送缓存
//------SPI读写-------
unsigned char SpiReadWrite(unsigned char b)
{
EXIF &= ~0x20; // Clear SPI interrupt
SPI_DATA = b; // Move byte to send to SPI data register
while((EXIF & 0x20) == 0x00); // Wait until SPI hs finished transmitting
return SPI_DATA;
}
//---向SPI写地址----
void TransmitAddress(void)
{ unsigned char i;
RACSN = 0;
SpiReadWrite(WTA); //指令
for(i=0;i<4;i++)
{ SpiReadWrite(txadd_sbuf[i]);} //地址
RACSN = 1;
}
//---向SPI写数据----
void TransmitPacket(void)
{ unsigned char i;
RACSN = 0;
SpiReadWrite(WTP); //´指令î
for(i=0;i<31;i++)
{ SpiReadWrite(txdat_sbuf[i]);}//数据
RACSN = 1;
}
//-----9E5初始化------
void Init(void)
{ unsigned char i;
P0_ALT = 0x00; // P0为I/O
P0_DIR = 0x7f; // P0.7
SPICLK = 0x00; // SPI clock
SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
// 设置Radio的RF-config:
TRX_CE = 0; //待机
TXEN = 1; //发送状态
for(i=0;i<10;i++)
{ RACSN = 1;
RACSN = 1;
RACSN = 0;
RACSN = 0;
RACSN = 0;
RACSN = 0;
SpiReadWrite(WRC | i);
SpiReadWrite(config_reg[i]);
}
RACSN = 1;
TMOD=0x21;
TH0=0xe5; //
TL0=0xf5;
ET0=1;
EA=1;
TR0=1;
}
void main(void)
{ unsigned char n,adc_num;
Init(); //
for(n=1;n<4;n++) //指示灯闪烁
{
led = 0;
sjjx0=40;
while(sjjx0);
led=1;
sjjx0=40;
while(sjjx0);
}
for(n=0;n<14;n++)txdat_sbuf[n]=0xaa;
txdat_sbuf[14]=0x55; //设置数据格式0xaa,0xaa....0xaa,0x55,[D1,D2,D3],0x33,0x33....0x33
for(n=0;n<17;n++)txdat_sbuf[15+n]=0x33;
while(1)
{ adc_num++;
if(adc_num > 250)adc_num = 0;//设置传输数据0--250
for(n=1;n<4;n++)txdat_sbuf[14+n]=adc_num;
TransmitPacket(); //
TRX_CE = 1; //
while(DR);
while(!DR);
TRX_CE = 0; //发送完毕
led = 0;
sjjx0 = 40;
while(sjjx0);
led = 1;
sjjx0 = 200;
while(sjjx0);
}
}
//----定时5ms-----
void timer0() interrupt 1
{ TH0=0xe5;
TL0=0xf5;
sjjx0--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -