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

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

标签:有限状态机;单片机;按键
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]马潮.A VR单片机嵌入式系统原理与应用实践[M].北京:北京航空航天大学出版社,2011.
[2]黄新林,王钢,刘春刚.有限状态机在单片机编程中的应用[J].哈尔滨理工大学学报,2008,(8).。

相关文档
最新文档