找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3213|回复: 5
打印 上一主题 下一主题
收起左侧

NRF24L01如何配置IRQ接收完(成功接收)数据后,进行外部中断

[复制链接]
跳转到指定楼层
楼主
ID:710522 发表于 2020-4-22 03:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请大侠指示一下怎么配置这个参数。
我现在已经将单片机中的外部中断0已启用了。也已经将IRQ引脚接到了P32脚中。
单片机是STC89C52RC。

现在我的无线模块是能正常通讯的,已经确认是能接收成功。

但是外部中断0中的程序并未执行。

查了一下百度,说要在程序里先启用IRQ中断功能,请问,怎么启用这个配置。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:452950 发表于 2020-4-22 10:02 | 只看该作者
/******************************************************************/
/*                   外部中断初始化                               */
/******************************************************************/
void EX0init(void)
{
IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1;   //使能外部中断
EA = 1;    //开总中断
}
回复

使用道具 举报

板凳
ID:150374 发表于 2020-4-22 10:20 | 只看该作者
1、设置中断寄存器中断触发方式IT
2、开启外部中断EX
3、开启总中断EA

根据51单片机中断管脚 INT0 INT1
编写中断函数
回复

使用道具 举报

地板
ID:710522 发表于 2020-4-22 14:37 | 只看该作者
majianghua999 发表于 2020-4-22 12:22
这个问题首先要先确认一下RF的IRQ是否打开,别用的是扫描方式收发,那么肯定单片机部分是无法有中断的。如 ...
  1. //===== 接收模式 =====
  2.                                         nrf_RxMod();
  3.                                         while_times = 120;                //检测是否接收成功 循环检测?次 【可更改,让接收循环次数大于发送循环次数效果较好】
  4.                                         while(while_times--)         //接收超时或者接收成功,跳出循环 进入发送模式
  5.                                         {
  6.                                                 get_nrf_sta();                        //获取状态标志
  7.                                                 if(RX_DR == 1)                        //接收成功
  8.                                                 {       
  9.                                                         nrf_read(RxBuf);        //接收成功后,将NRF24L01接收到的数据读到单片机的RxBuf数组中。
  10.                                                         break;                                                //跳出循环
  11.                                                 }
  12.                                         }
  13.                                         if(RX_DR == 1)                                //是因为接收到数据,而不是因为超时才跳出循环
  14.                                         {

  15.                                                 wuxian_zt=1;
  16.                                                
  17.                                                 if(RxBuf[0] == 1)               
  18.                                                 {       
  19.                                                         LED2=0;    //点亮LED
  20.                                                        
  21.                                                         go();
  22.                                                 }
  23.                                                 else if(RxBuf[0] == 0)
  24.                                                         LED2=1;
  25.                                                        
  26.                                                        
  27.                                         }
  28.                                         else   
  29.                                         {
  30.                                                 wuxian_zt=0;
  31.                                         }
  32.                                        
复制代码
回复

使用道具 举报

5#
ID:710522 发表于 2020-4-22 14:37 | 只看该作者
我现在用的是if(RX_DR == 1)        这个指令来确认是否接收到数据的。

且是放到主函数,while循环里。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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