找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7224|回复: 2
收起左侧

中断方式实现nRF24L01无线数据接收

[复制链接]
ID:24072 发表于 2010-6-1 22:44 | 显示全部楼层 |阅读模式

hi

 

当前在用nRF24L01进行无线数据通信的解决方案中,在接收方是通过无限循环来接收数据的,这样无疑会降低程序的运行效率,增大最终系统的功耗。

 

能不能将nRF24L01接收端改为中断出发方式,当有数据产生中断触发时,在运行接收程序,接收数据。插入P3.2那根线应该就是中断源,不知我分析得对不对?还有就是把无线接收程序写为中断服务程序是否可行?

回复

使用道具 举报

ID:1 发表于 2010-6-2 00:32 | 显示全部楼层

   完全可以,用中断来唤醒,然后用中断函数来接受数据,接受完毕后再让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); //休眠
}
你可参考一下这种方式 来修改原来的程序.
回复

使用道具 举报

ID:27770 发表于 2011-1-12 13:27 | 显示全部楼层

能不能将nRF24L01接收端改为中断出发方式-----触发方式!

不管你用什么方式,千万注意一个关键问题:

无线电接收是无时无刻的现象,不管是不是你发射的.-------就是只要你的接收电路一旦开始工作,不管是不是发射也工作了,都会接收到无数多的无线电信号.---你如果使用中断,也会不停进入中断的!

接收是否正确,实际是依靠你程序的判断来决定是否接收有效.-----不停中断,不停否认!

所以啊!中断方式和轮询方式,都要有间隔时间,否则其它子程序就不能运行了,或者很少机会运行了!

这也绝非 nRF24L01 所有,其它无线数据传输都会遇见这个问题.

你有手机吧?它就不停接到信号,只不过不是你的号码就忽略了!

仅供参考!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表