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

第13卷第4期 2008年8月

哈尔滨理工大学学报 JOURNAL HARBIN UNIV.SCI.&TECH.

V01.13

No.4

Aug.,2008

有限状态机在单片机编程中的应用
黄新林,


钢,

刘春刚

(哈尔滨工业大学通信技术研究所,黑龙江哈尔滨150001)

摘要:为了提高单片机对复杂任务的实时性处理能力,在单片机编程中使用了有限状态机 模型.有限状态机的灵活运用可以减少程序中的判断步骤,缩短程序执行时间,提高单片机处理的 实时性.并且实现了模块化编程,使每个状态相互独立.程序可读性强且易于修改. 关键词:单片机;状态机;应用 中图分类号:TP311.1l 文献标识码:A 文章编号:1007—2683(2008)04—0007—03

Application of Finite State Machine in Single Chip
Microcomputer PrOcIramming v v

HUANG胁-lin,WANG劬增,LIU Chun-gang
(Communication Technology Institute.Harbin
Institute

of Technology,Harbin

150001,China)

Abstract:In order to enhance the timely processing ability to the complex—-duty by Single Chip Microcomput??
er,we
use

the finite state machine in.our programming.Using the finite state machine smoothly may reduce the and time,80 do processing timely.By this way,every state
can

judgrnent

step

be mutually independent,so we

call

realize the modular programming and the procedure reads and revises easily. Key words:single chip microcomputer;finite state machine;application

不花费大量的精力来协调各标识符,导致程序的 1





可读性变差,且容易出现逻辑错误¨1.并且使用多 层判断的面向过程的方法来实现大型程序是行不 通的,因为程序的执行时间随判断语句的增加而 线性增加,如果执行时间过长,程序就不能实现实 时性处理,将会产生致命的错误.有限状态机的使 用可以实现程序的快速运行,减少了判断步骤,其 执行时间不会随状态的增加而增加,实现了单片 机的实时操作,并且可以使单片机程序易于理解 和修改旧J.本文主要介绍一种提高单片机程序执 行效率的状态机编程思想及方法.结合有限状态 机实现指令数据的正确接收,并且根据不同指令 进行不同的操作来说明状态机在工程控制中的优点.

状态机属于时序电路的范畴,它是大型电子 设计的基础,状态机在处理实时的、逻辑复杂的事 件中表现出了自身的优越性.由于单片机在设计 一个较为复杂的单片机实时程序,尤其是使用汇 编语言时,如果采用面向过程的方法,必然会引起 大量的标识符,以实现各个程序段之间的联系.随 之而来的是将会出现大量、多层的判断、转移语 句,以控制程序的走向.因此程序的流向在很大程 度上都由大量的判断语句和标识符来控制,而众 多的标识符之间往往存在先后关系,程序员不得
收稿臼期:2007—05—09 作者简介:黄新林(1985一),男,晗尔滨工业大学硕士研究生.

万   方数据



哈尔滨理工大学学报

第13卷

为了实现指令的正确接收和识别,可以将指令

2有限状态机
有限状态机由一定数目的状态和相互之间的转 移构成,在任何时候只能处于给定数目状态中的一 个.它以一种事件驱动的方式工作,当接收到一个事 件时,状态机产生一个输出,同时也可能伴随着状态 的转移.它包括以下四个组成部分: 1)状态:是对象的生命周期中满足某种条件、 执行某些动作或等待某些事件发生的一个阶段,能 持续一段时间. 2)转移:是从一个状态节点(源状态)到另一 个状态节点(目标状态)的移动,发生状态转移时, 对象会相应地执行某些动作. 3)事件:是一个在时空中显式出现的特定现 象,它可以触发状态转移.事件可以来自外部,也可 以是内部生成的. 4)动作:是对象在状态发生转移时所做的一系 列处理操作. 对于复杂系统,如采用上述基本有限状态机建 模,可能存在成百上千的状态,导致系统效率下降, 且难于验证和维护一J.因此。应将具有相同操作的 状态进行合并,尽可能减少程序的复杂程度. 3

接受的每个环节看成一个状态,即将每个特定的数 据看成一个状态.这样指令数据的接受都在程序中 主要表现为从一个状态跳转到下一个状态,如何实 现状态间的正确转移是实现指令数据接收的关键. 可以将每个状态都对应一个值,在程序运行过程中 通过对当前状态值的判断来决定程序的走向,正确 处理后应该修改这个状态值来决定下个过程中程序 的走向.由于单片机提供了丰富而灵活的寻址方式, 可以利用数据存储区中某个或者某几个字节来存放 程序运行过程中的状态,这样指令数据的接收过程 就成为状态转移过程. 4

基于有限状态机的单片机程序实现
通过上述介绍,可清楚地了解到可以使用状态

机来实现程序的正确转移,减少了判断步骤.下面通 过一个工程实例来说明问题:MCS51单片机使用串 口来接收指令数据(也可以在主程序中),并根据指 令的不同来执行相应的操作. 单片机要接收两条指令(可以更多),其通信格 式如表1、表2.
表1指令1的通信格式

程序的状态转移模型
在实际工程应用中,通常使用单片机来实现控

制和调度,主要是通过识别指令数据,并根据指令的 不同来实现相应的控制‘4|,其状态转移模型的一般 形式如图1所示. 、正确接收到指令l后,开始第一阶段的工作,工 作方式根据数据1一J7、r来进行.正确接收到指令2 后,开始第二阶段的工作,工作方式根据数据l~肘 来进行. 状态机的特点是状态比较多,在程序运行过程 中,通过判断状态值(此处使用R,来存储状态值) 来决定本次程序的走向,如果采用将状态值(R,的 值)与所有的已知状态值比较是否相等查寻方式来 判断,程序中将存在大量的判断转移语句,这样就会 浪费大量的时间在判断语句上,而且浪费的时间将 成线性增加,如果状态比较多,就有可能在本次处理 还未结束时下一个数据就传送过来,这样会因为不 能及时接收数据而漏掉数据,产生错误.解决这个问 题的方法如下:
图l指令接收的状态转移模型

1)在程序存储器中,设置各分支状态的程序入

万   方数据

第4期 口地址表:

黄新林等:有限状态机在单片机编程中的应用



进一步提高程序执行的效率.因此在编程之前,应该
A,R7;

2)将当前的状态值赋给A,MOV

确定程序中存在哪几个状态,并且应该把具有相同 性质的状态捆绑在一起看成一个状态(虽然也给每 个状态分配一个各不相同的值),这样会大大缩短 程序的长度,可读性也明显增强,不然就有可能因为 程序过长而程序存储器存储空间有限而无法实现. 在本例中,把指令中的数据I~Ⅳ(数据1一M)看成 一个大的状态,并且只对应一个程序人口地址S:, 对应的状态值为1,其程序如下: 是:MOV J『\r个存储区内.
INC A,SBUF;

3)利用MOVC A,@A+DPTR指令,根据条件 查地址表,找到分支人口地址.方法是使DPTR指向 地址表首址,再按运行中累加器A的偏移量找到相 应分支程序入口地址,并将该地址存于A中; 4)利用散转指令JMP@A+DPTR转向分支处 理程序. 本文在程序的入口设置一个分支状态,程序人 口地址表就直接实行跳转,实现语句如下:
MOV A,R7 MOV DPTR,#STATETABLE MOVC A.@A+DPTR JMP@A+DPI[’ll STATETABLE:DB Sl—STATETABLE

MOV@R。,A;接收到的数据放在(R。)开始的 R7;状态值加1,指向下一个状态. OUT;本次执行结束,跳出.

LJMP

指令一(或指令二)正确接收后,就执行相应的 操作控制. 程序中很好地利用了尺,作为状态机的状态转 移标志,通过对尺,的判断来决定程序的下一步走 向.在程序中还实现了接收不同指令后进行分支处 理,判断正确接受完指令后,根据接收到的指令和其 中的数据来完成相应的操作(如输出),来实时地控 制系统.该程序段可以放在串行口的终端服务程序 中,稍做修改后也可以放在主程序中.对于指令数据 的处理都可以套用上面的程序格式来编程. 5

DB最一STATETABLE


DB SK—sTATETABLE

其中5。,52,…,5膏为K个状态的程序人口地址,分 支处理程序是保证状态机高效运行所不可缺少的部 分,不会因为状态的增多而增加程序的执行时间,并 且易于修改. 帧头(或帧尾)的判断语句很简单,其对应状态 为s。,状态值尺,为0,程序如下:
Sl:MOV A,SBUF

CJNE A,帧头,OUT
INC R,





UMP OUT

在单片机编程中使用有限状态机,基本可以解 决程序的实时性处理、高效运行等问题,使程序执行 时间与一般的判断语句相比至少减少了一半.并且 编写思路清晰、编写过程简单、可修改性强,是编写 大型程序的有效方法之一. 参考文献:
[1】管庶安.单片机程序的状态机模型[J】,武汉工业学院学报,
2004,23(2):1—2. [2]DRUMEA A,POPESCU c.Finite State Machines and Their
plications
in Ap-

在单片机编程中,针对多任务多分支处理的系 统,使用有限状态机比使用多层判断语句更有效.若 任务对应Ⅳ个状态,使用多层判断语句执行完整个 任务需要执行N×(Ⅳ+1)/2个判断语句,而使用有 限状态机只需执行J7、r个判断语句.因为程序总的执 行时间由每个状态中的执行时间瓦和状态间的跳 转时间疋两部分组成,且总的执行时间T=T。+ 咒,而每个状态中的执行时间对于有限状态机的编 程和使用多层判断语句编程是相等的.所以使用有 限状态机的编程方法主要针对程序状态间的跳转部 分进行了改进,该部分使用有限状态机编程的长度、 程序存储空间及执行时间是使用多层判断语句编程 的2/(N+1),从而提高了程序执行效率,节省了单 片机的资源. 实际编程过程中,虽然有限状态机思想提供了

Software for Industrial
of

Control[J].Electronics Tech.
PIq尹e∞,

nology:Meeting the Challenges

Electronics Technology

2004.1(1):25. [3]李霞.王永章,粱宏斌,等.有限状态机在开放式数控系统中 的应用[J].计算机集成制造系统,2005,1l(3):429. [4]LEE D.YANNAKAKIS M.Principles and Methods of
nite Testing

Fi-

State

Machines-asurcey[J].Proceedings of the IEEE,1996,

84(8):1090.

很好的编程思路,但是还应探讨使用归类的方法来

(编辑:付长缨)

万   方数据

有限状态机在单片机编程中的应用
作者: 作者单位: 刊名: 英文刊名: 年,卷(期): 被引用次数: 黄新林, 王钢, 刘春刚, HUANG Xin-lin, WANG Gang, LIU Chun-gang 哈尔滨工业大学,通信技术研究所,黑龙江,哈尔滨,150001 哈尔滨理工大学学报 JOURNAL OF HARBIN UNIVERSITY OF SCIENCE AND TECHNOLOGY 2008,13(4) 6次

参考文献(4条) 1.LEE D;YANNAKAKIS M Principles and Methods of Testing Fi-nite State Machines-asurvey 1996(08) 2.李霞;王永章;梁宏斌 有限状态机在开放式数控系统中的应用[期刊论文]-计算机集成制造系统-CIMS 2005(03) 3.DRUMEA A;POPESCU C Finite State Machines and Their Ap-plications in Software for Industrial Control 2004(01) 4.管庶安 单片机程序的状态机模型[期刊论文]-武汉工业学院学报 2004(02)

引证文献(7条) 1.孙婕 基于FPGA的ATM采集卡的设计与实现[期刊论文]-应用科技 2011(6) 2.江小平.徐文 二线制医院呼叫系统的研制[期刊论文]-通信技术 2011(2) 3.马建辉.马共立 基于CAN总线及蓝牙技术的汽车电子产品的开发及测试[期刊论文]-电子产品世界 2010(6) 4.张阳.张海 一种系统测试中的快速多协议匹配算法[期刊论文]-电光与控制 2010(7) 5.刘泊.黄妍慧.栾飞 基于测温技术的减速顶在线检测仪的研究[期刊论文]-哈尔滨理工大学学报 2010(6) 6.王卫兵.孙永杰.刘卫东 单片机和FPGA的可控硅触发电路的设计与实现[期刊论文]-哈尔滨理工大学学报 2009(3) 7.刘泊.黄妍慧.栾飞 基于测温技术的减速顶在线检测仪的研究[期刊论文]-哈尔滨理工大学学报 2010(6)

本文链接:http://d.g.wanfangdata.com.cn/Periodical_heblgdxxb200804003.aspx


相关文档

单片机编程中有限状态机的应用
状态机思路在单片机程序设计中的应用
状态机在单片机程序设计中的应用
单片机应用系统中的编程语言
状态机思路在程序设计中的应用
状态机思路在单片机程序设计中的应用状态机的概念状态机是软件
状态机思想在程序设计中的应用(上)
论文:单片机应用系统中的编程语言
单片机C语言编程在机电系统中的应用
C51的结构体数据在单片机编程中的应用
电脑版