|
發布時間: 2022-7-8 16:40
正文摘要:右邊為例程的,但是是邊沿觸發中斷。我這硬件的是是普通引腳沒法使用。于是改參考例子,改主程序循環。 但是解出來的值不同,求指點 |
|
剛仔細分析了下左圖代碼,這段代碼是用于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估計學的人不多 |