void main()
{
nRF24L01_Set_TX_Mode(0);//接收
USART_Init();
//timer0Init();
while(1)
{
order=Check_Rec();
}
}
void timer0() interrupt 1 using 1
{
//order=Check_Rec();
count++;
if(count==20)count=0;
}
uchar Check_Rec()
{
uchar status;
uchar RX_Buffer[6];
sta=SPI_R_byte(READ_REG+STATUS);
if(RX_DR)
{
CE=0;
SPI_R_DBuffer(RD_RX_PLOAD,RX_Buffer,RX_PLOAD_WIDTH);
SendDate(sta);//串口发送一个字节数据
SPI_W_Reg(WRITE_REG+STATUS,0xff);
CSN=0;
SPI_W_Reg(FLUSH_RX,0xff);//SPI写寄存器一字节函数,reg:寄存器地址,value:一字节(值)
CSN=1;
CE=1;
}
return status;
}
我用一款宏晶新出的单片机,51内核的,测试nrf24l01无线通信模块, 按键控制的发送模块,每按下一次就发送一次,
1. 当我把order=Check_Rec(); 放在定时器中断里面去查询是否接收到数据的时候,
SendDate(sta);发送给串口的数据为 0x40 4E 4E 4E 4E 4E 4E 4E 4E 4E 4E........................................(0x4e为不正常值)(只发送了一次的结果)
2. 当我把order=Check_Rec(); 放在主函数查询是否接收到数据的时候,
SendDate(sta);发送给串口的数据为 0x40(正常值)(只发送了一次的结果)
我已经通过SPI_W_Reg(WRITE_REG+STATUS,0xff);把接收标志位给清除了,为什么每次进入中断里都能进入
if(RX_DR)
{ 这里...}
中断时间为70ms
更多回帖