采用MC13192的無線傳感器網(wǎng)絡節(jié)點設計方案
SSPDR = (uint8)(u8Addr 0x3f);/*寫入要訪問的6位地址,設置寫*/
while((SSPSR 0x01) == 0);/*等待發(fā)送棧為空*/
while((SSPSR 0x10) != 0);/*等待狀態(tài)寄存器空閑*/
u8TempValue = SSPDR;/*清空地址中的內(nèi)容*/
SSPDR = (uint8)(u16Content >> 8);/*寫高字節(jié)*/
while((SSPSR 0x01) == 0);
while((SSPSR 0x10) != 0);
u8TempValue = SSPDR;
SSPDR = (uint8)(u16Content 0x00FF);/*寫低字節(jié)*/
while((SSPSR 0x01) == 0);
while((SSPSR 0x10) != 0);
u8TempValue = SSPDR;
IO1SET = MC13192_CE;/*禁止MC13192 SPI*/
MC13192RestoreInterrupts(); /*恢復MC13192中斷狀態(tài)*/
}
uint16 SPIDrvRead (uint8 u8Addr) {/*SPI讀函數(shù)*/
uint8 u8TempValue;
uint16 u16ret;
SPIClearRecieveStatReg(); /*清狀態(tài)寄存器*/
SPIClearRecieveDataReg();/*清接收數(shù)據(jù)寄存器*/
MC13192DisableInterrupts(); /*禁止MC13192產(chǎn)生中斷請求*/
IO1CLR = MC13192_CE;/*使能MC13192 SPI */
SSPDR = (uint8)((u8Addr 0x3f) | 0x80);/*寫入要訪問的6位地址,設置讀*/
while((SSPSR 0x01) == 0); /*等待發(fā)送棧為空*/
while((SSPSR 0x10) != 0);/*等待狀態(tài)控制器空閑*/
u8TempValue = SSPDR;
SSPDR = (uint8)0xFF;
while((SSPSR 0x01) == 0);
while((SSPSR 0x10) != 0);
u8TempValue = SSPDR;/*存放高字節(jié)數(shù)據(jù)*/
SSPDR = (uint8)0xFF;
while((SSPSR 0x01) == 0);
while((SSPSR 0x10) != 0);
u16ret = SSPDR;/*存放低字節(jié)數(shù)據(jù)*/
u16ret=u16ret+u8TempValue*256;/*存放一個完整字*/
IO1SET = MC13192_CE;/*禁止MC13192 SPI*/
MC13192RestoreInterrupts();/*恢復MC13192中斷狀態(tài)*/
return u16ret;
}本文引用地址:http://www.ex-cimer.com/article/161711.htm
圖4 發(fā)送程序流程 圖5 接收程序流程
3.3 實驗結果
圖6為硬件節(jié)點實物圖。該電路板經(jīng)過仿真調(diào)試應用良好,可以實現(xiàn)多個節(jié)點間的通信;在實驗電路板上設置了一個LED,可以通過燈的閃爍來指示信息接收的質(zhì)量以及接收的成??;能夠利用串行接口與計算機進行通信,并且可以通過JTAG接口電路進行程序的固化。初步的實驗表明: 通信距離基本達到預期目標,在空曠地帶以最大功率傳輸,可以以較小誤碼率傳輸60多米。采用1節(jié)電壓為3.6 V、容量為2 100 mAh的干電池供電時,節(jié)點連續(xù)工作的時間為3~4天。如果使得該節(jié)點始終工作在超低功耗的工作狀態(tài),則其工作時間可以超過1年,能夠滿足特定應用場合對電池壽命的要求。
圖6 硬件節(jié)點實物圖
結語
經(jīng)實驗證明,以MC13192和LPC2138為核心構造的無線傳感器網(wǎng)絡節(jié)點,在功耗、傳輸距離以及無線傳輸速率等性能上都能滿足應用要求。在此方案基礎之上,通過移植ZigBee協(xié)議棧,可以構建ZigBee網(wǎng)絡的網(wǎng)絡層、應用層及安全層,再配以滿足特定要求的傳感器便可實現(xiàn)具體的應用網(wǎng)絡。
評論