有限状态机在单片机编程中的应用

时间:2022-02-07 04:22:01

有限状态机在单片机编程中的应用

摘要:电子技术日新月异,对单片机的编程提出了更高的要求,基于c语言的有限状态机看,可以有效地提高单片机的实时性,同时也增强了程序的可读性和可移植性,便于程序的模块化。

关键词:有限状态机;单片机;按键

中图分类号:TB文献标识码:A文章编号:16723198(2013)22018701

0引言

有限状态机FSM(Finite State Machine)是一种数学模型,它以有限个状态以及在这些状态间的转移和动作构成,它适用于系统分析到设计整个过程,应用十分广泛。

有限状态机以描述控制特性为主,它特别适合发生有先后顺序或者有逻辑规律的事件,也是软件上常用的一种处理方法。在单片机程序的应用上,有限状态机把复杂事件分解成有限个稳定状态,通过外部事件的驱动,改变程序当前的状态同时做出相应的操作处理。

1有限状态机

有限状态机主要按照规定的顺序依次完成各种操作,它由一定数目的状态和相互之间的转移构成,在任何时候系统只能处于给定状态中的一个,在外部事件的驱动下,状态机会产生相应的动作处理,同时也可能伴随着状态的转移。有限状态机可以分成两类,第一类为Moore状态机,它的输出只和状态有关而与输入无关;第二类称为Melay状态机,它的输出不仅和状态有关而且和输入有关系。

1.1有限状态机要素

有限状态机包含了现态、条件、动作、次态4个要素。现态指程序所处的当前状态,在满足一定的条件下,系统将会产生一个动作或者执行一次状态的转移,次态是满足条件后转移的新的状态,一旦次态被激活,则转变为新的现态。在这4个要素体现出了状态机内部各状态的因果关系,现态和条件是因,次态和动作是果。

1.2建立有限状态机

有限状态机通常主要有两种方式表现方式,一种是“状态转移图”,另一种是“状态转移表”,这两种方式都可以有效的表现出各个状态间的转移关系。

通常,我们用SWITCH-CASE、IF-ELSEIF-ELSE语句在软件中实现状态机的方法和程序结构。实际编程过程中,虽然有限状态机思想提供了很好的编程思路,但是还应该探讨使用归类的方法来进一步提高程序执行效率,因此在编程之前,应该确定程序中存在哪几个状态,这样能够大大缩短程序的长度,可读性也明显增强。

本文通过单个按键信号的检测为例,对状态机的使用进行说明。

在实际应用中,按键的操作是随机的,系统需要对按键一直循环查询。按键的按下和释放检测过程也需要进行消抖处理,这个过程大概需要10ms左右,因此需要设置S0到S2,分别表示判断有无键按下、确定有键按下、等待按键释放3个基本状态。

图2单个按键的状态机转换图采用有限状态机检测按键的过程中,次态与输入以及当前状态有关,因此采用的是Melay状态机模型。在检测过程中,输入为按键信号,鉴于按键普遍连接方法,一般情况下都是“1”表示无键按下,“0”表示有键按下。

在程序中,首先设置按键初始状态为s0,进入按键检测程序,读出按键的当前状态,进入判断过程。如果为s0或s1,通过判断语句判断是否有键按下,即输入信号是否为“0”,如果为“0”则此时进入下一个状态,s0状态对应进入s1状态,s1状态对应进入s2状态;如果为“1”则表示无键按下,返回初始状态s0;如果进入的当前状态为s2,则表示此时确实有键按下需要等待按键释放,再次检测按键输入信号,如果输入为“0”,表示按键未释放,输入为“1”表示按键已经释放,返回到状态s0。

具体软件实现如下:

static char key_state=s0;// 按键初始状态

char key_press,key_return=0;

key_scan()

{

key_press=key_input;//读按键输入

switch(key_state)

{

case s0:if(!key_press) key_state=s1; // 有键按下,程序进入状态s1,

Break;

case s1:if(!key_press)//确认按键按下,进入状态s2

{

key_return=1;

key_state=s2;

}

else//无键按下,按键抖动,返回状态s0

key_state=s0;

break;

case s2:if(key_press) key_state=s0;//按键释放,返回状态s0

break;

}

}

3结语

有限状态机简单易用,它可以使程序各个状态间的关系变得直观,更有利于程序的模块化。使用有线状态机对单片机编程,可以增强程序的实时性,同时也大大提高了程序的可读性、可移植性。

参考文献

[1]马潮.AVR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2011.

[2]黄新林,王钢,刘春刚.有限状态机在单片机编程中的应用[J].哈尔滨理工大学学报,2008,(8).

上一篇:残煤复采老塘中注氮防灭火技术研究 下一篇:网页设计中计算机图像处理技术的应用