51单片机实现状态机

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有第9章51单片机实现状态机9.1有限状态机有限状态机(FSM)与流程图很相似,具有一组按照一定路径排列的状态,依据于状态中的事件和动作,一个状态可以转移到其他状态。状态是时间中的一个点,例如,当你等火车的时候,你在等待状态。一种状态在一个状态机中,只能出现一次。事件是某时发生的事情,例如火车到达,火车运行。动作是当事件出现时,实现的任务,例如,火车到达后,上车转移是两个状态之间的联系,可以从一个状态移动到另外一个状态。状态图就是对一个事物在某个事件发生后从一个源状态到另外一个目的状态转移的图形描述。状态图中,使用圆圈表示状态,圆圈中的文字或数字表示该状态的名字或是编码,状态转移方向用箭头表示,在箭头旁写的文字是转移条件。对于梅里状态图,在箭头旁用“输入/输出”的格式表示转移条件与满足该转移条件下的输出;而对于摩尔状态机,常将输出放在状态圆圈中。《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有reset=0reset=0reset=0a0a1a2a3a4报警置数定时k=0k=0k=1td=1....由图可知,当k=0时,状态从a0转移到a1,若是k0=1,从状态a1转移到a2,等等,若是reset=0,则无论在什么状态,都将转移到a0状态。《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有一个状态机描述需要五个要素:状态、输入、输出、状态转移函数、输出函数。如果在一个状态中包含着另一个状态序列,则称该状态为复合状态。状态机就是能够根据状态转移条件进行状态转换和输出状态活动的自动机。状态机可以使用数字电路实现,或是单片机通过软件编程实现。如果状态数量有限、输入数量有限、输出数量有限,则称为有限状态机(FSM)。在数字电路中,有两类基本的电路,它们是组合电路和时序电路,它们之间的区别是组合电路的结构中没有反馈、输入值直接决定输出值,而时序电路的结构中具有反馈,其输出由状态和输入决定。状态机是时序电路的一种。记忆电路组合逻辑反馈输入现在状态次态逻辑或驱动逻辑....《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有9.1.1时钟同步有限状态机如果一个时序电路中的触发器都使用同一个时钟信号,则称为同步状态机1.结构时钟同步状态机的结构如图所示。其中次态逻辑由现态和输入形成。状态记忆是n个触发器,用于记忆2n状态。输出逻辑由现在状态和输入形成。在时钟的上升沿或是下降沿(取决于触发器结构),触发器在次态逻辑的控制下动作。次态逻辑状态记忆驱动现态输出逻辑时钟输入输出....《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有2.输出逻辑如果一个时序电路的输出与现在状态和输入都有关,则称为梅里状态机,就是说,在某状态下,满足某输入条件的输出就是梅里输出。值得注意的是梅里状态机的输入变化直接引起输出的变化,而不是等到下一个状态到来时输出才变化。就是梅里状态机。次态逻辑状态记忆驱动现态输出逻辑时钟输入输出....与输入无关,输出只与状态有关的状态机,称为摩尔状态机,所以摩尔状态机的输出与状态变化同步。摩尔状态机是使用广泛的状态机,如图所示。《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有3.状态编码具有n个状态变量的状态机具有2n个状态。究竟一个状态用什么样的二进制数表示,就是状态编码问题。状态与它的编码之间不是唯一关系。最简单的状态编码就是采用自然二进制整数顺序来表示状态,这样的编码虽然简单,但是最终的电路未必是最简单的。如果要得到最简单的结果,最好把各种编码都试一试,但是太累人,一般情况下采用经验编码方法。在状态编码时应该考虑的一些因素:(1)选择初始状态的编码与状态机的复位状态相同,这样就会使状态机复位时就回到状态机的初始状态。(2)每一次状态变化,应该使发生的状态变量最少。(3)如果有未使用的状态,则尽量选择可以达到简化逻辑设计的状态编码。设计中应该保证从未使用状态一定可以进入初始状态。《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有4.主从状态机一个大的状态机设计是非常复杂的,一般情况下,最好将大的状态机分解成小状态机的集合。一般划分的原则是按照功能划分,主要输入、输出和控制算法由主状态机完成,而辅助的、在主状态机控制下的算法由子状态机完成,就是说主状态机完成顶层算法,子状态机完成底层算法。最常见的划分就是将计数器作为子状态机,这时,主状态机只要发出启动信号,而等待计数器返回的计数完成信号。虽然主状态机增加了启动计数器的输出信号和来自计数器的计数完成信号,但是该计数器就可以为主状态机节省n-1个状态。主从状态机的一般结构如图所示。主状态机子状态机1子状态机2子状态机nSTART1START2STARTnDONE1DONE2DONEn输出输入....《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有5.状态转移条件状态转移的条件和输入的信号数有关,n个输入信号,将有2n个转移条件,这些条件之间应该是互斥的,只能有一个转移条件有效。也就是只能转移到另外一个状态,而不是一个以上的状态。在状态机设计过程中,对于状态转移的条件是容易给出的,但是使多个状态转移条件满足互斥条件确是比较难的,因为这需要更深刻的考虑状态、转移条件之间的关系。一个状态只向另外一个状态转移的状态机是最简单的状态机,因为只有一个状态转移条件。有些状态图只给出本状态向外状态的转移条件,而向自己转移的条件未给出,这种情况可以理解为只要不向外状态转移就保持在本状态不动。《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有6.状态机的输入信号状态机的输入信号往往使是按键信号,既然是按键信号,则按下去的时间长短是随机的,可能是一个或几个时钟脉冲的时间,如果状态机的状态转移是在某输入信号的作用之下连续转移,例如,在状态1,当按键第一次为0时,转移到状态2,第二次为0时转移到状态1,则会因为按键一直保持在0,引起状态不断的转换,不能实现每按一次按键,转换一次状态的目的。解决的方法是设计边沿微分电路,使按键按下时,只在下降沿输出一个时钟周期的低电平,保证只有一个状态转移。7.上电状态机初始化在状态机上电时,无论为何种输入条件,都应该进入到一个确定的状态,该状态称为上电初始状态。有些状态机可以在上电时,自动进入上电初始状态,有些状态机则不能,需要复位信号的帮助才能进入上电初始状态。9.1.2状态图状态图是用于小型、中型状态机设计的一种方法,该方法的特点是简单。状态图中的状态转移是用一根弧线表示的,所以不管有多少输入变量,也只能有一个转移条件表达式,应该使现在状态到所有次态的转移条件互斥,也就是说只能转移到一个次态。另外需要说明的是用于控制器的状态机大部分都是摩尔状态机,就是说这些状态机的输出仅仅与状态有关。《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有[例题9-1]设计一个顺序开关装置,该开关装置在按键k第一次按下时,三盏灯x、y和z同时点亮,当k再次按下时,x灯立刻熄灭;y灯15s后熄灭,在y灯熄灭后18s后,z灯熄灭。转移条件说明状态说明输出说明k输入按键z0三灯都灭t1515秒定时起动td1515秒定时到信号z1三灯都亮t1818秒定时起动td1818秒定时到信号z2三灯都亮xx灯z3x灯灭,其他亮yy灯z4x、y灯灭,z灯亮zz灯《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有z0z1z2z3z4k=0k=1td15=1td18=1k=0....x=0y=0z=0x=1y=1z=1x=1y=1z=1x=0y=1z=1x=0y=0z=1....《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有[例题9-2]试设计一个交通信号灯控制器,该交通灯的红、黄、绿灯亮灭顺序是如下:南北绿灯10秒南北黄灯3秒南北绿闪5秒东西绿灯10秒东西黄灯3秒东西绿闪5秒南北红灯东西红灯........转移条件说明状态说明输出说明td1010秒定时到信号a0南北绿、东西红t1010秒定时起动td58秒定时到信号a1南北绿闪,东西红t88秒定时起动td33秒定时到信号a2南北黄、东西红t33秒定时起动a3南北红、东西绿n1南北红灯a4南北红、东西绿闪n2南北黄灯a5南北红、东西黄n3南北绿灯d1东西红灯d2东西黄灯d3东西绿灯《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有a0a1a2a3a4a5td10td5td3td10td5td3....《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有9.2.1C语言描述状态机的语句intstate=S0;//初始状态while(1)//无限循环{switch(state){caseS0:If(T0转移条件满足){状态转移到满足T0条件的次态;操作;}If(T1转移条件满足){状态转移到满足T1条件的次态;操作;}…………If(TN转移条件满足){状态转移到满足TN条件的次态;操作;}break;caseS1://插入S1的操作;//插入离开S1的转移;break;……caseSN://插入SN的操作;//插入离开SN的转移;break;}}通常将表示状态转移的一系列通常将表示状态转移的多个if语句写成if-else语句,这样可以使转移条件形成互斥。《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有当然也可以直接使用if语句描写状态机,例如:if(state=S0){if(T0转移条件满足){状态转移到满足T0条件的次态;操作;}elseif(T1转移条件满足){状态转移到满足T1条件的次态;操作;}else…………if(TN转移条件满足){状态转移到满足TN条件的次态;操作;}}if(state=S1){//插入离开该状态的条件语句//插入要转移的次态//插入S1状态的操作语句…}………if(state=SN){//插入离开该状态的条件语句//插入要转移的次态//插入SN状态的操作语句}《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有9.2.2描述状态机的完整C程序格式#includeAT89X51.H数码管的译码表格设置定时器的定时变量设置状态变量设置其他全局变量主程序:{局部变量初始化定时器初始化语句中断允许语句主程序无限循环中:{(1)输入信号处理语句获得所有的输入信号状态《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有(2)状态机描述语句主要是描述状态转移、转移条件、定时变量清零等该状态下的输出语句显示该状态的发光二极管(不是必须的,用于调试)(3)显示处理语句将定时数据送到数码管显示(不是必须的,用于调试)(4)其他语句(5)若是在状态描述语句中没有描述输出,可单独将各个状态下的输出描述定时器中断服务程序中:{设置静态局部变量根据定时器工作模式确定是否设置初值,若是需要精确定时,选择不需要预置初值的工作方式2每中断一次就增加数值的语句,获得确定的中断时间(例如1s)。按照确定的中断时间,增加定时变量}《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有9.3示例程序在状态机描述中,除了直接描述状态机的语句外,还需要按键(钮)输入语句、定时器描述等语句,本节通过示例对按键、定时等的C描述给予介绍。[示例程序1]按键处理程序。P3口全部连接按键,P0口连接的数码管显示按键的值,程序中变量kk是按键的值,不同的按键按下,数码管显示不同的值。变量说明变量说明nn延迟时间循环变量kk按键值table[]共阳数码管译码表《单片机技术基础教程与实践》作者:夏路易电子工业出版社所有源程序如下:#includeAT89X51.hunsignedintcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};unsignedintkk=0x08;voidmain(){unsignedintnn;while(1){P3=0xff;//P3口连接8个按键作为输入if((P3|0x00)!=0xf

1 / 38
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功