OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4818|回复: 2

nrf24l01接收函数放在定时器中断里出问题了?

[复制链接]

47

主题

255

帖子

1

精华

高级会员

Rank: 4

积分
641
金钱
641
注册时间
2012-11-3
在线时间
6 小时
发表于 2013-11-14 14:44:54 | 显示全部楼层 |阅读模式
<p>                                         
                                                                            void main()<br />
{<br />
&nbsp;&nbsp;&nbsp; nRF24L01_Set_TX_Mode(0);//接收<br />
&nbsp;&nbsp;&nbsp; USART_Init();<br />
&nbsp;&nbsp;&nbsp; //Timer0Init();<br />
&nbsp;&nbsp;&nbsp; while(1)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order<span style="background-color:#e53333;"><span style="background-color:#ffffff;">=</span><span style="background-color:#ffffff;">Check_</span><span style="background-color:#ffffff;">Rec();&nbsp;&nbsp;</span></span><br />
&nbsp;&nbsp;&nbsp; }&nbsp;<br />
}</p>
<p>void timer0() interrupt 1 using 1<br />
{<br />
&nbsp;&nbsp;&nbsp; //<span style="background-color:#e53333;"><span style="background-color:#e53333;">order</span>=Che</span><span style="background-color:#e53333;">ck_Rec();</span><br />
&nbsp;&nbsp;&nbsp; count++;<br />
&nbsp;&nbsp;&nbsp; if(count==20)count=0;<br />
}<br />
<br />
</p>
<p>uchar Check_Rec()<br />
{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; uchar status;<br />
&nbsp;&nbsp;&nbsp; uchar RX_Buffer[6]; <br />
&nbsp;&nbsp; &nbsp;sta=SPI_R_byte(READ_REG+STATUS);<br />
&nbsp;&nbsp;&nbsp; if(RX_DR) <br />
&nbsp; &nbsp;{&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CE=0;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SPI_R_DBuffer(RD_RX_PLOAD,RX_Buffer,RX_PLOAD_WIDTH);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color:#e53333;">SendDate</span><span style="background-color:#ff9900;"><span style="background-color:#ffffff;"><span style="background-color:#e53333;">(sta</span><span style="background-color:#e53333;">);</span>//串口发送一个字节数据</span></span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SPI_W_Reg(WRITE_REG+STATUS,0xff);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CSN=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SPI_W_Reg(FLUSH_RX,0xff);//SPI写寄存器一字节函数,reg:寄存器地址,value:一字节(值)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CSN=1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CE=1; <br />
&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; return status;<br />
}</p>
<p>我用一款宏晶新出的单片机,51内核的,测试nrf24l01无线通信模块,&nbsp; 按键控制的发送模块,每按下一次就发送一次,<br />
</p>
<p>1.&nbsp;&nbsp;&nbsp; 当我把order=Check_Rec();&nbsp;&nbsp;放在定时器中断里面去查询是否接收到数据的时候, </p>
<span style="background-color:#e53333;"><p></p>
<span style="background-color:#ffffff;"><p>SendDate(sta);发送给串口的数据为 0x40 4E 4E 4E 4E 4E 4E 4E 4E 4E 4E........................................(0x4e为不正常值)(只发送了一次的结果)<br />
</p>
<p>2.&nbsp;&nbsp; 当我把order=Check_Rec();&nbsp;&nbsp;放在主函数查询是否接收到数据的时候, </p>
<span style="background-color:#e53333;"><p></p>
<span style="background-color:#ffffff;"><p>SendDate(sta);发送给串口的数据为 0x40(正常值)(只发送了一次的结果)<br />
</p>
<p><br />
<span style="background-color:#e53333;">我已经通过</span><span style="background-color:#e53333;">SPI_W_Reg(WRITE_REG+STATUS,0xff);把接收标志位给清除了,为什么每次进入中断里都能进入<br />
</span><span style="background-color:#e53333;">&nbsp;if(RX_DR)</span></p>
<span style="background-color:#e53333;"><p><span style="background-color:#e53333;">&nbsp;{&nbsp;这里...}<br />
</span></p>
<p>&nbsp;</p>
<span style="background-color:#e53333;"><p><br />
&nbsp;</p>
<p>中断时间为70ms</p>
</span><p><br />
<br />
</p>
<p><br />
&nbsp;</p>
<p>&nbsp;</p>
</span></span><p>&nbsp;</p>
</span><p>&nbsp;</p>
<p>&nbsp;</p>
</span></span>
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-11-14 21:02:15 | 显示全部楼层
回复 支持 反对

使用道具 举报

47

主题

255

帖子

1

精华

高级会员

Rank: 4

积分
641
金钱
641
注册时间
2012-11-3
在线时间
6 小时
 楼主| 发表于 2013-11-15 00:35:37 | 显示全部楼层
回复【2楼】正点原子:
<br>---------------------------------
<br>呵呵,又仿真了一下,结果呢是这样,SPI_W_Reg(FLUSH_RX,0xff);这句话&nbsp;&nbsp;里面的0xff传进函数里了,但是不知道怎么了,这个值到最后变成了0x0f,写给无线里的寄存器了,所以接收中断标志位没有清除,才出现以上的错误,&nbsp;&nbsp;&nbsp;可是为什么&nbsp;&nbsp;Check_Rec()&nbsp;放在主函数里&nbsp;那个0xff的形参就在传递的过程中不会改变呢?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为什么传递传递着值就变了呢?&nbsp;&nbsp;&nbsp;换了好几个版本的kile,还是这样。用pic测试了,没有问题!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 19:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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