APP下载

高职单片机教学研究二

2017-10-31季红梅

大陆桥视野·下 2017年11期
关键词:高职教学

季红梅

【摘 要】教育教学须因材施教,面对高职学生群体,应运用怎样的教学方法才能达到最佳教学效果呢?根据自己多年教学体会,认为高职课堂教学,既不能等同于高中教学,也不能完全照搬高校教学。它必须具有高职的特色,其课堂教学既要注重知识性,更要注重趣味性,理论够用,技能为主,通过学生跟着老师做、学生学着自己做、理论教学做总结的方式,通过实践体会理解掌握单片机的功能应用技能。

【关键词】高职教学;单片机应用;中断应用

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

猜你喜欢

高职教学
试论任务驱动与PBL教学法在高职生物化学教学中的应用
网络语言对高职语文教学的冲击探讨
高职电厂热能动力装置专业课程体系的设计与实践
实例研究微课程模式下的高职教学做一体化教学模式
浅谈民办高职教学管理体系存在问题与解决方案
浅谈高职计算机教学中智能手机的实践应用
《汽车底盘》理实一体化教学模式的探索
浅论高职课堂教学中的创新教育
浅谈影视艺术课程在高职教学中的连贯性