季紅梅
【摘 要】教育教學(xué)須因材施教,面對(duì)高職學(xué)生群體,應(yīng)運(yùn)用怎樣的教學(xué)方法才能達(dá)到最佳教學(xué)效果呢?根據(jù)自己多年教學(xué)體會(huì),認(rèn)為高職課堂教學(xué),既不能等同于高中教學(xué),也不能完全照搬高校教學(xué)。它必須具有高職的特色,其課堂教學(xué)既要注重知識(shí)性,更要注重趣味性,理論夠用,技能為主,通過(guò)學(xué)生跟著老師做、學(xué)生學(xué)著自己做、理論教學(xué)做總結(jié)的方式,通過(guò)實(shí)踐體會(huì)理解掌握單片機(jī)的功能應(yīng)用技能。
【關(guān)鍵詞】高職教學(xué);ZigBee無(wú)線(xiàn)技術(shù);單片機(jī)數(shù)據(jù)通訊應(yīng)用
1.引言
當(dāng)前各類(lèi)高職技能大賽項(xiàng)目的機(jī)器人控制、非接觸識(shí)別等等科目,單片機(jī)的數(shù)據(jù)通訊應(yīng)用屬于必用項(xiàng)目。如何設(shè)計(jì)數(shù)據(jù)通訊知識(shí)的教學(xué),使得掌握單片機(jī)數(shù)據(jù)采集或者控制所需數(shù)據(jù)傳輸給其他單片機(jī)或者遠(yuǎn)端PC,是必須面對(duì)的科目。
2.數(shù)據(jù)通訊的方法
單片機(jī)的常用數(shù)據(jù)通信主要分為以下類(lèi)型:
類(lèi)型1:串行通訊
使用單片機(jī)的串口接口(Serial Interface),將數(shù)據(jù)逐位順序傳送的過(guò)程稱(chēng)為串口通訊。串口通訊特點(diǎn)是通信線(xiàn)路簡(jiǎn)單,只要一對(duì)傳輸線(xiàn)就可以實(shí)現(xiàn)雙向通信(可以直接利用電話(huà)線(xiàn)作為傳輸線(xiàn)),從而大大降低了成本,但傳送速度較慢。CC2530具有USART0/USART1兩個(gè)串口供用戶(hù)使用,通過(guò)RS232接口線(xiàn)將單片機(jī)的數(shù)據(jù)傳遞到PC機(jī)或接收PC機(jī)發(fā)出的指令。還可以設(shè)計(jì)相應(yīng)線(xiàn)路板,實(shí)現(xiàn)單片機(jī)之間的串口數(shù)據(jù)通訊。
類(lèi)型2:無(wú)線(xiàn)局域網(wǎng)通訊
使用ZigBee無(wú)線(xiàn)技術(shù),CC2530單片機(jī)模塊板可以在0~75m的范圍內(nèi),以IEEE 802.15.4標(biāo)準(zhǔn)的下實(shí)現(xiàn)無(wú)線(xiàn)數(shù)據(jù)收發(fā)功能。一個(gè)ZigBee網(wǎng)絡(luò)最多可以容納254個(gè)從設(shè)備和1個(gè)主設(shè)備。一個(gè)區(qū)域內(nèi)最多可以存在100個(gè)網(wǎng),而且組網(wǎng)靈活,用于實(shí)現(xiàn)單片機(jī)板之間的數(shù)據(jù)通訊。通訊方式可以是一對(duì)一、一對(duì)多、多對(duì)多、級(jí)聯(lián)組網(wǎng)等,用戶(hù)可以設(shè)計(jì)靈活的數(shù)據(jù)協(xié)議來(lái)實(shí)現(xiàn)數(shù)據(jù)通訊。
局域網(wǎng)無(wú)線(xiàn)通訊和串口通訊的靈活組合,可以滿(mǎn)足大多數(shù)用戶(hù)的數(shù)據(jù)交流與控制需求,且結(jié)合其他通訊設(shè)備,方便實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。
3.UART串口通訊設(shè)計(jì)步驟
UART串口通訊實(shí)現(xiàn)步驟為:設(shè)置串口初始化、讀寫(xiě)串口處理等步驟。又根據(jù)數(shù)據(jù)傳輸方向,分為單片機(jī)→PC、PC→單片機(jī)數(shù)據(jù)傳輸?shù)淖鞑煌渲?。在完成初始化串口配置以后,將需要傳輸?shù)臄?shù)據(jù)存入緩存UxDBUF,并且需要等待一定時(shí)間,等待數(shù)據(jù)被接收方取走,發(fā)送數(shù)據(jù)不宜使用發(fā)送中斷(PC實(shí)時(shí)性差,容易亂碼,故使用定時(shí)器T1設(shè)置定時(shí)發(fā)送中斷發(fā)送字符數(shù)據(jù),可以通過(guò)調(diào)試測(cè)試出最佳等待時(shí)間)。接收數(shù)據(jù)則可以使用接收中斷來(lái)實(shí)現(xiàn)數(shù)據(jù)接收(單片機(jī)實(shí)時(shí)性好)。實(shí)驗(yàn)參考代碼如下:
3.1單片機(jī)→PC初始化設(shè)置函數(shù)(使用UART0口,異步通訊模式,波特率為57600)
void initUART01(void)
{ //片內(nèi)外設(shè)引腳位置采用上電復(fù)位默認(rèn)值,即PERCFG寄存器采用默認(rèn)值
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //定義P0 用作串口, P0.2、P0.3、P0.4、P0.5作為片內(nèi)外設(shè)I/O
U0BAUD = 216; U0GCR = 10; //波特率為57600
U0CSR |= 0x80; // 模式選擇UART模式
U0UCR |= 0x80; // 進(jìn)行USART初始化清除
UTX0IF = 0; // 清零UART0 TX發(fā)送中斷標(biāo)志 }
3.2PC→單片機(jī)初始化設(shè)置函數(shù)(使用UART0口,異步通訊模式,波特率為57600)
void initUART02(void)
{ //片內(nèi)外設(shè)引腳位置采用上電復(fù)位默認(rèn)值,即PERCFG寄存器采用默認(rèn)值
PERCFG = 0x00; //位置 1 P0 口
P0SEL = 0x3c; //定義P0 用作串口, P0.2、P0.3、P0.4、P0.5作為片內(nèi)外設(shè)I/O
U0BAUD = 216; U0GCR = 10; //波特率為57600
U0CSR |= 0x80; // 模式選擇UART模式
U0UCR |= 0x80; // 進(jìn)行USART初始化清除
U0CSR |= 0x40; //允許UART0接收數(shù)據(jù)。特別強(qiáng)調(diào)必須在其他配置完成后才能配置,不能和模式選擇一起配置
URX0IF = 0; // 清零UART0 RX接收中斷標(biāo)志 }
3.3發(fā)送功能代碼參考(設(shè)計(jì)定時(shí)中斷,在中斷中定時(shí)發(fā)送,假設(shè)為:0.02s)
void UART0SendByte(unsigned char c) // 發(fā)送一字節(jié)
{ U0DBUF = c; // 將要發(fā)送的1字節(jié)數(shù)據(jù)寫(xiě)入U(xiǎn)0DBUF(串口 0 收發(fā)緩沖器)
while (!UTX0IF); // 等待TX中斷標(biāo)志,即U0DBUF就緒
UTX0IF = 0; // 清零TX中斷標(biāo)志 }
void UART0SendString(unsigned char *str) // UART0發(fā)送一個(gè)字符串
{ while(1)
{ if(*str == ‘\0)
break; // 遇到結(jié)束符,退出
UART0SendByte(*str++); // 發(fā)送一字節(jié) } }
3.4接收功能代碼參考
#pragma vector=URX0_VECTOR //中斷向量表的設(shè)置endprint
__interrupt void URX0_ISR(void)
{ URX0IF = 0;//清中斷標(biāo)志
receive_handler(); //調(diào)用接收數(shù)據(jù)后處理函數(shù)(略)}
3.5定時(shí)發(fā)送中斷設(shè)計(jì)等其他相關(guān)輔助代碼,參見(jiàn)教學(xué)研究二、三
4.無(wú)線(xiàn)局域網(wǎng)通訊設(shè)計(jì)
借助于TI公司提供基于CC2530的軟件代碼BasicRF包,實(shí)現(xiàn)ZigBee無(wú)線(xiàn)通訊十分簡(jiǎn)單。BasicRF是簡(jiǎn)單的無(wú)線(xiàn)點(diǎn)對(duì)點(diǎn)傳輸協(xié)議,可以用來(lái)進(jìn)行無(wú)線(xiàn)設(shè)備數(shù)據(jù)傳輸?shù)娜腴T(mén)學(xué)習(xí)開(kāi)發(fā)相對(duì)簡(jiǎn)單的無(wú)線(xiàn)控制與無(wú)線(xiàn)傳感網(wǎng)絡(luò)。這樣無(wú)需深入了解無(wú)線(xiàn)通訊底層協(xié)議理論(這對(duì)于高職學(xué)生是非常困難的…),只要教會(huì)學(xué)生使用BasicRF包實(shí)現(xiàn)無(wú)限傳輸數(shù)據(jù)的方法即可。教師需要對(duì)BasicRF包的應(yīng)用,合理做出功能上的劃分,設(shè)計(jì)好實(shí)現(xiàn)程序的框架,教授學(xué)生將功能函數(shù)添加到框架的合適的部位,實(shí)現(xiàn)數(shù)據(jù)的傳輸。
4.1根據(jù)TI公司提供基于CC2530的軟件代碼BasicRF包的使用說(shuō)明,進(jìn)行編程環(huán)境的基本配置(略)
4.2初始化
//BasicRF地址設(shè)置:
#define RF_CHANNEL 20 // 頻道 11~26
#define PAN_ID 0x1A5B //網(wǎng)絡(luò)id 0x0000-0xFFFF
#define MY_ADDR 0x1015 //本機(jī)模塊地址 id 0x0000-0xFFFF
#define SEND_ADDR 0xAC3A //發(fā)送地址 0x0000-0xFFFF
//提示:發(fā)送模塊和接收模塊MY_ADDR和SEND_ADDR相反。
//多組同時(shí)實(shí)驗(yàn):RF_CHANNEL / PAN_ID 至少一個(gè)不一樣
//模塊相關(guān)資源初始化
void halBoardInit(void )
//無(wú)線(xiàn)收發(fā)參數(shù)的配置初始化
void ConfigRf_Init(void );
//檢查結(jié)構(gòu)變量配置端口是否成功,返回值成功為SUCCESS 0,失敗為FAILED 1
uint8 basicRfInit(&basicRfConfig)
4.3發(fā)送與接收函數(shù)
//發(fā)送“ZIGBEE TEST \r\n”,13個(gè)字符,成功返回值為0:
uint8 basicRfSendPacket(SEND_ADDR,”ZIGBEE TEST\r\n”,13);
//判斷有無(wú)收到zigbee信號(hào),有為真返回值為1:
uint8 basicRfPacketIsReady();
//接收數(shù)據(jù)放緩存pRxData中,緩沖區(qū)最大長(zhǎng)度為MAX_RECV_BUF_LEN ,返回值是數(shù)據(jù)串長(zhǎng)度
uint8 basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL);
4.4主程序框架(參見(jiàn)圖1)
void main(void)
{ uint16 len = 0;
halBoardInit(); //模塊相關(guān)資源的初始化
ConfigRf_Init(); //無(wú)線(xiàn)收發(fā)參數(shù)的配置初始化
//LED1(綠)、LED2(紅)點(diǎn)亮,參見(jiàn)教學(xué)研究二、三
while(1)
{ len = RecvUartData(); // 接收串口數(shù)據(jù)
if(len > 0)
{
// 綠燈取反,無(wú)線(xiàn)發(fā)送指示(略)
basicRfSendPacket(SEND_ADDR,uRxData,len);
//把串口數(shù)據(jù)通過(guò)zigbee發(fā)送出去}
if(basicRfPacketIsReady()) //查詢(xún)有沒(méi)收到無(wú)線(xiàn)信號(hào)
{ // 紅燈取反,無(wú)線(xiàn)接收指示(略)
len = basicRfReceive(pRxData, MAX_RECV_BUF_LEN, NULL); //接收無(wú)線(xiàn)數(shù)據(jù)
halUartWrite(pRxData,len); //接收到的無(wú)線(xiàn)發(fā)送到串口數(shù)
}}}
說(shuō)明:
⑴根據(jù)需要選擇框架中功能塊,不需要的刪去即可;
⑵收發(fā)模塊使用相同的框架流程,注意收發(fā)地址的對(duì)應(yīng)關(guān)系。
5.數(shù)據(jù)通訊教學(xué)總結(jié)
通過(guò)框架式教學(xué)設(shè)計(jì)的實(shí)踐,學(xué)生基本上能夠完成數(shù)據(jù)通訊功能的設(shè)計(jì),并且能夠自由拓展應(yīng)用,設(shè)計(jì)6組及以上的單片機(jī)組網(wǎng)應(yīng)用項(xiàng)目,并且結(jié)合其他課程知識(shí)點(diǎn),實(shí)現(xiàn)人機(jī)互動(dòng)的PC級(jí)C#平臺(tái)監(jiān)控界面設(shè)計(jì),部分學(xué)生可以實(shí)現(xiàn)手機(jī)遠(yuǎn)程操作平臺(tái)對(duì)單片機(jī)網(wǎng)應(yīng)用的實(shí)時(shí)監(jiān)控。
參考文獻(xiàn):
[1] 姜仲 劉丹 ZigBee技術(shù)與實(shí)訓(xùn)教程[M]北京 清華大學(xué)出版社2014.
[2] 物聯(lián)網(wǎng)無(wú)線(xiàn)傳感網(wǎng)實(shí)訓(xùn)教程[M]北京 新大陸時(shí)代教育科技有限公司2014.
[3] 本書(shū)編委 ZigBee技術(shù)開(kāi)發(fā)-CC2530單片機(jī)原理及應(yīng)用[M]北京 清華大學(xué)出版社2015.
[4] 楊玥 單片機(jī)與接口技術(shù)-基于CC2530的單片機(jī)應(yīng)用[M]北京 清華大學(xué)出版社2017.endprint