季紅梅
【摘 要】教育教學(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é);單片機(jī)應(yīng)用;中斷應(yīng)用
1.引言
當(dāng)前各類高職技能大賽項(xiàng)目的機(jī)器人控制、非接觸識(shí)別等等科目,單片機(jī)的中斷應(yīng)用屬于必用項(xiàng)目。如何設(shè)計(jì)中斷知識(shí)的教學(xué),使得學(xué)生學(xué)得不累,搞得明白,用的順手,就是作為授課老師研究的問(wèn)題。
2.中斷原理
首先,如何導(dǎo)入中斷概念?設(shè)計(jì)以生活中的案例引導(dǎo)理解。
如果我們想要同時(shí)做燒一壺水與看電腦播放電視劇二件事,請(qǐng)?jiān)O(shè)計(jì)一下實(shí)施方案…
方案1:先燒開(kāi)水,再看電視劇
方案2:同時(shí)進(jìn)行,但是可能忘記燒水,導(dǎo)致事故
方案3:中斷機(jī)制,同時(shí)進(jìn)行,使用帶響的水壺,水燒開(kāi)時(shí)中斷看電視劇,可以暫停,然后處理好開(kāi)水之后再重新繼續(xù)看電視劇…
前面學(xué)習(xí)的定時(shí)器案例里面用按鍵切換幾種LED表示的方式,有時(shí)反應(yīng)及時(shí)有時(shí)會(huì)反應(yīng)不及時(shí),原因是主程序循環(huán)沒(méi)有及時(shí)到達(dá)按鍵檢測(cè)的位置,所以需要等待。如果采用中斷方式,按鍵按下即可響應(yīng)。
其次,需要了解中斷事件的特點(diǎn)。中斷程序主要處理及時(shí)性要求高的事件,所以應(yīng)該設(shè)計(jì)的短平快。否則就失去了中斷應(yīng)用應(yīng)有的效果。
其三,中斷設(shè)計(jì)理念:
將主程序中的一部分功能,提取出來(lái),放到中斷處理程序中。在主程序中初始化時(shí)初次開(kāi)放中斷…
條件滿足觸發(fā)進(jìn)入中斷處理程序,進(jìn)入立即關(guān)閉中斷(初學(xué)者不建議使用多次中斷嵌套);中斷處理程序中主要完成一些計(jì)數(shù)判斷功能,然后根據(jù)判斷信息,設(shè)置標(biāo)志或計(jì)數(shù),退出時(shí)重新開(kāi)放中斷。中斷程序設(shè)計(jì)盡量短平快…
主程序循環(huán)檢查標(biāo)志條件進(jìn)行相對(duì)應(yīng)的處理…
3.中斷方式
中斷分為硬中斷和軟中斷,硬中斷就是有硬件操作導(dǎo)致觸發(fā)的中斷,比如說(shuō)按鍵按下去產(chǎn)生一個(gè)信號(hào)觸發(fā)中斷程序工作;軟中斷是有程序在特定的條件下發(fā)出信號(hào)觸發(fā)中斷,比如說(shuō)定時(shí)器計(jì)數(shù)達(dá)到上限溢出引起中斷。
在前節(jié)定時(shí)器的學(xué)習(xí)基礎(chǔ),理解了中斷的理念,設(shè)計(jì)中斷程序就變得非常輕松步驟化了:
①中斷的初始化
②開(kāi)中斷(多數(shù)放在初始化里,也可以放在需要的任何位置,根據(jù)需要開(kāi)放或關(guān)閉)
③中斷服務(wù)程序框架(中斷名稱查中斷向量地址表)
#pragma vector=中斷名稱_VECTOR
__interrupt void EINT_ISR(void)
{ EA = 0; // 關(guān)閉全局中斷
//中斷處理功能程序start
……中斷功能實(shí)現(xiàn)程序
//中斷處理功能程序end
EA = 1; // 重新開(kāi)放全局中斷 }
4.中斷綜合應(yīng)用案例
①硬中斷案例1(按鍵外中斷),按鍵控制LED跑馬燈開(kāi)始或停止
#include "ioCC2530.h" // 引用頭文件,包含對(duì)CC2530的寄存器、中斷向量等的定義
//定義led燈端口和按鍵
…(參見(jiàn)高職單片機(jī)教學(xué)研究一)
unsigned int KeyTouchtimes = 0 ; //定義變量記錄按鍵次數(shù)
unsigned int Keyflag = 0 ; //定義變量記錄按鍵單2次,單次啟動(dòng),雙次停止
/* 函數(shù)名稱:init 功能:初始化系統(tǒng)IO,外中斷寄存器 */
void init()
{ //LED燈端口和按鍵初始化(參見(jiàn)高職單片機(jī)教學(xué)研究一)
PICTL &= ~0x02; //配置P1口的中斷邊沿為上升沿產(chǎn)生中斷
P1IEN |= 0x04; //使能P1.2中斷
IEN2 |= 0x10; //使能P1口中斷
EA = 1; //使能全局中斷 }
/* 函數(shù)名稱:EINT_ISR 功能:外部中斷服務(wù)函數(shù) */
#pragma vector=P1INT_VECTOR
__interrupt void EINT_ISR(void)
{ EA = 0; // 關(guān)閉全局中斷
//中斷處理功能程序start
if(P1IFG & 0x04) // 若是P1.2產(chǎn)生的中斷
{
/* 等待用戶釋放按鍵,并消抖 */
while(SW1 == 0); //低電平有效
delay(100); //延時(shí)程序略
while(SW1 == 0);
if(Keyflag==0) //根據(jù)按鍵,設(shè)計(jì)單雙次標(biāo)志
{Keyflag=1; }
else
{Keyflag=0;}
P1IFG &= ~0x04; // 清除P1.2中斷標(biāo)志
}
//中斷處理功能程序end
EA = 1; // 重新開(kāi)放全局中斷 }
/* 函數(shù)名稱:main 功能:main函數(shù)入口 */
void main(void)
{ init(); //調(diào)用初始化函數(shù)endprint
while(1)
{ …//根據(jù)標(biāo)志變量Keyflag,計(jì)數(shù)變量KeyTouchtimes,設(shè)計(jì)LED1-4跑馬燈功能 }
}
②軟中斷案例2(定時(shí)器觸發(fā)中斷)T1、T3分別控制LED1、LED2 閃爍
//預(yù)定義添加
unsigned int counter=0; //統(tǒng)計(jì)T1溢出次數(shù)
unsigned int counter1=0; //統(tǒng)計(jì)T3溢出次數(shù)
unsigned int flag0=0; //標(biāo)志0
unsigned int flag1=1; //標(biāo)志1
//初始化定時(shí)器T1、T3
T1CTL = 0x05; // T1 通道 0,8 分頻; 自動(dòng)重載模式(0x0000->0xffff);
T1IE=1; //定時(shí)器1使能
T3CTL = 0x7C; // T3 通道 0,8 分頻; 自動(dòng)重載模式(0x0000->0xffff);
T3IE = 1; //定時(shí)器3使能
//定時(shí)器T1中斷服務(wù)功能程序
counter++;
if(counter>=30) //約0.5s (32/8)*10^6/65535/30=2Hz,參見(jiàn)文章一
{counter=0; flag0=1;}
T1IF=0; //清0 T1中斷標(biāo)志位,容許下次中斷觸發(fā)
//定時(shí)器T3中斷服務(wù)功能程序
counter1++;
if(counter1>=3840) //30*256/2=3840 約0.25s ,加減計(jì)數(shù)次數(shù),調(diào)整閃爍頻率
{counter1=0; flag1=1;}
T3IF=0; //清0 T3中斷標(biāo)志位,容許下次中斷觸發(fā)
//函數(shù)名稱:main
void main(void)
{ init(); //調(diào)用初始化函數(shù)
while(1)
{
If(flag0==1)
{LED1=!LED1;flag0=0;}
If(flag1==1)
{LED2=!LED2;flag1=0;}
}
}
5.中斷教學(xué)總結(jié)
根據(jù)到目前獲得的教學(xué)經(jīng)驗(yàn),高職學(xué)生一般不愿意主動(dòng)思考,多數(shù)學(xué)生雖具備較好的思考理解能力,但是缺少總結(jié)歸納的能力,并且學(xué)的快忘得快,具有一定的惰性。所以如何設(shè)計(jì)好教學(xué)模塊,通過(guò)合適的案例,將知識(shí)點(diǎn)像積木一樣一塊一塊搭建整個(gè)知識(shí)體系,后面反復(fù)使用前面學(xué)習(xí)的知識(shí),既能強(qiáng)化前面的內(nèi)容,又能合理導(dǎo)入后面的知識(shí),一層層上臺(tái)階,在不知不覺(jué)中,由淺入深,逐漸增加學(xué)習(xí)難度。開(kāi)始的時(shí)候盡量用淺顯的案例,結(jié)合生活案例實(shí)踐理解,使得學(xué)生還沒(méi)有畏難情緒生成就被逐步引導(dǎo)到了學(xué)習(xí)高點(diǎn)。對(duì)單片機(jī)應(yīng)用這樣的專業(yè)課程,學(xué)生學(xué)的進(jìn)、有興趣,達(dá)到教學(xué)目的,同時(shí)也是教師的欣慰。
參考文獻(xiàn):
[1]姜仲 劉丹 ZigBee技術(shù)與實(shí)訓(xùn)教程[M]北京 清華大學(xué)出版社 2014.
[2]物聯(lián)網(wǎng)無(wú)線傳感網(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