标题:
状态机程序在51单片机上正常运行
[打印本页]
作者:
diyue
时间:
2023-12-30 17:05
标题:
状态机程序在51单片机上正常运行
对于51单片机由于其内部资源的限制,运行一个打操作系统是比较困难的,但是我们可以使用一个状态机来运行不同的任务,这样可以大减轻51单片机内部资源的负担,也实现了多任务的架构。
单片机源程序如下:
#include <reg52.h>
#include <stdio.h>
#include <stdlib.h>
#include "delay.h"
#include "timer0.h"
#include "usart1.h"
#define Task_Size 8
unsigned char Event_List[8];
unsigned char Task_PQH;
void (*Task_List[Task_Size])(void);
void Task0()
{
Uart1_SendString("Task0\r\n");
delay_ms(250);
}
void Task1()
{
Uart1_SendString("Task1\r\n");
delay_ms(250);
}
void Task2()
{
Uart1_SendString("Task2\r\n");
delay_ms(250);
}
void Task3()
{
Uart1_SendString("Task3\r\n");
delay_ms(250);
}
void Task4()
{
Uart1_SendString("Task4\r\n");
delay_ms(250);
}
void Task5()
{
Uart1_SendString("Task5\r\n");
delay_ms(250);
}
void Task6()
{
Uart1_SendString("Task6\r\n");
delay_ms(250);
}
void Task7() //空闲任务
{
Uart1_SendString("Task7\r\n");
delay_ms(250);
}
void main()
{
Uart1_Init();//串口初始化
Init_timer0(); //定时器0初始化
Task_List[0]=Task0; //初步化任务表
Task_List[1]=Task1;
Task_List[2]=Task2;
Task_List[3]=Task3;
Task_List[4]=Task4;
Task_List[5]=Task5;
Task_List[6]=Task6;
Task_List[7]=Task7;
for(Task_PQH=0;Task_PQH<Task_Size;Task_PQH++) //初始化事件
{
Event_List[Task_PQH]=0;
}
while(1)
{
for(Task_PQH=0;Task_PQH<Task_Size-1;Task_PQH++) //查找最高优先级任务
{
if(Event_List[Task_PQH]>0) //有事件发生
break;
}
Task_List[Task_PQH](); //执行任务
}
}
复制代码
原理图: 无
仿真: 无
代码:
状态机.7z
(19.26 KB, 下载次数: 33)
2023-12-30 23:19 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
4758866
时间:
2024-1-17 22:45
感谢楼主分享,认真学习一下
作者:
joyb
时间:
2024-1-18 08:21
状态机,一般指有限状态机(英语:finite-state machine,缩写:FSM)又称有限状态自动机(英语:finite-state automaton,缩写:FSA),是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。有限状态机是在自动机理论和计算理论中研究的一类自动机。
有限状态机归属于自动机理论范畴,从自动机理论的领域分层图可以看出,越往外层,概念越复杂。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1