標(biāo)題:
狀態(tài)機程序在51單片機上正常運行
[打印本頁]
作者:
diyue
時間:
2023-12-30 17:05
標(biāo)題:
狀態(tài)機程序在51單片機上正常運行
對于51單片機由于其內(nèi)部資源的限制,運行一個打操作系統(tǒng)是比較困難的,但是我們可以使用一個狀態(tài)機來運行不同的任務(wù),這樣可以大減輕51單片機內(nèi)部資源的負擔(dān),也實現(xiàn)了多任務(wù)的架構(gòu)。
單片機源程序如下:
#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() //空閑任務(wù)
{
Uart1_SendString("Task7\r\n");
delay_ms(250);
}
void main()
{
Uart1_Init();//串口初始化
Init_timer0(); //定時器0初始化
Task_List[0]=Task0; //初步化任務(wù)表
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++) //查找最高優(yōu)先級任務(wù)
{
if(Event_List[Task_PQH]>0) //有事件發(fā)生
break;
}
Task_List[Task_PQH](); //執(zhí)行任務(wù)
}
}
復(fù)制代碼
原理圖: 無
仿真: 無
代碼:
狀態(tài)機.7z
(19.26 KB, 下載次數(shù): 33)
2023-12-30 23:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
4758866
時間:
2024-1-17 22:45
感謝樓主分享,認真學(xué)習(xí)一下
作者:
joyb
時間:
2024-1-18 08:21
狀態(tài)機,一般指有限狀態(tài)機(英語:finite-state machine,縮寫:FSM)又稱有限狀態(tài)自動機(英語:finite-state automaton,縮寫:FSA),是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學(xué)計算模型。有限狀態(tài)機是在自動機理論和計算理論中研究的一類自動機。
有限狀態(tài)機歸屬于自動機理論范疇,從自動機理論的領(lǐng)域分層圖可以看出,越往外層,概念越復(fù)雜。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1