新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 单片机程序设计中运用事件驱动机制

单片机程序设计中运用事件驱动机制

作者:时间:2012-03-08来源:网络收藏

1 传统程序开发的不足

在传统的程序中,通常是以“过程”和“操作”为中心的结构,程序按规定的过程顺序地执行,与外设的连接一般采用中断方式,在中断服务程序中完成外设的全部处理工作,主程序一般是初始化系统并等待中断的发生。这种结构成熟、易于理解,但有如下不足:

(1)受性能的限制,容易造成系统对其它中断的响应变得迟缓,特别是对于中断源较多、中断处理耗时较多的系统(如:LED显示、键盘扫描等);

(2)中断服务程序过长,在中断服务期间系统无法响应同级的中断;

(3)可能导致代码重入,增大堆栈开销,造成难以预料的结果;

(4)程序调试时,花在各模块定时协调方面的时间、精力随系统的复杂程序大幅增加。

如果在编写单片机程序时,引入Windows程序中的机制,把中断响应与事件处理程序分离,中断服务程序的任务只是产生一个中断发生的标志,而事件处理则由处理程序来完成,主程序则负责判断标志和调度处理程序。这样,可大幅缩短中断服务程序的长度,减少断服务程序的耗时,提高系统对多中断的响应能力,从而较好地解决上述矛盾。

2 Windows的机制

在Windosw 系统中,程序的设计围绕来进行。当对象有相关的事件发生时(如按下鼠标键),对象产生一条特定的标识事件发生的消息,消息被送入消息队列,或不进入队列而直接发送给处理对象,主程序负责组织消息队列,将消息发送给相应的处理程序,使相应的处理程序执行相应的动作,做完相应的处理后将控制权交还给主程序。

在这种机制中,对象的请求仅仅是向队列中添加相应的消息,耗时的处理则被分离给处理函数。这种结构的程序中各功能模块界限分明,便于扩充,能充分利用CPU的处理能力,使系统对外界响应准确而及时。

3 事件驱动的单片机

与Windows 系统相比,单片机的资源非常有限,因此,单片机程序中的事件驱动机制只能采取一种简化的方式。当某个中断发生时,中断服务程序设置相应的标志,不同的标导代表不同的中断发生的消息,而主程序不断地判别这些标志,以决定启动哪一个处理函数。相应的处理函数被启动处理完相关的任务后,清除此标志,然后把控制权交还给主程序。采用这种机制,可合理地利用有限资源,使程序调试的工作量大幅下降。对于延时、定时处理(如LED显示、键盘扫描等),更可方便地使用一定时器来完成延时、定时的任务,从而把CPU从这种耗时的任务中解放出来,确保系统对多中断有足够的响应能力。

本文以一IC卡读写机为例,说明事件驱动机制在单片机中的具体应用。

3.1 硬件结构

本系统以ATMEL公司的89C51为核心(如图1)。89C51价格低廉,性能较好,片内有4KB 的可擦写程序存储器,可满足本系统的要求。为简化硬件结构及系统能耗,键盘采用软件扫描的矩阵键盘。LED显示采用段位动态扫描,在任一时刻LED中最多只有一段被点亮。具体是在位选信号送某位LED的公共极时,每隔一个时间片依次输出该位LED的段码(含小数点),输出完成一位后,再逐闪输出下一位。从第一位至第N位LED依次分成8×N个时间片循环扫描显示。串口UART作为系统与外部数据通信的通道,IC卡的读写由MCU模拟I2C协议来实现。

3.2 事件驱动机制的单片机

中断申请标志

在系统中定义一个可位寻址的单元,在此把它命名为Message_Flag,用来记录描述中断事件发生的情况。各位的定义如下:

*Message_Flag中某位为1表示当前有相应的事件发生,为0则当有没有相应的事件发生。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭