|
最近需要用到433M的單片機(jī)解碼,上網(wǎng)搜了一下。大部分的程序都是基于定時(shí)器定時(shí)檢測。感覺邏輯不夠嚴(yán)謹(jǐn)。對于新手理解起來也比較困難。
我首先開了一個(gè)us級的定時(shí)器,持續(xù)計(jì)數(shù)。不需要打開中斷。
然后配置好對應(yīng)的接收芯片的管腳。配置為外部中斷。觸發(fā)方式為上升沿,下降沿都觸發(fā)。
在外部中斷函數(shù)里面,記錄當(dāng)前定時(shí)器的計(jì)數(shù)值,然后清零計(jì)數(shù)器。
定義一個(gè)狀態(tài)機(jī)
state = 0時(shí):默認(rèn)狀態(tài),檢測是否為高電平。如果為高電平代表為上升沿,判斷同步信號。
state = 1時(shí):檢測是否為低電平,如果為低電平,表示為下降沿,此時(shí)記錄的時(shí)間為高電平的持續(xù)時(shí)間。判斷是否符合同步信號的高電平時(shí)間要求。符合進(jìn)入下一狀態(tài)
state = 2時(shí):檢測管腳是否為高電平,如果為高電平,表示為上升沿,此時(shí)記錄的時(shí)間為低電平持續(xù)時(shí)間。判斷是否符合同步信號的低電平時(shí)間要求。符合進(jìn)入接收狀態(tài)。不符合,回到初始狀態(tài)。
以此類推....具體可以看單片機(jī)程序
- #define SYNC_H_MIN 0 //同步信號高電平持續(xù)時(shí)間 最低范圍
- #define SYNC_H_MAX 600 //同步信號高電平持續(xù)時(shí)間 最高范圍
- #define SYNC_L_MIN 8000 //同步信號低電平持續(xù)時(shí)間的最小值
- #define SYNC_L_MAX 10997 //同步信號高電平持續(xù)時(shí)間的最大值,符合這個(gè)范圍都判定有效。
- #define DAT1_H_MIN 800 //數(shù)據(jù)1的高電平持續(xù)時(shí)間最小值
- #define DAT1_H_MAX 1063 //數(shù)據(jù)1的高電平持續(xù)時(shí)間最大值
- #define DAT1_L_MIN 220 //數(shù)據(jù)1的低電平持續(xù)時(shí)間最小值
- #define DAT1_L_MAX 400 //數(shù)據(jù)1的低電平持續(xù)時(shí)間最大值
- #define DAT0_H_MIN 220
- #define DAT0_H_MAX 400
- #define DAT0_L_MIN 800
- #define DAT0_L_MAX 1063
復(fù)制代碼
|
評分
-
查看全部評分
|