|
本帖最后由 人人學(xué)會(huì)單片機(jī) 于 2020-12-25 12:37 編輯
紅外解碼過程:
Ray_Read_bit_timer 103us自增變量
Ray_Read_bit_count 保存位置編號(hào)
Ray_bit_timer_Buffer[33] 33字節(jié)數(shù)組
Ray_Flag 保存標(biāo)志
Ray_Read_ok 允許分析長短
(1)、按下遙控器,單片機(jī)就會(huì)有下降沿中斷。啟動(dòng)定時(shí)器TR0=1;
(2)、定時(shí)器從0開始增加到255溢出,需要時(shí)間103us。
(3)、產(chǎn)生定時(shí)器中斷。中斷里面變量Ray_Read_bit_timer增加1。
(4)、在下降沿的中斷服務(wù),判斷這個(gè)時(shí)候Ray_Read_bit_timer * 103us,是不是大于11.5ms 。
(5)、如果大于11.5,肯定大于9ms,認(rèn)為這是引導(dǎo)碼。否則 判斷為數(shù)據(jù)信號(hào)。
(6)、如果是引導(dǎo)碼,就把Ray_Read_bit_count等于0; 否則 增加一。Ray_Flag=1;
(7)、根據(jù)count的值,把Ray_Read_bit_timer的長度值,保存到數(shù)組Ray_bit_timer_Buffer[33]對(duì)應(yīng)的位置;
(8)、Ray_Read_bit_timer先保存到數(shù)組,再刪除,然后會(huì)自己增加。它就是下一個(gè)數(shù)據(jù)長度。
(9)、遙控器的下一位數(shù)據(jù),就會(huì)有下一個(gè)下降沿。重復(fù)上面的(3)、(4)、(5)、(6)、(7)。
(10)、直到Ray_Read_bit_count大于33,已經(jīng)接收完整的NEC協(xié)議數(shù)據(jù)!Ray_Read_ok=1;開始分析。Ray_Flag=0排除干擾。
(11)、關(guān)閉定時(shí)器,然后判斷Ray_bit_timer_Buffer[]里面的時(shí)間長短,長的為1,短的為0.每8個(gè)時(shí)間就表示一個(gè)字節(jié)!四個(gè)字節(jié)。
(12)、判斷新解碼的值是不是和原來的值一樣,如果是一樣的那就連按自加,如果不相等都寫255表示按鍵更新。
|
-
|