📄 2401.txt
字号:
void Config_RF_rtchange(char tr_id)
{
unsigned char cfg_byte;
unsigned char temp_sdi_byte; //为SPI协议的SDI端定义临时变量
cfg_byte = 0x04;
// 接收模式
if (tr_id=='r') cfg_byte = 0x05;
//先进入standby模式
rf_pwr = 1;
dly(1);
rf_ce = 0;
dly(1);
rf_cs = 0;
dly(1); //确保延迟50ns
//进入配置模式
rf_ce = 0;
dly(1);
rf_cs = 1;
dly(2); //确保延迟5us
SPI2CONbits.DISSDO = 0; //打开SDO端
SPI2BUF = cfg_byte; //写入配置数据
dly(50);
while(SPI2STATbits.SPITBF); //从SPIBUF向SPISR传输结束
while(!IFS1bits.SPI2IF); //SPISR与SDO/SDI端口传输结束
IFS1bits.SPI2IF = 0; //清标志
temp_sdi_byte = SPI2BUF; //执行SPI协议的SDI端
while(SPI2STATbits.SPIRBF); //读入完成
SPI2STATbits.SPIROV = 0; //清标志
//进standby模式
rf_ce = 0;
dly(1);
rf_cs = 0;
dly(1);
//进入工作模式
rf_ce = 1; //确保延迟5us
dly(1);
rf_cs = 0;
dly(2);
}
void Send_RF_msg()
{
unsigned int cnt;
unsigned char sndmsg[18];
unsigned char temp_sdi[18]; //为SPI协议的SDI端定义临时数组
for(cnt=0;cnt<18;cnt++)
{
sndmsg[cnt]='a';
}
rf_ce = 1;
dly(2); //确保延迟5us
rf_cs = 0;
dly(1);
SPI2CONbits.DISSDO = 0; //打开SDO端
//先发送目标节点地址
for(cnt=0;cnt<4;cnt++)
{
SPI2BUF = 0xcc; //写入目标地址
dly(50);
while(SPI2STATbits.SPITBF); //从SPIBUF向SPISR传输结束
while(!IFS1bits.SPI2IF); //SPISR与SDO/SDI端口传输结束
IFS1bits.SPI2IF = 0; //清标志
temp_sdi[cnt] = SPI2BUF; //执行SPI协议的SDI端
while(SPI2STATbits.SPIRBF); //读入完成
SPI2STATbits.SPIROV = 0; //清标志
}
for(cnt=0;cnt<18;cnt++)
{
SPI2BUF = sndmsg[cnt]; //写入发送数据
dly(50);
while(SPI2STATbits.SPITBF); //从SPIBUF向SPISR传输结束
while(!IFS1bits.SPI2IF); //SPISR与SDO/SDI端口传输结束
IFS1bits.SPI2IF = 0; //清标志
temp_sdi[cnt] = SPI2BUF; //执行SPI协议的SDI端
while(SPI2STATbits.SPIRBF); //读入完成
SPI2STATbits.SPIROV = 0; //清标志
}
rf_ce = 0; //启动发射
dly(1);
rf_cs = 0;
dly(1);
dly(100); //确保延迟195us
}
void Rcv_RF_msg()
{
unsigned int cnt;
unsigned char rcvmsg[18];
unsigned char temp_sdo[18]; //为SPI协议的SDO端定义临时数组
rf_ce = 1;
dly(1); //确保延迟50ns
rf_cs = 0;
dly(1);
/*
//SPI2CONbits.CKP = 1; //时钟空闲时为高电平
SPI2CONbits.CKP = 0; //时钟空闲时为低电平
//SPI2CONbits.CKE = 0; //数据在时钟从空闲转变为有效时切换
SPI2CONbits.CKE = 1; //数据在时钟从有效转变为空闲时切换
*/
SPI2CONbits.DISSDO = 1; //关闭SDO端
for(cnt=0;cnt<18;cnt++)
{
temp_sdo[cnt] = cnt;
SPI2BUF = temp_sdo[cnt]; //执行SPI协议的SDO端
dly(50);
while(SPI2STATbits.SPITBF); //从SPIBUF向SPISR传输结束
while(!IFS1bits.SPI2IF); //SPISR与SDO/SDI端口传输结束
IFS1bits.SPI2IF = 0; //清标志
rcvmsg[cnt] = SPI2BUF; //读入数据
//rfmsg[cnt] = SPI2BUF; //读入数据
while(SPI2STATbits.SPIRBF); //读入完成
SPI2STATbits.SPIROV = 0; //清标志
}
//rf_ce = 0;
//dly(1); //确保延迟5us
//rf_cs = 0;
//dly(1);
dly(100); //确保延迟202us
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -