否则, 编程项号增1(模21)
(2) 非编程态
§6.2 键盘监控程序设计方法综述
键盘监控程序要完成的工作主要有两部分: 一是获得键码, 二是分析是哪
一键, 并根据不同的程序状态调用相应的处理程序完成键的功能。 由于
键盘监控程序设计是以计算机为基础的设计的基本组成部分之一, 具有很重要性的意义, 所以已经有很多人对这个问题进行过深入研究, 提出了一些很好的方法。 目前, 设计键盘监控程序主要有两种方法: 直接分析与转移表法和状态分析法。 早期多采用直接分析法。 这种方法的缺点是键盘分析程序与动作程序混为一体, 不可分割。 程序的编写。 修改。 阅读。 移植都比较麻烦。 对一键多义键盘尤甚。 而美国学者 J.B.Peatman 在1977年提出的 \键盘分析算法\克服了直接分析法的不足, 国内从1982年开始使用这种方法, 并称之为\状态分析法\。 随着单片机应用的日益广泛, 人们又逐渐认识到了这种方法的缺点与不足, 并提出了相应的改进方法, 其中以中国科学院感光化学研究所陶培德提出的 \图解法\为优秀的代表。 直接分析与转移表法由于大家都比较熟悉, 这里就不再赘述。 下面简要介绍一下键码的获得和\图解法\。
键码的获得:
键码的获得其实也是键分析法研究的一个方面, 但又有相对的独立性, 它
是分析实现键功能的基础,所以先单独给以讨论。
键码获取方法较多(不同的方法可以给出不同的键码), 它可以完全由键盘
硬件电路直接给出(编码键盘), 也可以由简单的键盘接口电路配上一定的键扫描, 由键译码程序给出(非编码键盘)。 智能仪器为充分利用微电脑的软件
资源, 减少硬件开支,一般多采用非编码键盘。非编码键盘又有行扫描法和线翻转法两种给出键码的方法, 其中线翻转法采用中断技术。
\图解法\
\图解法\的基本思想是把监控程序看作一个系统, 键开关作为该系统的
输入, 动作程序看作系统的输出。 根据系统理论: 系统的输出取决于系统当前的状态和输入激励, 并 伴随当前状态跃迁到下一个状态(有时下一个状态与当前状态相同,构成自身循环)。若令PREST( PREsent STate)表描述当
前状态, 令NEXST (NEXt STate) 表描述下个状态(简称\次态\。 那么监控程序可以描述为: 系统输出的动作程序取决于输入键开关的键码和系统现态值, 并由现态PREST 跃迁到次态NEXST。 而任一时刻系统的状态是唯一确定的。可见某时刻键开关输入后系统跃迁到的次态(NEXST) 就是下一时刻键开关输入的当前状态(PREST), 即现态与次态是相对而言的。 这样, 即使是同一键开关, 只要在不同的现态按下, 也可执行不同的程序。显然, 把系统概念引入监控后, 可以完全解决一键多义键盘的监控程序设计问题。
\图解法\的大致过程如下:
(1) 绘制键状态跃迁图。
.1. 确定系统状态数目。
.2. 确定一个初始状态, 使任一键功能对应的键输入序列均起、止于该状
态。
.3. 在图上标记有效键输入(伴随着一次状态跃迁), 无效输入不标记,系统不响应。
.4. 一次状态跃迁对应于执行一个动作程序;
同一状态下任一键输入伴随的状态跃迁是唯一的;
不同状态下, 同一键开关输入伴随着一次不同的状态跃迁。
(2) 确定键码表, 给键一个确定的码字。
(3) 确定键功能码表。
键功能码由键名、功能键码、分支参数部分组成。
功能键码就是将任一现态下按下都跃迁到相同次态的键赋于一个
相同的功能码字, 而对于它们所要执行的不同部分, 则依据分支参数不同选择执行。调整功能键码的安排,使功能键码按状态的不同分别聚集, 这样不同的动作程序就对应于键功能码表的不同项, 以此实现了键功能的完成。
\状态分析法\算法):
状态分析法基本上与图解法思想相同, 稍有不同的是在绘制键跃迁图时将
某状态下无效输入也标记在其中( 用*表示无效输入), 并设置了一些伪状态来表示对应于无效输入的情况, 在确定键码表和键功能码表时要多考虑许多状态, 相对于图解法较为复杂且响应速度也比图解法稍差。
除以上介绍的几种方法外, 还有 \时序状态分析法\等。\时序状态分析法\
采用了状态分析法关于状态分析的思想, 但其功能程序的调用和分析是混
为一体的, 不是一种规范的做法, 适用范围不广。本文不再详细论述。
§6.3 键分析法及安排
由§6.1的键功能安排可知本设计中也有一键多义现象, 是否就采用 \图解
法\编制我们的键盘监控程序呢? 经分析本系统特点可知, 键盘定义主要在两种状态下工作, 这就是编程态和非编程态。在非编程态下各键功能唯一, 在编程态中也只有
程序完全由软件获得键值, 由于七个按钮都直接挂接在P2口上, 所以读入
P2口,屏蔽掉P2。7位后,就获得了键值,程序分析时直接判读 是否与一个键码相等, 对应的键码都只有一位为1, 所以程序对多于1个位的键值都不响应, 这就避免了同时有多个键按下的错误情况。 (2) 分析及功能执行:
首先, 程序定义为两个状态: 编程态和非编程态将对键码的分析聚簇起来,
作为一个模块按编程态和非编程态的不同, 设了两个类似 Switch的机构, 以分析在不同的状态下哪个键被按下, 由于采用的是
AJMP # 功能子程序标号
的方式, 完全排除了因软件的复杂跳转使键盘操作混
乱的可能。 对编程态的
多义的问题。
由于键的分析和键功能的执行在程序上是分离的, 所以不会造成跳转混乱
不清的问题, 而且键功能若有改变, 则只需要修改相应的功能程序段, 而不需去考虑键码分析识别。再加上软件采用的模块化和结构化思想, 使程序有很好的可读性, 这无疑给程序的调试和维护带来极大的方便。
由上可知, 本系统分析方法既解决了直接分析法分析程序和功能程序混和
在一起, 不可分割造成的编制, 阅读。 调试和维护的困难, 较图解法或状态
分析法而言又减少了编制键功能码表的聚琐和因之可能带来的错误, 在识别键码后转去执行功能子程序又比图解法少了一个子程序调用过程, 特别是可省去其分支参数的麻烦, 故而对本系统的监控程序设计来说有较强的优越性。 同时, 这种方法对有类似特点的系统的键盘监控程序的设计也有一定的指导意义。
第七章 软件采用的抗干扰及容错技术
§7.1 可靠性设计综述
作为智能仪器核心的单片机由于往往使用在工业环境中, 常有大量电磁设
备启动、停止, 电源波形畸变等因素影响, 使得单片机系统遭到较强干扰而破坏其正常运行, 使整个系统出现混乱。复费率电表就面临着这样一个严重的技术困扰。它所安装的地方许多是野外, 高热或高寒, 有些是大型电网计量关口, 电磁影响很大, 电源电压的连续尖峰干扰也很常遇到。因此, 为我们的系统加入抗干扰措施就成为十分必要的工作。 一般消除单片机实时系统干扰所采取的措施有硬件和软件两种方法, 如硬件工艺上可加入电磁屏蔽措施等, 本文主要涉及我们系统中所采用的软件抗干扰措施。
下面我们将分析单片机实时系统的特点, 研究错误可能出现的原因, 以找
到解决的办法。
实时系统通常有如下的特点:
(1) 实时性
在系统中有些事件的发生是随机的( 例如掉电处理等 ), 要求系统软件对这类事件的处理具有一定的实时性。 (2) 周期性
实时控制软件一般在完成对系统初始化后, 接下来反复执行主程序, 同时等待中断 (及随机事件的发生), 当有中断申请, CPU就执行相应的中断服务程序, 并且返回后, 继续主程序的循环。 因此在软件执行过程中存在大量的周期性活动。 (3) 相关性
一个单片机实时控制软件一般常有多个任务模块组成。各模块是配合工作的, 它们之间存在着多种关联因素, 并互相依赖, 互相存