|
對于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
|
評分
-
查看全部評分
|