乙個遙控解碼程式說明實際NEC碼過程

2021-05-27 18:10:51 字數 2322 閱讀 6879

#define wd_end           (5u+1u)  //    5ms

#define rm_oftm          60u   //   20ms

#define rm_oftm_r     100u  //   100ms

/*以下的時序值都經過特殊處理*/

#define rc_header0           (13300000ul/rc_clk) 

#define rc_header1           (13700000ul/rc_clk) 

#define rc_repeat0            (11050000ul/rc_clk) 

#define rc_repeat1            (11450000ul/rc_clk) 

#define rc_code1                (2250000ul/rc_clk)  

#define rc_code1_gosa   ( 200000ul/rc_clk) 

#define rc_code0                (1125000ul/rc_clk)  

#define rc_code0_gosa    ( 100000ul/rc_clk)  

#define rc_code_0_1        (2000000ul/rc_clk) //2 ms 

對以上定義補充說明:程式中rc_clk是 1185ul,這是因為分頻運算後1/27m×32=1.185(週期乘以mcu位數,注意單位跟m對應的是us)。這是表示乙個clk是對應1.185微秒,由於遙控計時器是對rclk進行計數,所以要有乙個轉換,m×rclk(對應的時間)=13.3ms,即m=13.3m/rclk=13.3×1000us/1.185us得對應的參考值。

/*定**碼所需的標誌*/

static u32 inputdata;                            //轉儲資料

static u8 rcv_header = wrong;        //解出頭碼標誌

static u8 rcv_repeat = wrong;        //解出重發標誌

static u8 bitcount;                                //位計數器

static u8 rcofftimer;                          //遙控發碼的剩餘時間

u8 onecodetime; 

void remocon_initial (void)  

#pragma  interrupt remocon_edge         //邊沿中斷觸發函式,由電平跳變即執行

void remocon_edge (void)

else if( (rc_repeat0 <= pls_cnt) && (pls_cnt <= rc_repeat1) )

else if( rcv_header == true ) //頭碼判斷出來之後

bitcount++;             //位計數器加1     

rcofftimer = rm_oftm;             // rcofftimer的作用很奇特,其實在每解出一//個位後,該值被重置。當解出最後乙個bit後,該值才不再改變,被後//面的                                //1ms處理函式處理消耗完剩下的時間,再集中判斷處理。該值不一//定很準,因為跟之前的01數目有關係,所以只能提供大概值。}}

onecodetime = wd_end; //一次解碼過程完成,做個標記值,供後面消耗時間再//判斷     }}

void remocon_1ms (void)               //該函式處在乙個1ms的控制台中,迴圈執行。其中的兩個子///過程乙個用來處理單發,乙個處理重發。}} 

bitcount  = 0;   //不管有沒有正確解出資料,在一次完整的發出資料後,要//清空bitcount和rcv_header,表示當前該次解碼結束,如果<32,無效忽略,//是一種容錯機制

rcv_header = wrong;

}if( rcofftimer != 0 ) //用於消耗掉剩餘時間

else  //如果時間耗完後,rcv_repeat仍然0,說明沒有連按,清rcdata}}

}//此處有誤

需要注意的是,nec的大體過程是上面,但在時延上(不一定是那些時間表示01),資料位個數上(不一定是32位)。需要作些特殊處理。if•••else•••和if •••else if•••的差別,一般情況下兩者是可以通用的,但後者有個缺點是沒有出口,一旦出現兩個都不符合的值出現,將沒有任何子程式段處理,在編譯時會警告某些後面用到的引數在子程式段中沒有初始化。

python的乙個編譯碼錯誤

python的乙個編譯碼錯誤 發表於2012 10 24由latlontude 1 出錯的 a u test b 這些一看就 c s s a,b traceback most recent call last file line 1,in unicodedecodeerror ascii codec...

在乙個程式中啟動另外乙個程式

最近剛剛開始工作,發現在學校學習的那些基本上知識打打基礎而已,在實際的專案運作中根本就沒用。革命尚未成功,通知仍需努力啊 嘿嘿 上正題 因為我們需要做乙個類似於監控的系統,這樣的話就涉及到多個程式需要同時執行,並且需要有乙個程式 去控制另外乙個程式,之前沒有做過,也沒見過,不過還好,有一同事之前做過...

乙個托盤程式

unit mainunit inte ce uses windows,messages,sysutils,classes,graphics,controls,forms,dialogs,menus,shellapi,extctrls const icon id 1 mi iconevent wm u...