最近需要用到433M的單片機解碼,上網搜了一下。大部分的程序都是基于定時器定時檢測。感覺邏輯不夠嚴謹。對于新手理解起來也比較困難。
我首先開了一個us級的定時器,持續計數。不需要打開中斷。
然后配置好對應的接收芯片的管腳。配置為外部中斷。觸發方式為上升沿,下降沿都觸發。
在外部中斷函數里面,記錄當前定時器的計數值,然后清零計數器。
定義一個狀態機
state = 0時:默認狀態,檢測是否為高電平。如果為高電平代表為上升沿,判斷同步信號。
state = 1時:檢測是否為低電平,如果為低電平,表示為下降沿,此時記錄的時間為高電平的持續時間。判斷是否符合同步信號的高電平時間要求。符合進入下一狀態
state = 2時:檢測管腳是否為高電平,如果為高電平,表示為上升沿,此時記錄的時間為低電平持續時間。判斷是否符合同步信號的低電平時間要求。符合進入接收狀態。不符合,回到初始狀態。
以此類推....具體可以看單片機程序