本书是'单片机应用技术丛书'中专门介绍单片机应用系统软件设计的一本著作。
\r\n 书中总结了作者多年来在80C51系列单片机应用系统软件设计中的实践经验,归纳出一整套应用程序设计的方法和技巧。在内容安排上,不仅有实现功能要求的应用程序设计步骤、子程序、监控程序及常用功能模块设计方法,还以较大篇幅介绍了提高系统可靠性的抗干扰设计和容错设计技术以及程序测试的正确思想方法。附录中向读者提供了完整的系统程序设计样本和经过多年使用考验的定点运算子程序库与浮点运算子程序库的程序文本、注释及使用方法。
\r\n 本书深入浅出,并配以大量实例,可作为从事单片机应用系统研究的工程技术人员的软件设计指导用书。
第一章 应用程序的设计步骤\r\n 1.1 设计任务书的编写\r\n 1.2 硬件电路设计\r\n 1.3 软件任务分析\r\n 1.4 数据类型和数据结构的规划\r\n 1.5 资源分配\r\n 1.6 编程及调试\r\n 1.7 编程语言与开发环境的选择\r\n第二章 程序流程图与子程序设计\r\n 2.1 程序流程图\r\n 2.1.1 程序流程图的画法\r\n 2.1.2 从程序流程图到程序\r\n 2.2 子程序设计\r\n 2.2.1 结构化的程序设计风格\r\n 2.2.2 参数的使用\r\n 2.2.3 算法的合理性和可靠性\r\n 2.2.4 子程序的透明性设计\r\n 2.2.5 子程序的相容性设计\r\n 2.2.6 子程序的容错性设计\r\n第三章 系统监控程序设计\r\n 3.1 监控程序的任务\r\n 3.2 监控程序的结构\r\n 3.2.1 作业顺序调度型\r\n 3.2.2 作业优先调度型\r\n 3.2.3 键码分析作业调度型\r\n 3.3 普通监控程序的设计方法\r\n 3.3.1 系统状态分析\r\n 3.3.2 状态转移分析\r\n 3.3.3 状态顺序编码型监控程序的设计方法\r\n 3.3.4 状态特征编码型监控程序的设计方法\r\n 3.3.5 监控程序的四种设计风格\r\n 3.4 菜单驱动的监控程序设计方法\r\n 3.4.1 系统功能分析和菜单结构设计\r\n 3.4.2 画面设计\r\n 3.4.3 监控程序设计方法\r\n第四章 常用功能模块的设计\r\n 4.1 时钟\r\n 4.1.1 时钟系统的建立\r\n 4.1.2 时钟的校对\r\n 4.1.3 定时任务的触发与撤除\r\n 4.1.4 相对时钟(闹钟)\r\n 4.2 键盘\r\n 4.2.1 软件去抖动处理\r\n 4.2.2 连击的处理\r\n 4.2.3 复合键的处理\r\n 4.2.4 键盘编码\r\n 4.3 数码显示\r\n 4.3.1 显示模块在系统软件中的安排\r\n 4.3.2 显示配置与输出驱动\r\n 4.3.3 灭零处理\r\n 4.3.4 闪烁处理\r\n 4.3.5 模拟串行显示\r\n 4.4 点阵液晶图文混合显示中的软件技术\r\n 4.4.1 图文混合显示的基本原理\r\n 4.4.2 字符的显示\r\n 4.4.3 图形的显示\r\n 4.4.4 汉字的显示\r\n 4.4.5 汉字的排版及其画面的输出\r\n第五章 抗干扰设计\r\n第六章 容错设计\r\n第七章 程序测试\r\n附录\r\n参考文献
修订版序
《单片机应用程序设计技术》一书出版至今已十年有余. 而今, 无论是单片机技术本身, 还是单片机应用队伍都发生了很大变化. 现代电子系统已从单片机扩展到嵌入式应用系统, 原来的8位单片机占据了嵌入式系统的低端应用领域;大量的计算机专业人员进入嵌入式系统领域;嵌入式系统应用对象也从以工业控制领域为主转向信息控制. 网络. 通信. 多媒体和数字化管理的多样化应用.
作为早期以非计算机专业队伍身份进入单片机应用领域的技术人员, 以其原有的电子技术基础, 很快地掌握了单片机硬件系统设计技术, 相比之下, 应用程序设计成为难点. 长期以来, 这支队伍中的大多数人都是釆用基于指令系统的随意性应用程序设计方法, 从机器码到汇编语言. 长时间随意性的汇编语言程序设计, 导致移植和交流困难, 形成长时间的低水平重复, 成为提高单片机应用技术水平的极大障碍. 随着C语言的普及和嵌入式操作系统的推广, 嵌入式系统低端应用中, 不少人转向基于C语言的高级语言程序设计, 在一些任务量大的系统程序设计中则引入了嵌入式操作系统. 这些新技术都是单片机应用系统开发人员必须了解和掌握的. 然而, 即使使用高级语言编程, 有时为了某些需要(如快速. 精确定时和精细管理等), 也要求插入汇编语言子程序. 因此, 对于一个优秀的单片机应用开发技术人员来说, 汇编语言程序设计是程序设计的基础.
当今, 传统的电子系统已全面转变成以嵌入式系统为核心的现代电子系统. 在嵌入式系统低端应用中, 存在着大量的小型嵌入式应用系统, 这些系统由于资源和控制要求的限制, 釆用汇编语言设计程序会成为系统程序设计的一种主要方法.
在以汇编语言为基础的系统程序设计中, 规范化设计至关重要. 应当摒弃那种基于指令系统的随意性方法, 遵循汇编程序编写格式. 规范和计算机软件的工程方法. 在系统程序设计中, 也要从单纯的功能性设计转变到功能性. 可靠性. 功耗管理和产品应用优化等综合性设计, 充分发挥软件在提高系统综合品质上的效益. 《单片机应用程序设计技术》一书就是在这种背景下出版的, 对于提高我国单片机应用水平做出了贡献, 至今仍有不少读者. 为了回应读者要求, 並顺应单片机技术的发展, 作者在原有基础上进行了修订, 但仍保持了原书的严谨风格, 在内容上涉及了应用程序设计的各个方面, 特别是系统的可靠性设计, 从抗干扰. 容错到程序测试都提供了完整的范例. 这些原理. 思路和设计方法都是汇编程序设计的基础, 会有很长的时效性.
本书中的所存范例都是基于80C51系列单片机的. 所幸的是80C51系列单片机结构经典, 一直长盛不衰, 用者甚众. 近年来又有许多衍生的80C51系列单片机, 如Cygnal公司的C8051F. AD公司的ADμC8xx和TI公司的MSC1210系列都是当今十分优秀的8位单片机系列, 会有众多的用户. 这些单片机系列像所有80C51系列单片机一样, 具有完全相同的指令系统, 因此, 当今本书的修订具有重要的现实意义.
2002年9月于北京
修订版前言
本书第一版于1991年出版, 出版后得到广大读者的好评和支持, 但由于出版至今已超过十年, 书中的某些内容已经明显过时, 需要进行修改, 并补充一些新的内容.
本书第一版中的80C31+373+2764三片基本系统已经过时, 现改为片内含程序存储器的80C51系列单片机, 用计数器芯片来构成的硬件看门狗系统也已经过时, 现改为采用专用系统监视芯片或内含硬件看门狗的增强型单片机, 对于比较复杂的实时系统, 删去原来介绍的"费力不讨好"编程方法, 推荐采用"实时多任务操作系统", 在程序编写格式上, 对直接地址单元进行操作的编程格式已经非常不实用, 不利于移植和重复利用, 现全部改为变量和宏定义格式, 使软件素质得到质的提高.
这十年来, 我国的"单片机应用"技术已经得到了很大发展, 现在已经正名为"嵌入式系统应用"技术. 笔者在科研和教学中, 也积累了一些新的心得, 现在得以利用再版的机会与读者进行交流.
在第一章里, 新增加了"编程语言与开发环境的选择"一节, 介绍和比较了当今流行的编程语言与开发环境, 供读者参考.
在第三章里, 新增加了"菜单驱动的监控程序设计方法"一节, 这是一种"人机界面"最友好的监控程序结构, 特别适用于高档应用系统, 可供读者参考.
在点阵液晶的性能价格比日益提高和应用日益广泛的情况下, 在第四章里新增加了"点阵液晶图文混合显示中的软件技术"一节, 系统地介绍了图文混合显示的编程方法, 特别是其中的"排版"技术很有实用价值.
在第六章里, 新增加了"互斥型输出的硬件容错设计"一节, 介绍了在工业过程控制中的一个"麻烦"问题的解决方案, 供读者参考.
笔者在教学中发现, 学生学习"功能模块"程序设计比较容易, 因为需要解决的问题比较单纯, 而学习"监控"程序设计比较费力, 因为需要解决系统整体协调问题, 往往不知从何下手. 即使是一个很简单的系统, 要完成系统程序设计, 并将程序代码烧录到芯片里, 而且能够正常运行, 也只有很少学生能够在规定的时间内独立完成任务. 这种"教完知识就让学生独立完成系统设计"的教学方法已经被证明效率很低. 为了加快"入门"的步伐, 笔者在附录A中提供了两个风格完全不同的完整的应用程序样本, 作为"字帖", 供初学者"临摹". 一般"临摹"两三次后就可以脱手自行进行简单的系统软件设计了. 这比让学生自己"瞎折腾"要好得多, 能够使更多的学生在较短的时间内"上路", 提高毕业后的就业能力.
本书第一版附录中的"MCS51系列单片机实用子程序库"曾经得到广大读者的好评, 正版用户遍及全国各地, 经过十年来的使用, 笔者进行了进一步优化, 现在作为附录B提供给读者的"MCS51系列单片机实用子程序库"是一个经过长期考验的优化的子程序库.
本书修订版在写作过程中, 得到了北京航空航天大学出版社的大力支持和帮助, 尤其是得到出版社何立民教授和马广云博士的帮助, 在此一并表示感谢!对于书中的错误和不足之处, 望广大读者指正.
周航慈2002年8月于江西抚州
第一版前言
按照"单片机应用技术丛书"的规划和要求, 笔者将从事单片机教学和科研中得到的经验教训进行了总结, 并吸收各方面的有益知识, 写成了这本关于单片机应用程序设计技术的书籍. 在写这本书时, 假定读者已经系统地掌握了单片机的原理, 并能使用MCS51指令系统编写各类简单的程序. 在此基础上, 第一章介绍开发一个应用项目的基本过程. 第二章介绍程序设计的基本功. 第三章介绍系统软件的骨架如何搭建. 第四章介绍常用模块的设计技巧. 这四章要达到的目标就是帮助读者设计出一个完整的软件系统, 但这样设计出来的软件系统还只能算是"纸上谈兵", 经不起实践考验, 离实际目标还差很远. 第五章介绍抗干扰技术, 以增强系统软件在实际环境中的生存能力. 第六章介绍容错技术, 以提高系统软件的先天素质. 第七章介绍软件测试的有关方法, 以此来发现和纠正软件系统中的绝大部分错误. 后三章的内容有一个共同目标, 就是使设计出来的软件能够从纸上走下来, 并在实际应用中生存下去. 因此, 本书不但介绍一般的程序设计方法, 而且以提高软件生存能力为重点, 这对从事单片机开发应用的读者可能更有启发.
由于笔者搞单片机应用只能算半路出家, 现在要写一本程序设计的书, 实属班门弄斧, 书中错误观点和片面之词可能不少. 望各位将读后的意见转告给笔者, 使笔者能有所长进. 另外, 希望本书能起到抛砖引玉的作用, 促使更多的这类书籍问世, 加速我国单片机事业的发展.
本书在写作过程中, 得到了何为民同志的大力支持和帮助, 邓道源同志对本书初稿进行了审阅, 并提出了宝贵意见, 高斌同志为本书的文字. 图表处理做了不少工作. 在此一并表示感谢!
周航慈1991年4月于江西抚州