资料介绍
经过这几天做的程序,和以前做电子钟时的感悟,现在对单片机的整个程序结构做一下总结。相信这个总结是很有必要的,在组织大型复杂程序结构时需要有一个正确的理论指导。
感觉这种程序结构的很多想法和操作系统非常像,但是毕竟没学过操作系统,有些表述可能不准确,欢迎批评指正。首先介绍一下任务的概念,main函数最后是一个死循环,它就是一个任务,是整个系统最基础的任务。除main函数的主循环无条件执行外,其实每一个进程和任务都是一个有条件跳出的循环,当这个任务没有完成时就会一直在这个循环里,当任务完成了就会从循环跳出,结束这个任务。当然也有一些简单的任务没有循环,就是一些顺序代码执行完了就结束,也可以认为它是一个简单的任务。
其实所谓的任务在单片机里本质上也就是一个函数,只不过这个函数可能“没那么容易结束”,需要达到一定的目的才会结束,把这样的函数称作“任务”。如果要完成的是一个很简单的功能,我们可以把这个功能的一小段代码直接放到主循环里,单片机所有的精力都会放在这段代码上(暂不考虑中断)。但是如果程序结构比较复杂,有多种任务可能会处理,主循环可以调用其它的任务函数而转到其它任务,但是一旦跳转到其它任务里,主循环和其它任务都不会得到执行。所以有这么一个特点:由主循环调用的任务都只能单独地运行,进入一个任务,就不能处理其它任务。对于比较大型复杂的系统,main函数的主循环里根本不放要实际处理的代码,而是把所有任务函数归到一起,根据选择进入相应的任务函数,当处理完该任务之后又会回到主循环,由主循环再次分配任务。此时主循环的作用就是调配任务(当然用来调配任务的主循环本身也是一个 最基本的任务),而在被调配的任务里面可能还会再次被该任务调配的子任务。既然主循环用来调配任务,那什么时候该进入什么任务呢?
1、 顺序调用。这是最简单的了,几个任务按顺序进行。像飞思卡尔智能车的程序就是这种结构,先进行传感器扫描 - 再进行转向角计算 - 再进行最大速度计算 - 再进行速度控制,就这几个任务不断重复。虽然在主循环里只是简单调用一下函数,而被调用的任务函数可能很复杂,比如转向角计算这个函数,对它支持函数专门写出一个c文件,而这个文件的代码量甚至比main函数所在文件的代码量都要大。
2、 可能各个任务之间存在逻辑关系,在各个任务里面直接指定下一个要进入的任务。比如电子钟里面的模式切换,1602从一个界面进入到另一个界面都是由按键控制的。如:在时间界面按下设置键进入到设置界面,按下返回键就进入到logo界面。这一个个界面也就是任务函数,只不过这个任务函数不会自动跳出,而是根据按键情况决定是否跳出、并通知主循环要跳到哪。(每个界面里也会有选择地对其它进程提供的信息进行处理,比如时间界面就会对时间累加进程所提供的时间信息进行显示,同时也会对按键扫描进程提供的按键序号进行处理;而logo界面只会对按键信息进行响应,忽略时间进程提供的时间,但是时间进程仍然在运行,不然时间岂不是不准了。 这些进程都是由定时器进行的,在后面会说。)
再如红外遥控的小车,在执行完一个动作之后都会回到ActionNum=0(不执行任何动作)的状态,把主进程释放,可以执行其它类的任务或者进入空闲状态。
3、 由定时器分配,整个系统按定时器的节拍运行。
电子钟就是这种结构非常典型的例子。由于没用时钟芯片,采用的是8位自动填装定时器每隔200us一次中断来计时的(很准哦),除计时和日期计算以外,要处理的任务还有:1602显示、按键扫描、温度采集和后来添加的电源管理(控制电池充放电)。下面就来讨论一下在时间显示界面里需要做的这么几个任务(时间显示界面本身就是由main函数的主循环调配的一个子任务):
- 基于89C51单片机的定时器源程序 7次下载
- STC15单片机实战项目软件开发第二讲 - LED闪烁(定时器,面向对象程序结构)
- 51单片机——定时器
- 使用用单片机定时器设计门铃的程序和工程文件免费下载 4次下载
- 使用单片机实现定时器的程序免费下载 6次下载
- 使用单片机实现定时器的程序代码免费下载
- 51单片机的定时器C语言程序免费下载 6次下载
- 使用51单片机定时器控制LED闪烁的程序免费下载
- 单片机定时器的程序免费下载 28次下载
- 使用单片机的定时器设计60S秒表的实验资料电路图和程序免费下载 12次下载
- 使用51单片机的定时器进行计数实例的程序免费下载
- PIC单片机定时器的外设中断的使用程序免费下载
- 51单片机定时器扫描按键实验的程序免费下载
- 使用51单片机定时器做时钟的程序免费下载
- 使用51单片机进行定时器计数示例的程序免费下载
- 单片机定时器的用法 1147次阅读
- 51单片机定时器和中断的介绍 2024次阅读
- 基于单片机的定时器的设计方法 1w次阅读
- 单片机的程序结构设计 6475次阅读
- 单片机定时器赋初值的方法解析 7248次阅读
- 单片机定时器和计数器的基本结构以及用法介绍 4422次阅读
- 51单片机计数器和定时器的本质区别及应用方法 1.4w次阅读
- 单片机学习心得1:89c51单片机定时器应用! 9516次阅读
- 单片机C语言编程中定时器初值计算的两种方法 1w次阅读
- MSP430单片机定时器A结构及其应用范例 3924次阅读
- 51单片机定时器工作原理 9.3w次阅读
- 详细剖析单片机定时器的寄存器 1w次阅读
- 单片机中各种周期的关系与定时器原理 1w次阅读
- 单片机C语言程序设计之定时器控制单只LED 3826次阅读
- 单片机必须了解的外设功能——定时器/中断功能 7178次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 651单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 751单片机大棚环境控制器仿真程序
- 1.10 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多