基于AT89C51芯片的多任务驱动设计
2014-11-25文辉余丽萍
文辉 余丽萍
【摘 要】文章以单片机芯片AT89C51为依托,利用高级编程C语言设计出8位单片机的多任务处理的方法。介绍了其设计的原理,从单任务入手逐步分析多任务处理的具体过程,从而实现多任务并发执行的功能。
【关键词】AT89C51;C语言;多任务
传统的单片机程序一般采用单任务机制。所谓"单任务机制"是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。由于程序只能按顺序依次执行,缺乏灵活性。多任务机制则可以宏观并行(微观上是串行)地"同時"执行多个任务。笔者设计的这种多任务机制,不需使用汇编,采用常用的C语言编写,按照所给出的参数,添加自己的任务代码,就可以实现多任务的并发执行。
1、单片机多任务机制的工作流程
本文采用美国 ATMEL 公司生产的 MCS51 系列兼容芯片,在通常的单片 AT89C51应用情况下,程序被设计成一段无限循环的代码while(1),即构成一个连续执行的单任务系统。
2、多任务并发设计
假设要控制一个LED灯的闪烁,其实现过程为:点亮LED,延时,关闭LED,延时,依次循环下去。但是,如果需要控制两个LED灯的闪烁,一个是每一秒闪烁一次,另一个没0.5秒闪烁一次,这就需要考虑将处理器的时间进行分割,不同的任务获得一定时间片段来执行程序,当这个时间片到期了,就中断转而由另外任务来获得处理器的资源。本文所设计的方法为:采用一个自定义的进程控制器(变量stp)将其分成四个部分。在LEDLight()函数中实现的伪代码如下。
void LEDLight(vopid){
switch(stp)
{case 0:亮灯;stp++;break;
case 1:延时;stp++;break;
case 2:灭灯;stp++;break;
case 3:延时;stp=0;break;}}
每次进入LEDLight这个函数只执行了其中的一个小部分。接下来,对其中的每个小部分进行改进为某个小的任务,而每个小任务又分成多个小部分。这样,就形成了如下图1所示的多任务机制。
图1 多任务结构程序流程图
由于每个任务的执行时间不尽相同,因此引入定时器来处理不同的延时。其工作原理是程序判定任务的记时器是否满足条件而决定任务是否继续执行。因此上面的程序就改为:
void LEDLight(void){
static unsigned int stp=0;
switch(stp)
{case 0:亮灯;stp++;定时器初始化;break;
case 1:if(定时器未到)break;stp++;break;
case 2:灭灯;stp++;定时器初始化;break;
case 3: if(定时器未到)break;;stp=0;break;}}
定时器就是用变量做累加或者递减,当所设定的值自增或自减到了一定数量后(即消耗掉一定的时间)则作为一种程序的判定,如果定时器未到,则转为下一个任务执行,如果定时器到了,就开始执行本地的任务。为了使软件定时器更精准,就可以对硬件定时器的溢出次数计数。那软件定时器的定时时间就是硬件定时器溢出时间的整数倍。因此程序改为:
unsigned char Timer[2]; /*两个软件定时器*/
void Timere0Irq(void) interrupt 1
{Timer[0]++;Timer[1]++;}
void LEDLight(void){
static unsigned int stp=0;
switch(stp)
{case 0:亮灯;stp++;Timer [i]=0;break;
case 1:if(Timer[i] case 2:灭灯;stp++;Timer[i]=0;break; case 3: if(Timer[i] 3、结束语 实现多任务操作除了本文中所介绍的方法之外还有其他的方法,如ARM开发常用的?C/OS-II、RTX-51TINY等。但是RTX-51TINY必须采用Keil公司的C51编译器,?C/OS-II则对芯片的RAM空间要求比较高,51系列的芯片内存空间有限无法装入此?C/OS-II系统。 文章所采用的方法其结构清晰,不需使用汇编语言,所用代码较少,易于理解有效的提高了单片机处理器的效率。 作者简介: 文辉(1979-),男,汉族,江西萍乡人,江西信息应用职业技术学院计算机技术系网络教研室教师,研究方向:嵌入式系统。 余丽萍(1985-),女,汉族,江西进贤人,南昌航空大学自动化学院06级信号与信息处理硕士研究生,研究方向:图像处理与模式识别。 参考文献: [1] 阿占文等.单片机多任务操作的多功能采集卡设计[J].自动化仪表.2014(1). [2]郭天祥.新概念 51 单片机 C 语言教程: 入门、提高、开发、拓展全攻略[M]. 北京: 电子工业出版社.2009. [3] 钱宜平.基于单片机应用系统的多任务程序结构设计[J].无锡职业技术学院学报.2014(3).