单片机C语言 -- 基于条件选择的状态机编程技巧——用户“刘工程师”撰稿

发布时间:2020-05-9 阅读量:953 来源: 我爱方案网 作者:

【编者按】感谢阅读本文,将基于单片机C语言,讲述有状态机编程。通过使用状态机进行编程,需要将任务分解成有限个稳定状态,分为四个状态,通过编程实现有限状态机,再以LoRa推送为例进行说明。作者拥有10年的单片机经验,通过实践将知识提供给需要的工程师,让更多的工程师从中所学,从中受益。

 

阅读说明:

1、Keil4 C51工程网址:

httpsyunpan.360.cnsurl_yrivR7JxUxu

2、需要一定的C语言基础,才看得懂此文。

 

一、有限状态机


有限状态机是一种概念思想,把复杂的控制逻辑分解成有限个稳定状态,组成闭环系统,通过事件触发,让状态机按设定的顺序处理事务。单片机C语言的状态机编程,是利用条件选择语句(switch -- case)切换状态,通过函数内部指令改变状态机状态,让程序按设定的顺序执行。

 

二、应用说明


1、要想使用状态机进行编程,需要将任务分解成有限个稳定状态。

2、举例说明


图片2.png


上图为按钮按键典型的动作图,可以提取为四个状态,分别为状态1 = 按键谈起状态、状态2 = 按键不稳定状态1、状态3 = 按键按下状态、状态4 = 按键不稳定状态2。


有限状态机实现如下:

 

图片3.png


三、编程实例


以LoRa推送为例进行说明。

 

1、定义有限状态机:


图片4.png


共5个状态,请求数据、推送、验证、待机、唤醒。

   

2、主函数:


图片5.png


执行有限状态机。

 

3、执行函数



图片6.png


在执行函数中切换状态机的状态。


四、小结


单片机C语言的状态机编程,是利用条件选择语句(switch case)切换状态,通过函数内部指令触发状态切换,让程序按设定的顺序执行。状态机编程涉及的知识点很多,本文只是简要的介绍了下,仅仅起到抛砖引玉的作用,日后设计过程中,需要不断的总结经验,沟通交流,以达到真正的理解,灵活运用。


开源项目,开发工具,技术资料以及更多原创技术文章,请关注微信公众号:硬件家园 

 

作者:刘杰,在软硬件技术上有10年的经验,在单片机的经验更是突出,解决过多个单片机难题,可接单片机和软件开发等项目。目前在开讲单片机的教学,教程会在我爱方案网更新,敬请期待!



相关资讯
无源晶振YSX321SL应用于高精度HUD平视显示系统YXC3225

在现代汽车行业中,HUD平视显示系统正日益成为驾驶员的得力助手,为驾驶员提供实时导航、车辆信息和警示等功能,使驾驶更加安全和便捷。在HUD平视显示系统中,高精度的晶振是确保系统稳定运行的关键要素。YSX321SL是一款优质的3225无源晶振,拥有多项卓越特性,使其成为HUD平视显示系统的首选。

拥有卓越性能的高精度超薄低功耗心电贴—YSX211SL

随着医疗技术的进步,心电监护设备在日常生活和医疗领域中起到了至关重要的作用。而无源晶振 YSX211SL 作为一种先进的心电贴产品,以其独特的优势在市场上备受瞩目。

可编程晶振选型应该注意事项

对于可编程晶振选型的话,需要根据企业的需求选择。在选择可编程晶振的时候注重晶振外观、晶振的频率、晶振的输出模式、晶振的型号等等,这些都是要注意的,尤其是晶振的频率和晶振输出模式以及晶振的型号都是需要注意的。

性能高的服务器—宽电压有源晶振YSO110TR 25MHZ,多种精度选择支持±10PPM—±30PPM

在现代科技发展中,服务器扮演着越来越重要的角色,为各种应用提供强大的计算和数据存储能力。而高品质的服务器组件是确保服务器稳定运行的关键。YSO110TR宽电压有源晶振,作为服务器的重要组成部分,具备多项优势,成为业界必备的可靠之选。

差分晶振怎么测量

其实对于差分晶振怎么测量方式有很多种,主要还是要看自己选择什么样的方式了,因为选择不同的测量方式步骤和操作方式是不同的。关于差分晶振怎么测量的方式,小扬给大家详细的分享一些吧!