標(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)。

單片機源程序如下:

  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include "delay.h"
  5. #include "timer0.h"
  6. #include "usart1.h"


  7. #define   Task_Size      8
  8. unsigned char Event_List[8];
  9. unsigned char Task_PQH;
  10. void (*Task_List[Task_Size])(void);

  11. void Task0()
  12. {
  13.   Uart1_SendString("Task0\r\n");
  14.         delay_ms(250);
  15. }

  16. void Task1()
  17. {
  18.   Uart1_SendString("Task1\r\n");
  19.         delay_ms(250);
  20. }

  21. void Task2()
  22. {
  23.         Uart1_SendString("Task2\r\n");
  24.         delay_ms(250);
  25. }

  26. void Task3()
  27. {
  28.         Uart1_SendString("Task3\r\n");
  29.         delay_ms(250);
  30. }

  31. void Task4()
  32. {
  33.         Uart1_SendString("Task4\r\n");
  34.         delay_ms(250);
  35. }

  36. void Task5()
  37. {
  38.         Uart1_SendString("Task5\r\n");
  39.         delay_ms(250);
  40. }


  41. void Task6()   
  42. {
  43.         Uart1_SendString("Task6\r\n");
  44.   delay_ms(250);        
  45. }

  46. void Task7()       //空閑任務(wù)
  47. {
  48.   Uart1_SendString("Task7\r\n");
  49.         delay_ms(250);
  50. }


  51. void main()
  52. {
  53.         Uart1_Init();//串口初始化
  54.         Init_timer0();      //定時器0初始化
  55.         Task_List[0]=Task0;     //初步化任務(wù)表
  56.   Task_List[1]=Task1;
  57.   Task_List[2]=Task2;
  58.   Task_List[3]=Task3;
  59.   Task_List[4]=Task4;
  60.   Task_List[5]=Task5;
  61.   Task_List[6]=Task6;
  62.   Task_List[7]=Task7;
  63.         
  64.         for(Task_PQH=0;Task_PQH<Task_Size;Task_PQH++)   //初始化事件
  65. {
  66.    Event_List[Task_PQH]=0;
  67. }
  68.   while(1)
  69. {
  70.                  for(Task_PQH=0;Task_PQH<Task_Size-1;Task_PQH++)   //查找最高優(yōu)先級任務(wù)
  71.                  {
  72.                          if(Event_List[Task_PQH]>0)                   //有事件發(fā)生
  73.                          break;
  74.                  }

  75.                  Task_List[Task_PQH]();           //執(zhí)行任務(wù)
  76. }
  77. }
復(fù)制代碼
原理圖: 無
仿真: 無
代碼: 狀態(tài)機.7z (19.26 KB, 下載次數(shù): 33)

作者: 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