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