|
刚仔细分析了下左图代码,这段代码是用于315M433MHz无线接收模块解码的,代码写得非常好,可适用于各种单片机,值得收藏。 这段代码同其它常见代码比,占用mcu实践极短,几乎是0耗时,非常方便的嵌入到各种项目中,对项目的其它模块无任何影响。缺点是需要使用外中断或引脚变动中断+定时器中断,全局变量也多了几个。 初学者逛论坛,应该多收集这类优秀代码,并分析理解。 |
datouyuan 发表于 2022-7-9 17:18 这方面实测可以了。。感谢大佬. 就是应广的引脚不能直接判断,需要迂回下 while (1) { if(RF){ RF_TEMP = 1; }else{ RF_TEMP = 0; } if(RF_TEMP != RF_LV){ //RF不等于RF_LV,表示发生了跳变。 RF_LV=RF_TEMP; //RF_LV=0表示为下降沿 RF_LV=1表示为上升沿 RF_Receive; } } |
lkc8210 发表于 2022-7-9 22:33 我也怀疑过是否因为主程序执行时间过长,然后导致时间线出错。然后我搞了个例子,主循环里面什么都做,就只执行这函数,然后一样的问题。我就怀疑是不是我判断的条件和中断双边沿触发的对不上,而不是时间线 |
MCU_FANS 发表于 2022-7-9 18:34 因为函数是在main里面循环的。如果RF=0的时候,时间有900us. 那么timer_250us 就一直清0 ,无法计算时间。和中断触发有差异了 |
MCU_FANS 发表于 2022-7-9 18:34 思路是用读IO的值来替换,电平改变的时候执行一次,然后开启计数器算时间,否则波形解出来不对,然后我加了各种判断。把我自己给绕晕了。。。 |
datouyuan 发表于 2022-7-9 17:18 看了下,发现搞错了。原谅我左右不分。尴尬 左右是示例代码(中断触发)。右边是我的转换的普通引脚的 RF_LV 我本来是用来标志,是想让电平刚改变时执行一次,后面电平相同的时间不再执行这里面的代码. 大佬,get到我的点了,我改下试试先。感谢建议 |
Y_G_G 发表于 2022-7-8 23:28 应广的确实是如你所说的这样.。我刚刚好工作需要/. |
|
要留意主循环的周期要少于信号电平保持时间的1/3 如信号中低电平时间最短为250us 那么主循环时间就应少于83us 否则会掉侦 |
用读IO的方式代替用边沿中断,只需要读到IO跟原来不一样,然后执行应广的例程即可:
|
|
我也没用过应广的。不会应广的语法。 我发现右图代码是有些问题。 假设左图的代码正常。 假设右图中的变量RF_LV为RF的暂存值。
|
|
应广的没法指导 一是应广好像都是OTP的,工作中用不到的话,几乎没人学,烧录器贵上天,没法验证 二是应广用的不是标准C,迷你C估计学的人不多 |