




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机技术基础教程与实践 1 第第9章章 51单片机实现状态机单片机实现状态机 9.1 有限状态机有限状态机 有限状态机(FSM)与流程图很相似,具有一组按照一定路径排列的状态,依据于状 态中的事件和动作,一个状态可以转移到其他状态。 状态是时间中的一个点,例如,当你等火车的时候,你在等待状态。一种状态在一个 状态机中,只能出现一次。 事件是某时发生的事情,例如火车到达,火车运行。 动作是当事件出现时,实现的任务,例如,火车到达后,上车 转移是两个状态之间的联系,可以从一个状态移动到另外一个状态。 状态图就是对一个事物在某个事件发生后从一个源状态到另外一个目的状态转移的图形 描述。 状态图中,
2、使用圆圈表示状态,圆圈中的文字或数字表示该状态的名字或是编码,状 态转移方向用箭头表示,在箭头旁写的文字是转移条件。对于梅里状态图,在箭头旁用 “输入/输出”的格式表示转移条件与满足该转移条件下的输出;而对于摩尔状态机,常将 输出放在状态圆圈中。 单片机技术基础教程与实践 2 reset=0reset=0reset=0reset=0 reset=0reset=0 a0a0a1a1 a2a2 a3a3 a4a4 报警报警 置数置数 定时定时 k=0k=0 k=0k=0 k=1k=1 td=1td=1 . . . . 由图可知,当k=0时,状态从a0转移到a1, 若是k0=1,从状态a1转移到a2
3、,等等,若 是reset=0,则无论在什么状态,都将转移 到a0状态。 单片机技术基础教程与实践 3 一个状态机描述需要五个要素:状态、输入、输出、状态转移函数、输出函数。 如果在一个状态中包含着另一个状态序列,则称该状态为复合状态。 状态机就是能够根据状态转移条件进行状态转换和输出状态活动的自动机。状态机可以使 用数字电路实现,或是单片机通过软件编程实现。 如果状态数量有限、输入数量有限、输出数量有限,则称为有限状态机(FSM)。 在数字电路中,有两类基本的电路,它们是组合电路和时序电路,它们之间的区别是组合 电路的结构中没有反馈、输入值直接决定输出值,而时序电路的结构中具有反馈,其输出由
4、状态和输入决定。状态机是时序电路的一种。 记 忆 电 路 组 合 逻 辑 反 馈 输 入 现 在 状 态 次 态 逻 辑 或 驱 动 逻 辑 . . . . 单片机技术基础教程与实践 4 9.1.1 时钟同步有限状态机时钟同步有限状态机 如果一个时序电路中的触发器都使用同一个时钟信号,则称为同步状态机 1.结构 时钟同步状态机的结构如图所示。 其中次态逻辑由现态和输入形成。状态记忆是n个触发器,用于记忆2n状态。输出逻辑由现在 状态和输入形成。 在时钟的上升沿或是下降沿(取决于触发器结构),触发器在次态逻辑的控制下动作。 次态逻辑 状态 记忆 驱动 现态 输出 逻辑 时钟 输入 输出 . .
5、. . 单片机技术基础教程与实践 5 2.输出逻辑 如果一个时序电路的输出与现在状态和输入都有关,则称为梅里状态机,就是说,在 某状态下,满足某输入条件的输出就是梅里输出。值得注意的是梅里状态机的输入变化直 接引起输出的变化,而不是等到下一个状态到来时输出才变化。就是梅里状态机。 次态逻辑 状态 记忆 驱动 现态 输出 逻辑 时钟 输入 输出 . . . . 与输入无关,输出只与状态有关的状态机,称为摩尔状态机,所以摩尔状态机的输 出与状态变化同步。摩尔状态机是使用广泛的状态机,如图所示。 单片机技术基础教程与实践 6 3.状态编码 具有n个状态变量的状态机具有2n个状态。究竟一个状态用什么样
6、的二进制数表示,就是状 态编码问题。状态与它的编码之间不是唯一关系。最简单的状态编码就是采用自然二进制整数 顺序来表示状态,这样的编码虽然简单,但是最终的电路未必是最简单的。如果要得到最简单 的结果,最好把各种编码都试一试,但是太累人,一般情况下采用经验编码方法。 在状态编码时应该考虑的一些因素: (1)选择初始状态的编码与状态机的复位状态相同,这样就会使状态机复位时就回到状态机 的初始状态。 (2)每一次状态变化,应该使发生的状态变量最少。 (3)如果有未使用的状态,则尽量选择可以达到简化逻辑设计的状态编码。设计中应该保证 从未使用状态一定可以进入初始状态。 单片机技术基础教程与实践 7 4
7、.主从状态机 一个大的状态机设计是非常复杂的,一般情况下,最好将大的状态机分解成小状态机的 集合。一般划分的原则是按照功能划分,主要输入、输出和控制算法由主状态机完成,而辅助 的、在主状态机控制下的算法由子状态机完成,就是说主状态机完成顶层算法,子状态机完成 底层算法。 最常见的划分就是将计数器作为子状态机,这时,主状态机只要发出启动信号,而等待 计数器返回的计数完成信号。虽然主状态机增加了启动计数器的输出信号和来自计数器的计数 完成信号,但是该计数器就可以为主状态机节省n1个状态。 主从状态机的一般结构如图所示。 主 状 态 机 子 状 态 机 1 子 状 态 机 2 子 状 态 机 n S
8、TART1 START2 STARTn DONE1 DONE2 DONEn 输 出 输 入 . . . . 单片机技术基础教程与实践 8 5.状态转移条件 状态转移的条件和输入的信号数有关,n个输入信号,将有2n个转移条件,这些条件之间应该 是互斥的,只能有一个转移条件有效。也就是只能转移到另外一个状态,而不是一个以上的 状态。 在状态机设计过程中,对于状态转移的条件是容易给出的,但是使多个状态转移条件满足互 斥条件确是比较难的,因为这需要更深刻的考虑状态、转移条件之间的关系。 一个状态只向另外一个状态转移的状态机是最简单的状态机,因为只有一个状态转移条件。 有些状态图只给出本状态向外状态的转
9、移条件,而向自己转移的条件未给出,这种情况可以 理解为只要不向外状态转移就保持在本状态不动。 单片机技术基础教程与实践 9 6.状态机的输入信号 状态机的输入信号往往使是按键信号,既然是按键信号,则按下去的时间长短是随机 的,可能是一个或几个时钟脉冲的时间,如果状态机的状态转移是在某输入信号的作用之 下连续转移,例如,在状态1,当按键第一次为0时,转移到状态2,第二次为0时转移到状 态1,则会因为按键一直保持在0,引起状态不断的转换,不能实现每按一次按键,转换一 次状态的目的。 解决的方法是设计边沿微分电路,使按键按下时,只在下降沿输出一个时钟周期的低 电平,保证只有一个状态转移。 7.上电状
10、态机初始化 在状态机上电时,无论为何种输入条件,都应该进入到一个确定的状态,该状态称为 上电初始状态。有些状态机可以在上电时,自动进入上电初始状态,有些状态机则不能, 需要复位信号的帮助才能进入上电初始状态。 9.1.2状态图状态图 状态图是用于小型、中型状态机设计的一种方法,该方法的特点是简单。 状态图中的状态转移是用一根弧线表示的,所以不管有多少输入变量,也只能有一个 转移条件表达式,应该使现在状态到所有次态的转移条件互斥,也就是说只能转移到一个 次态。 另外需要说明的是用于控制器的状态机大部分都是摩尔状态机,就是说这些状态机的 输出仅仅与状态有关。 单片机技术基础教程与实践 10 例题9
11、-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灯 单片机技术基础教程与实践 11 z0z0z1z1z2z2 z3z3z4z4 k=0k=0k=1k=1 td15=1td15=1td18=1td18=1 k=0k=0 . . . . x
12、=0 y=0 z=0 x=1 y=1 z=1 x=1 y=1 z=1 x=0 y=1 z=1 x=0 y=0 z=1 . . . . 单片机技术基础教程与实践 12 例题9-2试设计一个交通信号灯控制器,该交通灯的红、黄、绿灯亮灭顺序是如下: 南北绿灯10秒南北黄灯3秒南北绿闪5秒 东西绿灯10秒东西黄灯3秒东西绿闪5秒 南北红灯 东西红灯 . . . . . . . . . . . 转移条 件 说明状态说明输出说明 td1010秒定时到信 号 a0南北绿、东西红t1010秒定时起动 td58秒定时到信号a1南北绿闪,东西红t88秒定时起动 td33秒定时到信号a2南北黄、东西红t33秒定时起
13、动 a3南北红、东西绿n1南北红灯 a4南北红、东西绿闪n2南北黄灯 a5南北红、东西黄n3南北绿灯 d1东西红灯 d2东西黄灯 d3东西绿灯 单片机技术基础教程与实践 13 a0a0a1a1a2a2 a3a3a4a4a5a5 td10td10td5td5 td3td3 td10td10td5td5 td3td3 . . . . 单片机技术基础教程与实践 14 9.2.1 C语言描述状态机的语句语言描述状态机的语句 intstate=S0;/初始状态 while(1)/无限循环 switch(state) caseS0: If(T0转移条件满足)状态转移到满足T0条件的次态;操作; If(T1
14、转移条件满足)状态转移到满足T1条件的次态;操作; If(TN转移条件满足)状态转移到满足TN条件的次态;操作; break; caseS1: /插入S1的操作; /插入离开S1的转移; break; caseSN: /插入SN的操作; /插入离开SN的转移; break; 通常将表示状态转移的一系列通常将表示状态转移的多个if语句写成if-else语句,这样可以使 转移条件形成互斥。 单片机技术基础教程与实践 15 当然也可以直接使用if语句描写状态机,例如: if(state=S0) if(T0转移条件满足) 状态转移到满足T0条件的次态;操作; else if(T1转移条件满足) 状态转
15、移到满足T1条件的次态;操作; else if(TN转移条件满足) 状态转移到满足TN条件的次态;操作; if(state=S1) /插入离开该状态的条件语句 /插入要转移的次态 /插入S1状态的操作语句 if(state=SN) /插入离开该状态的条件语句 /插入要转移的次态 /插入SN状态的操作语句 单片机技术基础教程与实践 16 9.2.2 描述状态机的完整描述状态机的完整C程序格式程序格式 #include 数码管的译码表格 设置定时器的定时变量 设置状态变量 设置其他全局变量 主程序: 局部变量初始化 定时器初始化语句 中断允许语句 主程序无限循环中: (1)输入信号处理语句 获得所
16、有的输入信号状态 单片机技术基础教程与实践 17 (2)状态机描述语句 主要是描述状态转移、转移条件、定时变量清零等 该状态下的输出语句 显示该状态的发光二极管(不是必须的,用于调试) (3)显示处理语句 将定时数据送到数码管显示(不是必须的,用于调试) (4)其他语句 (5)若是在状态描述语句中没有描述输出,可单独将各个状态下的输出描述 定时器中断服务程序中: 设置静态局部变量 根据定时器工作模式确定是否设置初值,若是需要精确定时,选择不需要预置初值的工作方式 2 每中断一次就增加数值的语句,获得确定的中断时间(例如1s)。 按照确定的中断时间,增加定时变量 单片机技术基础教程与实践 18
17、9.3 示例程序示例程序 在状态机描述中,除了直接描述状态机的语句外,还需要按键(钮)输入语句、定时 器描述等语句,本节通过示例对按键、定时等的C描述给予介绍。 示例程序1按键处理程序。 P3口全部连接按键,P0口连接的数码管显示按键的值,程序中变量kk是按键的值,不同的按 键按下,数码管显示不同的值。 变量说明变量说明 nn延迟时间循环变量kk按键值 table共阳数码管译码表 单片机技术基础教程与实践 19 源程序如下: #includeAT89X51.h unsignedintcodetable=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF
18、8,0 x80,0 x90; unsignedintkk=0 x08; voidmain() unsignedintnn; while(1) P3=0 xff;/P3口连接8个按键作为输入 if(P3|0 x00)!=0 xff)/如果有按键按下 for(nn=0;nn1000;nn+);/延时 if(P3|0 x00)!=0 xff)/按键还在按下状态 switch(P3) case0 xfe:/P3_0=0,fe=11111110 kk=0;break; case0 xfd:/P3_1=0,fd=11111101 kk=1;break; 单片机技术基础教程与实践 20 case0 xfb:
19、/P3_2=0,fb=11111011 kk=2;break; case0 xf7:/P3_3=0f7=11110111 kk=3;break; case0 xef:/P3_4=0,ef=11101111 kk=4;break; case0 xdf:/P3_5=0,df=11011111 kk=5;break; case0 xbf:/P3_6=0,bf=10111111 kk=6;break; case0 x7f:/P3_7=07f=01111111 kk=7;break; default:kk=8; while(P3!=0 xff);/如果按键还在按下时,则停留在此,等待按键抬起 P0=ta
20、blekk;/将键值送到P0口连接的数码管显示 单片机技术基础教程与实践 21 示例程序2按键控制秒计数(定时器0工作在方式1)。 P3口引脚连接按键,按键按下后,P0口连接的数码管显示按键号,P1口循环显示0按键号之间 的值,P2_0连接的LED灯亮1s,灭1s。如下程序采用定时器0,方式1工作,由于预装初值需要 时间,所以不是精确计数。 变量说明变量说明 nn主函数内延迟时间循环变 量 kk按键值 t0随定时器中断次数递增变量 nn局部静态变量,随定时器中断次数增 加 table共阳数码管译码表 单片机技术基础教程与实践 22 源程序如下: #includeAT89X51.h/文件夹名yu
21、zuo2 unsignedintcodetable=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90; unsignedintkk=0 x08; unsignedintt0; voidmain() unsignedintnn; TMOD=0 x01;/定时器0,M1M0=01(模式1),gate=0(外中断不起作用),C/T=0 TH0=0 x3c;/设置TH初值0 x3cb0=65536-50000=15536,50ms中断一次,每秒中断20次 TL0=0 xb0;/设置TL初值 TR0=1;/启动定时器0 ET0=1;/
22、设置中断使能寄存器,允许定时器0中断 EA=1;/允许所有中断源中断 while(1) P3=0 xff;/P3口连接8个按键作为输入 if(P3)!=0 xff)/如果有键按下 for(nn=0;nnkk)/由于kk是按键值,所以按键不同,kk不同,因此延迟时间也不同。 t0=0; 单片机技术基础教程与实践 25 示例程序3按键控制定时时间的程序(定时器0工作在方式2)。 按键值kk不同,则t0值的循环周期不同,因此可以通过kk改变t0,进而改变与t0相关的周期长 度。 变量说明变量说明 nn主函数内延时时间循环变量kk按键值 t0随定时器中断次数递增变量 nn局部静态变量,随定时器中断次数
23、增加 table共阳数码管译码表 单片机技术基础教程与实践 26 源程序如下: #includeAT89X51.h unsignedintcodetable=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x90; unsignedintkk=0 x08; unsignedintt0; voidmain() unsignedintnn; TMOD=0 x02;/定时器0,工作模式M1,M0=2(0000,0010),8位、自动重装定时模式 /gate=0(外中断不起作用),C/T=0(取时钟信号) TH0=0 x06;/预置初值6
24、到定时器TH,预置250微秒溢出一次(12MHz) /0.25ms,若是需要定时1s,则需要乘以4000, TL0=0 x06;/预置TL0值 TR0=1;/启动定时器0 ET0=1;/允许定时器中断 EA=1;/允许总中断 单片机技术基础教程与实践 27 while(1) P3=0 xff;/P3口连接8个按键作为输入 if(P3)!=0 xff)/有键按下 for(nn=0;nnkk)/kk改变t0的循环周期 t0=0; 单片机技术基础教程与实践 29 示例程序4在使用如下的按键检测程序时,可以根据需要按键的多少裁减程序。如果需要 按键按下时起作用,则应该去掉等待按键抬起的语句,但是应该注
25、意,若是在状态转移条件 中,连续两个转移条件具有相同的键值,这可能引起状态连续变化。P3口连接按键,P0口连 接的数码管显示按键值。 变量说明变量说明 nn主函数内延迟时间循环 变量 kk按键值 n0,n1,n2 n3,n4,n5,n6,n 7 各个按键按下标志t0随定时器中断次数递增变量 nn局部静态变量,随定时器中断次 数增加 table共阳数码管译码表 单片机技术基础教程与实践 30 源程序如下: #includeAT89X51.h unsignedintcodetable=0 xC0,0 xF9,0 xA4,0 xB0,0 x99,0 x92,0 x82,0 xF8,0 x80,0 x
26、90; unsignedintn0,n1,n2,n3,n4,n5,n6,n7; unsignedintkk=8; voidmain() unsignedintnn; while(1) P3=0 xff;/P3口连接8个按键作为输入 if(P3_0=0)/P3_0键按下 for(nn=0;nn1000;nn+);/延时 if(P3_0=0)/如果还在按下状态,则n0=1,kk=0;否则n0=0,kk=8; n0=1;kk=0;P2_0=0; elsen0=0; while(!P3_0);/等待按键抬起 单片机技术基础教程与实践 31 if(P3_1=0)/P3_1连接的按键处理程序 for(nn
27、=0;nn1000;nn+); if(P3_1=0)n1=1;kk=1; elsen1=0; while(!P3_1); if(P3_2=0)/P3_2连接的按键处理程序 for(nn=0;nn1000;nn+); if(P3_2=0)n2=1;kk=2; elsen2=0; while(!P3_2); if(P3_3=0)/P3_3连接的按键处理程序 for(nn=0;nn1000;nn+); if(P3_3=0)n3=1;kk=3;/P3_3连接的按键处理程序 elsen3=0; while(!P3_3); if(P3_4=0) for(nn=0;nn1000;nn+); if(P3_4=
28、0)n4=1;kk=4;/P3_4连接的按键处理程序 elsen4=0; while(!P3_4); 单片机技术基础教程与实践 32 if(P3_5=0)/P3_5连接的按键处理程序 for(nn=0;nn1000;nn+); if(P3_5=0)n5=1;kk=5; elsen5=0; while(!P3_5); if(P3_6=0)/P3_6连接的按键处理程序 for(nn=0;nn1000;nn+); if(P3_6=0)n6=1;kk=6; elsen6=0; while(!P3_6); if(P3_7=0)/P3_7连接的按键处理程序 for(nn=0;nn1000;nn+); if(P3_7=0)n7=1;kk=7; elsen7=0; while(!P3_7); P0=tablekk;/P0口连接的数码管显示按键值 单片机技术基础教程与实践 33 9.4 灯开关类例题灯开关类例题 例题例题9-3 设计一个开关灯装置,该开关灯装置在按键k(P3_0引脚)第一次按下时,三盏灯a、b和 c同时点亮,当k再次按下时,a灯立
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/DZJN 213-2023废旧锂离子电池材料再生企业清洁生产规范
- 书法艺术研学之旅行业跨境出海项目商业计划书
- 中高档餐饮AI应用行业深度调研及发展项目商业计划书
- 高清电脑摄像头与隐私保护盖行业跨境出海项目商业计划书
- 乡村农产品直销店行业跨境出海项目商业计划书
- 高端定制针织礼服系列行业深度调研及发展项目商业计划书
- 教育信息化2.0背景下2025年高校教师创新创业教育研究报告
- 二年级下学期读书分享活动计划
- 数字文化产业发展报告:2025年商业模式创新与文化产业发展与文化产业可持续发展
- 数学教学中的游戏化学习计划
- 联大学堂《人力资源管理薪酬管理(河南理工大学)》题库附答案
- 2025年下半年太原市招考社区专职社工人员易考易错模拟试题(共500题)试卷后附参考答案
- 【KAWO科握】2025年中国社交媒体平台指南报告
- 2025年财务会计师入职考试试题及答案
- 云南2025年云南省社会科学院中国(昆明)南亚东南亚研究院招聘笔试历年参考题库附带答案详解
- 健康教育在护理工作中的意义
- 2025年5月12日陕西省公务员面试真题及答案解析
- 上海市徐汇区2024-2025学年八年级(下)期中物理试卷(含解析)
- 2025-2030中国海上风电行业市场深度调研及投资策略与投资前景研究报告
- 5G共享网络的无缝连接与边缘计算协同发展-洞察阐释
- 2025-2030中国活塞杆行业市场发展趋势与前景展望战略研究报告
评论
0/150
提交评论