用了好几天时间把发送调好,可是接收怎么也调不好,求指导啊
NRF24L01肯定是好的
发送部分的mcu是15L204EA 每次发送后STATUS=0X2E FIFO_STATUS=0X11; 寄存器配置是 EN_AA =0X00;
EN_RXADDR=0X01; SETUP_RETR=0X00;自动无限循环重发
接收部分是89c52 贴程序啊
void main(void)
{
unsigned char tf =0;
init_io();
init_lcd();
LED1 = 0;
LED2 = 0;
Delay(6000);
LED1 = 1;
LED2 = 1;
while(1)
{
KEY2=1;
KEY1=1;
while(KEY2==0||KEY1 ==0)
{
IRQ=1;
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(KEY1 ==0)
{
TxBuf[0] = 0xAA ;
}
else
if(KEY2 ==0 )
{
TxBuf[0] = 0x55 ;
}
nRF24L01_TxPacket(TxBuf);
mark_tx();
tf = 1;
} //以上是发送部分 正常
if(tf)
{
tf=0;
SetRX_Mode(); //接收模式
IRQ=1;
while(IRQ==0);
inerDelay_us(400);
}
IRQ=1;
if(IRQ==0) //现在就是卡在这里了 IRQ永远不等于0,
{
LED2=0;
sta=SPI_Read(STATUS); //读取状态寄存器
display(); //1602用16进制显示状态寄存器
SPI_RW_Reg(WRITE_REG+STATUS,0xff); //清楚状态寄存器
if(sta&0x40) //判断状态寄存器是不是的RX_DR是不是置1
{
SPI_Read_Buf(RD_RX_PLOAD,RxBuf,TX_PLOAD_WIDTH); //数据读到RxBuf
if( RxBuf[0]==0xAA)
{
LED2=0;
Delay(6000);
LED2=1;
}
else
if( RxBuf[0]==0x55)
{
LED2=0;
Delay(6000);
LED2=1;
}
RxBuf[0]=0;
}
else //如果Rx_DR没有置1 则清除所有状态和FLUSH
{
CLR_ALL();
SetRX_Mode();
IRQ=1;
while(IRQ==0);
}
}
display();
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
这个IRQ是检测有没有收到信息,如果收到会置0
我修改掉这个也收不到信息
一周热门 更多>