状态机思路在单片机程序设计中的应用

[09-11 23:02:15]   来源:http://www.88dzw.com  单片机学习   阅读:8866

文章摘要:①采用表格方式来描述状态机,优点是可容纳更多的文字信息。例如,我们不但可以在状态迁移表中描述状态的迁移关系,还可以把每个状态的特征描述也包含在内。②如果表格内容较多,过于臃肿不利于阅读,我们也可以将状态迁移表进行拆分。经过拆分后的表格根据其具体内容,表格名称也有所变化。③比如,我们可以把状态特征和迁移关系分开列表。被单独拆分出来的描述状态特征的表格,也可以称为“状态真值表”。这其中比较常见的就是把每个状态的显示内容单独列表。这种描述每个状态显示内容的表称之为“显示真值表”。同样,我们把单独表述基于按键的状态迁移表称为“按键功能真值表”。另外,如果每一个状态包含的信息量过多,我们也可以把每个状态

状态机思路在单片机程序设计中的应用,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com


①采用表格方式来描述状态机,优点是可容纳更多的文字信息。例如,我们不但可以在状态迁移表中描述状态的迁移关系,还可以把每个状态的特征描述也包含在内。


②如果表格内容较多,过于臃肿不利于阅读,我们也可以将状态迁移表进行拆分。经过拆分后的表格根据其具体内容,表格名称也有所变化。


③比如,我们可以把状态特征和迁移关系分开列表。被单独拆分出来的描述状态特征的表格,也可以称为“状态真值表”。这其中比较常见的就是把每个状态的显示内容单独列表。这种描述每个状态显示内容的表称之为“显示真值表”。同样,我们把单独表述基于按键的状态迁移表称为“按键功能真值表”。另外,如果每一个状态包含的信息量过多,我们也可以把每个状态单独列表。


④由此可见,状态迁移表作为状态迁移图的有益补充,它的表现形式是灵活的。


⑤状态迁移表优点是信息涵盖面大,缺点是视觉上不够直观,因此它并不能取代状态迁移图。比较理想的是将图形和表格结合应用。用图形展现宏观,用表格说明细节。二者互为参照,相得益彰。

用状态机思路实现一个时钟程序
接下来,我将就状态机的应用,结合流程图、状态迁移图和状态迁移,举一个实际例子。下面这张图是一个时钟程序的状态迁移图,如图2所示。

图2 时钟程序状态迁移图


把这张图稍做归纳,就可以得到它的另一种表现形式——状态迁移表,如表2所示。

表2 时钟程序状态迁移表

状态机应用的注意事项
基于状态机的程序调度机制,其应用的难点并不在于对状态机概念的理解,而在于对系统工作状态的合理划分。


初学者往往会把某个“程序动作”当作是一种“状态”来处理。我称之为“伪态”。那么如何区分“动作”和“状态”。本匠人的心得是看二者的本质:“动作”是不稳定的,即使没有条件的触发,“动作”一旦执行完毕就结束了;而“状态”是相对稳定的,如果没有外部条件的触发,一个状态会一直持续下去。


初学者的另一种比较致命的错误,就是在状态划分时漏掉一些状态。我称之为“漏态”。


“伪态”和“漏态”这两种错误的存在,将会导致程序结构的涣散。因此要特别小心避免。

更复杂的状态机
前面介绍的是一种简单的状态结构。它只有一级,并且只有一维,如图3所示。

图3  线性状态机结构


如果有必要,我们可以建立更复杂的状态机模型。


1 多级状态结构
状态机可以是多级的。在分层的多级状态机系统里面,一个“父状态”下可以划分多个“子状态”,这些子状态共同拥有上级父状态的某些共性,同时又各自拥有自己的一些个性。


在某些状态下,还可以进一步划分子状态。比如,我们可以把前面的时钟例子修改如下:
把所有和时钟功能有关的状态,合并成1个一级状态。在这个状态下,又可以划分出3个二级子状态,分别为显示时间、设置小时、设置分钟;


同样,我们也可以把所有和闹钟功能有关的状态,合并成1个一级状态。在这个状态下,再划分出4个二级子状态,分别为显示闹钟、设置“时”、设置“分”、设置鸣叫时间。


我们需要用另一个状态变量(寄存器)来表示这些子状态。


子状态下面当然还可以有更低一级的孙状态(子子孙孙无穷尽也),从而将整个状态体系变成了树状多级状态结构,如图4所示。

上一页  [1] [2] [3]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习

《状态机思路在单片机程序设计中的应用》相关文章

分类导航
最新更新
热门排行