微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机多任务机制的实现策略

51单片机多任务机制的实现策略

时间:11-19 来源:互联网 点击:
0引言

51单片机在微型智能控制系统中应用很广,随着人们对控制系统的要求不断提高,51单片机的功能局限越发明显。特别是51系列单片机不具有实时多任务支持功能,大大限制其在控制系统中的进一步发展。而多任务恰恰是现在操作系统的突出特点,将多任务机制引入51单片机系统,可以大大提高先有单片机系统的工作效率,满足多任务要求。

1多任务机制在51单片机上的实现原理

多任务要求在同一时间内执行多个任务,如果只有一个处理,计算机并不是真的在给定时间段内运行多个程序,而是按时间片在各个程序间飞快切换,由于求欢非常快,所以就有了在同一时间内运行多个程序的错觉了。

就操作系统的特点来看,多任务系统不外乎两种方式:协同式和抢占式。在一个协同式多任务系统中,每个运行的程序都要负责释放CPU控制权以便别的程序能有机会运行,不管是显式地(Explicitly)还是隐式地(Implicitly)交出控制权。当一个程序因执行为某个目的而安排的一个特殊的系统指令(如程序对磁盘绝对读写指令)时,称它 显式地放弃控制权;当它因为执行某条系统指令,而该指令在执行时又会放弃CPU的控制权(如操作系统虚拟内存技术的页面切换)时,称它隐式地放弃了控制权。

在抢占式多任务系统中,操作系统必须具有从任何一个运行的程序上取走控制权和使另一个程序获得控制权的能力。一个抢占式系统下运行的应用程序不用担心独占系统,因为会合理地给每个运行的任务分配时间片。将这种系统称作抢占式系统是因为它不管在所给时间块内会发生什么事,都抢占运行程序的控制权。

51单片机本身是单任务工作的,即程序只能按单一的线索顺序执行,一个任务完成之后(除非中断),才能进行下一个任务。但是,51单片机内提供了T0和T1两个16位定时/计数器,若系统时钟为12MHz,那么计时器最长可计时65.536ms,最短为1us。也即通过对定时器工作模式进行设置,可以进行1us-65.536ms的定时器工作模式进行设置,可以进行1us-65.536ms的定时中断。如果把定时中断用作时间片段的分配,完全可以实现多个任务分时轮换执行。同时,单片机还提供INT0与INT1两个外部中断(可通过8259扩充多级中断)和P0,P1,P2三个可编程的I/O端口,与定时器配合下,完全可以实现具有优先权判别的多任务控制。

2实现策略

2.1通过定时器分配时间片实现多任务轮换执行

由于单片机内两个定时器可以同时工作,只要在一个定时器内开启/关闭另一个定时器,定时器交替工作,就可以实现更长时间的定时。两个16位定时器在不断增加外部计数单元的情况下,理论上可以实现1us-4.29之间的定时。但是由于中断和初始化设置等需要消耗单片机时间,所以单纯使用定时器产生的最长时间片比理论值短一些。单片机内部任务轮换来说已经足够了。

假设多个任务控制着多个设备,可以让单片机的I/O口连接相应的设备。每个任务分配一定的时间片,在时间片内占用CPU,进行运算和控制外部设备,多个任务之间实现轮换,其主流程如图下:


若用T0产生时间片,时间片中断内计时间片数,T1统计任务外不信号的频率,可供控制系统参考。部分汇编源代码如下:

org 00h;

jmp main

org 0bh

jmp tim0

org 1bh

jmp tim1

main:

. . .

mov tcon,#00000000b

mov tmod,#01010001b

mov th0,#high(65536-10000);10000微妙定时(时间片)

mov tl0,#low(65536-10000)

setb et0

setb et1

setb tr0

setb tr1

mov 40h,#100 ;中断次数即时间片数存入40h;以此1秒计时为例,定时器t0执行100次定时中断

tim0:

push acc

push psw

mov th0,#high(65536-1000);重复产生时间片

mov tl0,#low(65536-10000)

djnz 40h,tim0c

clr trl

nop

lcall xxxx;调用任务调度程序

mov 40h,#100;重置时间片数

mov 42h,th1;保存t1的统计结果

mov 41h,tl1

setb tr1

tim0c:

pop psw

pop acc

reti

;用t1做统计某任务外部信号频率

tim1:

clr tr1

...;其它调度程序

setb trl

reti

2.2通过外部中断后扫描端口来切换任务

如果单片机外接较多的传感器,任务的切换需要考虑外部传感器状态的时候,就需要通过单片机相应外部中断的方式切换任务。但是,51单片机只是提供了两个外部中断,在实际的智能仪器中完全不够用,只有扩充中断口。最常用的中断扩展芯片是8259A,其是一块功能很强的肯编程中断控制器,可将多个外部中断请求连接在单片机的外部中断请求引脚INTR,并且有多种工作方式和中断优先级排序机制。这样处理势必增加电路的成本和复杂度,对改造先有单片机任务机制的单片机控制系统是很不利的。

考虑到很多微型控制系统中单片机的I/O端口并未全部利用,可以将剩

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top