hi
当前在用nRF24L01进行无线数据通信的解决方案中,在接收方是通过无限循环来接收数据的,这样无疑会降低程序的运行效率,增大最终系统的功耗。
能不能将nRF24L01接收端改为中断出发方式,当有数据产生中断触发时,在运行接收程序,接收数据。插入P3.2那根线应该就是中断源,不知我分析得对不对?还有就是把无线接收程序写为中断服务程序是否可行?
完全可以,用中断来唤醒,然后用中断函数来接受数据,接受完毕后再让24l01 进入休眠模式.最大限度的降低功耗,只不过网上这方面的例子很少
void ISR_int1(void) interrupt 0 //外部中断0 { sta=nRF24L01_SPI_Read(STATUS); //读寄存器STATUS状态 if(RX_DR){ //接收数据产生中断 nRF24L01_SPI_Read_Buf(RD_RX_PLOAD,rx_buf,REBACK_WIDTH);//从FIFO中读接收数据 flag_r=1; //接收到数据标志 } if(TX_DS){ //发送完成 flag_t=1; //发送完成标志 } if(MAX_RT){ //没有应答 nRF24L01_SPI_RW_Reg(FLUSH_TX,0); //清发送FIFO ? flag_e=1; //出错标志 } // 清RX_DR 或 TX_DS 或 MAX_RT 中断标志位 nRF24L01_SPI_RW_Reg(WRITE_REG+STATUS,sta); nRF24L01_Sleep_Mode(0); //休眠 }
你可参考一下这种方式 来修改原来的程序.
能不能将nRF24L01接收端改为中断出发方式-----触发方式!
不管你用什么方式,千万注意一个关键问题:
无线电接收是无时无刻的现象,不管是不是你发射的.-------就是只要你的接收电路一旦开始工作,不管是不是发射也工作了,都会接收到无数多的无线电信号.---你如果使用中断,也会不停进入中断的!
接收是否正确,实际是依靠你程序的判断来决定是否接收有效.-----不停中断,不停否认!
所以啊!中断方式和轮询方式,都要有间隔时间,否则其它子程序就不能运行了,或者很少机会运行了!
这也绝非 nRF24L01 所有,其它无线数据传输都会遇见这个问题.
你有手机吧?它就不停接到信号,只不过不是你的号码就忽略了!
仅供参考!
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |