李東陽
摘 要:介紹了PS/2接口的圖書信息閱讀器的無線收發(fā)模塊的設計,實現了閱讀器終端的無線化。數據發(fā)送模塊以51芯片為主控,控制2.4G無線芯片nRF24L01收發(fā)數據,并通過PS/2接口與閱讀器或上位機進行數據傳輸。程序部分主要涉及對nRF24L01芯片的控制,及PS/2接口數據的解碼和發(fā)送。
關鍵詞:圖書信息閱讀器;PS/2;nRF24L01芯片;51單片機,2.4G
1 信息讀取設備簡介
圖書信息閱讀器可分為一維條碼閱讀器、二維條碼閱讀器和Rfid射頻閱讀器。在圖書館中常見的信息閱讀器是PS/2接口的手持式一維條碼槍,該設備在日常生活中應用十分廣泛,例如圖書管理、超市商品結算、物流快遞查詢、藥品管理、生產過程控制等。一維條碼憑借輸入速度快、成本低等優(yōu)勢在條碼應用領域依然占據霸主地位。在目前的很多高校圖書館中的圖書借閱系統(tǒng),依然使用一維條碼來標記每本圖書。隨著用條形碼符號表示更多資訊的要求與日俱增,二維條碼憑借自身的“資料儲存量大”、“資訊隨著產品走”、“可以傳真影印”、“錯誤糾正能力高”等優(yōu)勢得到了迅速發(fā)展[1]。只有少數高校采用先進的Rfid技術。
信息閱讀器有一個功能就是可以設置信息閱讀完畢后在輸出的數據中包含一個回車,這在實際應用中十分重要,一方面為上位機的軟件提供了人性化的功能,避免工作人員在掃描數據后手動敲擊鍵盤的回車,減輕了工作量;另一方面,為本模塊提供了一個判斷數據是否傳送完畢的標志,當收到回車鍵時表示數據已經傳送完畢可以無線發(fā)送了。
2 數據發(fā)送模塊介紹
數據發(fā)送模塊主要的功能就是把有線傳輸的數據轉為無線傳輸從而達到方便用戶使用的目的,為此該模塊設計為手持式,并采用電池供電。減小整個發(fā)送模塊的功耗也是需要考慮的重要因素之一。該模塊主要使用兩塊芯片,其中一塊是3V的低功耗高速51芯片,該芯片用作主控芯片負責解析PS/2接口數據和控制無線芯片,為了節(jié)省51芯片有限的硬件資源,在解析閱讀器傳送過來的PS/2數據后只保存通碼到數組丟棄斷碼。
另一塊是北歐集成電路公司(Nordic)推出的無線收發(fā)芯片nRF24L01。該芯片在待機情況下的電流為22uA,掉電模式下為900nA,功耗很小很適合設計需要,工作在2.4G赫茲ISM免許可證頻段,在室內傳輸距離可達30~40米。該芯片可以在Enhanced ShockBurst模式下發(fā)送數據,在這種模式下,MCU低速發(fā)送數據到先入先出堆棧,然后以1Mbps高速發(fā)射,減少數據在空中滯留時間,提高了抗干擾性,減小了平均工作電流,從而達到節(jié)能目的。發(fā)送數據時,芯片自動加入字頭和CRC校驗碼,接收數據時自動去除字頭和校驗碼,減輕了編寫程序工作量[2]。
在進行硬件連接時,nRF24L01和51的外圍天線、晶振和復位等電路限于篇幅不在討論。PS/2接口和51芯片連接時,PS/2接口的時鐘線接在主控芯片的P3.3外部中斷1引腳,數據線連接P3.4引腳,由于PS/2接口是集電極開路,連接時需要接上拉電阻。nRF24L01主要通過CE、CSN、SCK、MOSI和MISO這五個引腳和51主控芯片相連,硬件連接十分簡單。
2.1 解碼信息閱讀器通過PS/2接口傳送來的數據
如果對PS/2數據進行解碼,必須對PS/2協(xié)議有所了解,下面對PS/2協(xié)議進行簡單介紹。PS/2協(xié)議是一種雙向同步串行協(xié)議,接口只使用數據線和時鐘線兩條線實現了主機與從設備的通訊,其中數據線和時鐘線都是集電極開路。通訊時總是從設備產生時鐘信號,主機享有通訊控制權,可以在任何時候通過拉低時鐘線來禁止從設備信號的傳輸。PS/2數據以幀為單位傳送,每幀包括11-12位數據,數據格式如下:第一位為起始位總是零,后面緊跟8個數據位,低位在前高位在后,第十位是奇偶校驗位,第十一位為停止位,第十二位是應答位,僅在主機到從設備的通訊中會出現。從設備在時鐘位為高電平時準備好數據位,主機在時鐘的下降沿讀取數據[3]。
對PS/2信息閱讀器傳送的數據進行解析,流程圖如下:
程序部分采用C語言編寫,由于時鐘線接在主控芯片的P3.3外部中斷1引腳,可在程序里設置電平下降沿觸發(fā),即IT1=1[4],下面給出了在中斷里進行解碼的代碼。
void init1()interrupt 2 using 0
{
EX1=0; //關閉中斷
if ((Num > 0) && (Num < 9))
{
//鍵盤數據是由低到高故右移一位
Key_V = Key_V >> 1;
if (Key_Data) Key_V = Key_V|0x80;
}
Num++;
while (!Key_CLK);
if (Num > 10)
{
Num = 0;
BF = 1; //表示解碼完成
keybuf=Key_V;
Key_V =0;
}
EX1=1; //開中斷
}
2.2 整個發(fā)送數據的流程
A、主控芯片解碼圖書條碼閱讀通過PS/2接口傳過來的數據。B、剔除PS/2數據中的以F0開頭的斷碼,并存接收到的通碼到數組中。C、判斷是否是回車的通碼0x5A,如果是就表示PS/2數據已經傳輸完畢可以無線發(fā)送了。D、把負責接收數的nRF24L01據芯片的地址和讀取的PS/2數據按照時序寫入nRF24L01的先入先出堆棧。E、寫CONFIG寄存器,配置數據傳輸率、射頻通道和自動應答等信息,等待發(fā)射。F、把nRF24L01的CE引腳置為高電平并延時至少10us,數據開始高速發(fā)射。G、發(fā)射完成,nRF24L01進入待機模式。
3 數據接收模塊設計
接收模塊一般和電腦相連,整個模塊的供電可由電腦的USB接口提供,不需要考慮節(jié)能細節(jié)。USB口的電壓為5V,無法直接使用,做簡單降壓處理即可。由于無法確定何時收到數據包,因此需要保持nRF24L01芯片為監(jiān)視工作模式。
3.1 接收并發(fā)送數據時的流程
A、設置nRF24L01與發(fā)送模塊相同的發(fā)送地址、數據寬度和射頻通道,并開啟自動應答。B、把nRF24L01的CE引腳置為高電平并延時至少10us。C、130us后,nRF24L01 進入監(jiān)視模式,開始等待數據包的到來。D、接收到數據包后自動移除字頭、CRC校驗,并把RX_DR置位通知主控讀取數據。E、讀取數據后清除STATUS寄存器,保存數據到數組。F、判斷回車鍵的通碼是否到來,如果到來表示這一次無線通訊已經完成。G、通過PS/2向上位機傳送保存在數組中的數據。
在數據發(fā)送過程中,51模擬從機向上位機發(fā)送PS/2數據,流程如下:
C語言程序如下:
void PS2SendChar(unsigned char dat)
{
bit ParityBit; unsigned char i;
ACC=dat;
CY=P;
//計算出奇校驗位
ParityBit=CY?0x00:0x80;
CLSSIGNAL();
CT_KB=0;
EX0=0; //關閉中斷
H_DATA=0;Delay10us();
H_CLK=1;Delay10us();
H_CLK=0;Delay30us();
for(i=0;i<8;i++)//發(fā)送8位數據
{
if(dat&0x01==0x01)
{H_DATA=1;Delay10us();}
else {H_DATA=0;Delay10us();}
dat>>=1;
H_CLK=1;Delay10us();
H_CLK=0;Delay30us();
}
//發(fā)送校驗位
H_DATA=ParityBit;Delay10us();
H_CLK=1;Delay10us();
H_CLK=0;
Delay30us();
H_DATA=1;Delay10us();
//發(fā)送停止位
H_CLK=1;Delay10us();
H_CLK=0;Delay30us();
IE0=0;
//發(fā)送完畢,打開接收中斷
EX0=1;
H_CLK=1;
H_DATA=1;
CT_KB=ON;
Delay30us();
}
4 結束語
本文介紹了2.4G無線圖書信息讀取器收發(fā)模塊的研究和實現過程,其中涉及到51芯片對PS/2數據的解析,2.4G無線數據的收發(fā)等基礎知識。nRF24L01體積小、功耗低,外圍電路的設計簡單,被應用廣泛于無線遙控,無線電腦外設、遙控等領域。此無線收發(fā)模塊體積小便于攜帶,可以廣泛應用于圖書館和超市等領域的手持信息掃描終端,有一定的實用性。
[參考文獻]
[1]二維碼[EB/OL].http://baike.baidu.com/view/886309.htm?fromId=132241.
[2]NRF24L01數據手冊Nordic.
[3]PS/2 Technical Reference Adam Chapweske,2002.
[4]張毅剛.MCS-51單片機原理及應用[M].哈爾濱工業(yè)大學出版社,2004.