找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 1699|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

狀態(tài)機(jī)程序在51單片機(jī)上正常運(yùn)行

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:731890 發(fā)表于 2023-12-30 17:05 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
對于51單片機(jī)由于其內(nèi)部資源的限制,運(yùn)行一個(gè)打操作系統(tǒng)是比較困難的,但是我們可以使用一個(gè)狀態(tài)機(jī)來運(yùn)行不同的任務(wù),這樣可以大減輕51單片機(jī)內(nèi)部資源的負(fù)擔(dān),也實(shí)現(xiàn)了多任務(wù)的架構(gòu)。

單片機(jī)源程序如下:

  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();      //定時(shí)器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)先級(jí)任務(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)機(jī).7z (19.26 KB, 下載次數(shù): 33)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:145357 發(fā)表于 2024-1-17 22:45 來自手機(jī) | 只看該作者
感謝樓主分享,認(rèn)真學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:1064915 發(fā)表于 2024-1-18 08:21 | 只看該作者
       狀態(tài)機(jī),一般指有限狀態(tài)機(jī)(英語:finite-state machine,縮寫:FSM)又稱有限狀態(tài)自動(dòng)機(jī)(英語:finite-state automaton,縮寫:FSA),是表示有限個(gè)狀態(tài)以及在這些狀態(tài)之間的轉(zhuǎn)移和動(dòng)作等行為的數(shù)學(xué)計(jì)算模型。有限狀態(tài)機(jī)是在自動(dòng)機(jī)理論和計(jì)算理論中研究的一類自動(dòng)機(jī)。
       有限狀態(tài)機(jī)歸屬于自動(dòng)機(jī)理論范疇,從自動(dòng)機(jī)理論的領(lǐng)域分層圖可以看出,越往外層,概念越復(fù)雜。
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表