基于nRF905的LED屏無(wú)線(xiàn)通信設計
2.3 基于狀態(tài)機的嵌入式軟件設計
2.3.1 系統初始化
系統初始化主要包括:端口、串口、SPI總線(xiàn)、無(wú)線(xiàn)芯片、定時(shí)器和鏈表。狀態(tài)機的初始化包括:初始狀態(tài)、各個(gè)狀態(tài)的初始條件等。根據數據發(fā)送和接收的流程,設計狀態(tài)機的5種狀態(tài):待機狀態(tài)ST_STAND_BY;串口接收狀態(tài)(PC端)ST_UART_RECV;無(wú)線(xiàn)接收狀態(tài)(LED屏端)ST_WAVE_RECV;串口等待狀態(tài)(LED屏端)ST_UART_WAIT;無(wú)線(xiàn)等待狀態(tài)(PC端)ST_WAVE_WAIT。
2.3.2 狀態(tài)機的狀態(tài)觸發(fā)與轉換
上位機在中斷中接收PC機發(fā)送的控制數據,存儲在循環(huán)鏈表中,通過(guò)無(wú)線(xiàn)芯片分包發(fā)送;上位機查詢(xún)無(wú)線(xiàn)芯片接收回復數據,通過(guò)串口發(fā)給PC機上的控制軟件;上位機狀態(tài)觸發(fā)與轉換關(guān)系如圖4所示。下位機查詢(xún)接收無(wú)線(xiàn)模塊發(fā)送的數據,通過(guò)串口轉發(fā)給LED屏控制卡;LED屏控制卡的回復數據,下位機在中斷中接收,通過(guò)無(wú)線(xiàn)發(fā)送;下位機狀態(tài)觸發(fā)與轉換關(guān)系如圖5所示。圖4和圖5共同完成1次數據應答。

2.3.3 定時(shí)器的數據收發(fā)檢測
(1)串口接收數據完的檢測。串口的數據接收是在中斷中完成的,因此在中斷中對定時(shí)器置數,中斷外面減數。波特率為9 600b/s時(shí),中斷間隔小于1 ms。設置定時(shí)器的時(shí)長(cháng)1.5 ms,如果超過(guò)此時(shí)長(cháng),則意味著(zhù)串口數據接收完成。
(2)無(wú)線(xiàn)發(fā)送接收數據的檢測。嵌入式程序中多處用到無(wú)線(xiàn)收發(fā)數據的定時(shí)器檢測,根據應用場(chǎng)合,選擇定時(shí)器的時(shí)長(cháng)。
3 結語(yǔ)
本文對采用芯片nRF905進(jìn)行LED屏的無(wú)線(xiàn)通信進(jìn)行了論證,從通信速率和功耗兩個(gè)方面分析了技術(shù)可行性,設計了串口通信協(xié)議、數據包協(xié)議和無(wú)線(xiàn)通信協(xié)議、論述了基于狀態(tài)機的嵌入式軟件設計,實(shí)現了系統功能。
評論