【正文】
//如果發(fā)送數(shù)據(jù)長(zhǎng)度為零則發(fā)送數(shù)據(jù)幀尾//合并高低半字節(jié)rsbuf2amp。//取反,使低半字節(jié)變?yōu)榉创a=0x0f。//將高半字節(jié)右移到低半字節(jié)//將要發(fā)送的字節(jié)送到sbuf2//發(fā)送長(zhǎng)度不為零}buf1_length++。//初始化接收的地址{break。state1=0。case 10:sbuf2=sbuf14。//將捕捉數(shù)臨時(shí)存放起來if(F0)++。TL0=0。goto end。interrupt 2{ie_1()。bit receive_ack_iic(void)。void tf_0(void)。unsigned int b[2]。union{////0X02//請(qǐng)求信號(hào)definedefine下面實(shí)例是已知NEC類型遙控器所截獲的波形:遙控器的識(shí)別碼是Address=0xDD20。通過以上對(duì)編碼的分析,可以得出以某種固定格式的“0”和“1”去學(xué)習(xí)紅外,是很有可能不成功的。為了節(jié)省能量,一般情況下,發(fā)射紅外載波的時(shí)間固定,通過改變不發(fā)射載波的時(shí)間來改變占空比。如果達(dá)到這個(gè)速度,以上CPU的速度遠(yuǎn)遠(yuǎn)不夠,并且由于存儲(chǔ)量的加大,數(shù)據(jù)存儲(chǔ)器也遠(yuǎn)遠(yuǎn)不夠用。來源:不詳 0x04//應(yīng)答信號(hào),表示接收數(shù)據(jù)錯(cuò)誤define0xaa//數(shù)據(jù)幀頭define//發(fā)送標(biāo)志,1表示需要發(fā)送或沒發(fā)送完畢,0表示沒有要發(fā)送的數(shù)據(jù)或發(fā)送完畢unsigned char state1,state2。union{unsigned char a[4]。unsigned int data *p2[4]。void read_key(void)。}void tf0(void)interrupt 5{}void rs232(void)//禁止中斷{state1=20。// 將接收狀態(tài)標(biāo)志置為零,重新接收//把NACK信號(hào)存入發(fā)送緩沖里REN=0。}{//將state2置為10準(zhǔn)備發(fā)送下半字節(jié)//將低半字節(jié)反碼左移到高半字節(jié)=0x0f。SBUF=TAIL。EA=1。//開放中斷}00000000000000000000000000000000000000000000000000000000000000000000000000000.。}SBUF=rsbuf2。rsbuf2=4。//將要發(fā)送的字節(jié)送到sbuf2//合并高低半字節(jié)rsbuf2amp。rsbuf2=~sbuf2。//高低半字節(jié)合并0x0f)!=(sbuf1amp。switch(state1){RI=0。//返回繼續(xù)查詢//短脈沖數(shù)加一F0=1。EA=1。void ir_exit(void)。unsigned int b。//union{unsigned char data *p1[2]。//union{unsigned int data *p2[2]。//接收到的數(shù)據(jù)實(shí)際長(zhǎng)度unsigned char xdata *buf2。SCLREAD_KEY0X01//程序復(fù)位define如圖所示是同一按鍵重復(fù)按兩次所得波形,只有第三位是相反的邏輯,其它的位邏輯都一樣。如果按固定格式學(xué)習(xí),一般可以學(xué)到128位(其他程序會(huì)占用一些數(shù)據(jù)存儲(chǔ)器);如果不按固定的格式,需要找出編碼的最小公約數(shù)作為基本單位,則可以學(xué)習(xí)到的位數(shù)大大降低,達(dá)不到實(shí)用的效果。兩種形式編碼的代表分別為NEC和PHILIPS的RCRC6以及將來的RC7。另外,由于空調(diào)的狀態(tài)遠(yuǎn)多于電視、音像,并且沒有一個(gè)標(biāo)準(zhǔn),所以各廠家都按自己的格式去做一個(gè),造成差異更大。所以00