irda1.0協議是一種利用紅外通訊的無線傳輸協議,可以很好的解決一些可攜式裝置與主機之間通訊的問題,具有攜帶方便,低功耗,成本低,傳輸可靠等特點,缺點是傳輸距離較短,速率較慢最高支援(115200波特率)。
此處的irda1.0協議並不是遙控器編譯碼協議,兩者之間編譯碼方式不一樣。國外很多微控制器都自帶了串列埠轉irda1.0的編譯碼功能,但最近因為換方案,原因找了很多國內微控制器都不帶irda編譯碼功能,所以在這裡為大家提供乙個io口模擬irda的方案。(原理和串列埠一樣)
微控制器使用的是 復旦微的fm33g0xx微控制器,紅外收發器為 tfbs4652,波特率為9600。
描述了普通串列埠調製解調 irda之後的波形,irda的 tx引腳預設是低電平(普通串列埠為高電平)所以這裡需要將io口初始化為低電平,irda 傳送引腳輸出3/16寬度的脈衝訊號表示低電平。rx引腳預設為高電平,時序與tx一樣。
irda tx引腳低電平的表示方法:
將乙個bit位的時間分為16份,先傳送7個週期低電平,然後將io拉高,保持3個週期後將io拉低,保持6個時鐘之後繼續傳送下乙個bit。直到乙個位元組(起始位+資料位+停止位 = 10 bit)資料傳送完成.
irda tx引腳高電平表示方式:
保持104us (1bit)低電平。
irda 3/16 調製
串列埠傳送0時,紅外輸出3/16寬度的脈衝。串列埠傳送1時,無脈衝。
乙個位元組包含乙個起始位(低電平),8位資料位,1位停止位。(共10位)
有兩種方式:1,定時器計時傳送,2,軟體延時傳送。(兩種方式均可,需遵守下列時序)本文採用軟體延時方式。
irda資料傳送:
資料傳送 採用定時器中斷傳送資料,9600波特率我們可以知道 乙個位時間為1/9600 = 104us左右。
104/16 = 6.5us (乙個clk時間,具體根據微控制器頻率調整可以5 - 7us之間)。
當有資料傳送時 開啟定時器,先傳送起始位,在傳送資料位,最後停止位。
傳送資料1時將io口拉低保持104us,
傳送資料0時,先將io拉低7個clk(45us),在拉高保持3個clk(19us),然後拉低保持6個clk(39)。(16個clk 104us)
傳送資料**(硬菜)如下:
void
io_uart_sendonebyte
(uc ucdata)
/* 停止位 */
else
if(io_uart.uctxbitcnt ==9)
/* 資料位 */
else
/* 傳送資料0 */
if(ucbit ==0)
/* 傳送資料1 */
else
if(io_uart.uctxbitcnt ==10)
}}
接下來講資料接收:
接收資料相對簡單,用到微控制器io口外部中斷加 定時器
資料接收io預設為高電平,資料0為3 / 16 脈衝。
接受步驟:
乙個位元組接收緩衝,預設賦值 0xff,設定定時器100us中斷,io口當檢測到下降沿中斷時 (起始位),開啟定時器 並開始資料接收,當接收到資料0時,把當前接收位置0,定時器中斷8週期之後1位元組資料接收結束:
接收**如下:
/* io uart rx start interrupt */
void
gpio_irqhandler
(void
)else
if(io_uart.ucrxstart)
io_uart.ucrxbitcnt =0;
io_uart.ucrxstart =0;
etimx_etxcr_cen_setable
(etim1, disable)
;//停止定時器
io_uart.usrxtimebase =0;
}}}}
定時器中斷**:
void
etim1_irqhandler
(void
) io_uart.ucrxbitcnt =0;
io_uart.ucrxstart =0;
etimx_etxcr_cen_setable
(etim1, disable)
;//停止定時器
io_uart.usrxtimebase =0;
}}}}
微控制器擴充套件IO口
微控制器如何擴充套件io口?首先我們先講講為什麼要擴充套件io口。在我們使用51微控制器的時候,有時候會出現io口不夠用的情況。比如鍵盤!這個時候io口的資源就十分有限了。按鍵是我們常用的器件,做某些東西的時候又不能缺少按鍵。如果乙個按鍵對應乙個io口,那麼可想而知,按鍵所佔的io口的數量是很大的。...
微控制器IO口詳解
一 三態 微控制器io的三態是指 高電平 1 低電平 0 高組態 z 二 高阻態 高阻i是一種電路狀態.既不是高電平,也不是低電平,以高阻態對下級電路輸出,下級電路什麼影響也沒有.高阻態的io電平高低,隨下級電路變化而變,下級為高,它就是高,下級是低它就是低.可以看成是懸空狀態.所以,高阻狀態的作用...
微控制器I O口控制實驗
實驗內容 利用p1口做輸出口,接八隻發光二極體,編寫程式是發光二極體迴圈點亮或者具有一定的花樣。1.第乙個發光二極體以間隔200ms閃爍 2.8個發光二極體由上至下間隔,1s流動,其中每個管亮500ms,滅500ms,亮時蜂鳴器響,滅時關閉蜂鳴器,一直重複下去 3.8個發光二極體來回流動,每個管亮1...