季紅梅

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