热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

0引言51单片机在微型智能控制系统中应用很广,随着人们对控制系统的要求不断提高,51单片机的功能局限越发明显。特别是51系列单片机不具有实时多任务支持功能,大大限制其在控制系统中的进一步

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端口并未全部利用,可以将剩余的I/O端口作为外部传感器的状态输入端(单片机电源为+5V),同时让传感器输出端通过反相器统一接在单片机的外部中断请求引脚,任何一个传感器都可以向单片机发出中断请求。在中断后,通过程序扫描输入端口状态,确定是哪一个设备要求中断,从而切换到相应的任务。在没有中断请求时,系统按任务的产生顺序执行。在此有二问题需要解决:

(1)若单片机I/O端口不多余时,怎样处理多个中断请求。采用多路编码的方式可以缓解单片机端口不足的问题。例如芯片74LS148,是一块8-3编码器,完成八路信号编码到三位二进制信号,只要将三位输出信号端接入单片机I/O端口就可以通过程序判定八路外部中断。其电路图如图二所示。以此类推,可以满足更多传感器或设备与单片机相连。

(2)外部中断的优先级如何处理。由于实际的微型控制系统中,单片机连接的外部设备比较固定,也即各外部设备中断的优先级比较固定,完全可以用较简单的优先级表法实现优先级的确定。只要在内存中预置一片数据区,对应表示外部设备的中断优先级,那么就可以通过检查表的方式获得优先级别,从而判断任务的切换方向。进一步可以通过程序动态的修改长期等待和长期运行的任务对应的优先级,所有任务都有机会获得CPU。


3 二种策略的比较

上述第一种策略的主要特点是:各任务在任务调度程序控制下有条不紊的执行,每个任务在给定的时间片内完全占有CPU,可以完成既定子任务,同时又在时间片结束时让出CPU,以便其他任务执行。只要恰当地选取时间片,就可以很好地协调多个任务连续执行,比较适合于批处理系统和任务既定控制系统。第二种策略的主要特点是:实时性很好,可以实现系统与外界交互,及时地调度相应任务。因为,在受外界影响很大的实时控制系统中,更多的需要考虑任务的优先级和外部传感器的状态,使用外部中断切换任务是比较理想的。而且使用了先中断再查询的策略,大大提高了查询速度和准确性,同时对多路控制也有较好的支持。

4 结束

现在有单任务机制的51单片机系统中实现多任务机制,仅仅在升级软件(即ROM芯片中程序的重新烧写)和增加,更改少许硬件电路的条件下,就可以使控制系统支持多任务处理和控制,不仅升级成本低,而且大大延续系统的寿命和扩充系统的功能,具有较高的使用价值。


推荐阅读
  • 本文介绍了基于c语言的mcs51单片机定时器计数器的应用教程,包括定时器的设置和计数方法,以及中断函数的使用。同时介绍了定时器应用的举例,包括定时器中断函数的编写和频率值的计算方法。主函数中设置了T0模式和T1计数的初值,并开启了T0和T1的中断,最后启动了CPU中断。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 关于CMS收集器的知识介绍和优缺点分析
    本文介绍了CMS收集器的概念、运行过程和优缺点,并解释了垃圾回收器的作用和实践。CMS收集器是一种基于标记-清除算法的垃圾回收器,适用于互联网站和B/S系统等对响应速度和停顿时间有较高要求的应用。同时,还提供了其他垃圾回收器的参考资料。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
author-avatar
sjf66355555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有