标题: NRF24L01如何配置IRQ接收完(成功接收)数据后,进行外部中断 [打印本页]

作者: JF.y    时间: 2020-4-22 03:02
标题: NRF24L01如何配置IRQ接收完(成功接收)数据后,进行外部中断
请大侠指示一下怎么配置这个参数。
我现在已经将单片机中的外部中断0已启用了。也已经将IRQ引脚接到了P32脚中。
单片机是STC89C52RC。

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

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

查了一下百度,说要在程序里先启用IRQ中断功能,请问,怎么启用这个配置。

作者: xxpp2011    时间: 2020-4-22 10:02
/******************************************************************/
/*                   外部中断初始化                               */
/******************************************************************/
void EX0init(void)
{
IT0 = 1;   //指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1;   //使能外部中断
EA = 1;    //开总中断
}

作者: 小石头123    时间: 2020-4-22 10:20
1、设置中断寄存器中断触发方式IT
2、开启外部中断EX
3、开启总中断EA

根据51单片机中断管脚 INT0 INT1
编写中断函数
作者: JF.y    时间: 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.                                        
复制代码

作者: JF.y    时间: 2020-4-22 14:37
我现在用的是if(RX_DR == 1)        这个指令来确认是否接收到数据的。

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




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1