亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11011|回復: 3
收起左側

Easy51RTOS一個簡單的51實時操作系統源程序與proteus仿真原理圖

[復制鏈接]
ID:310611 發表于 2018-4-18 09:20 | 顯示全部樓層 |閱讀模式
一個簡單的51實時操作系統程序,內含電路可用
Easy51RTOS仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
0.jpg

單片機源程序(主程序)如下:
  1. #include <reg51.h>
  2. #include "os_cfg.h"


  3. #define TASK_DELAY0 TIME_PER_SEC/50                //任務0的執行頻度       
  4. #define TASK_DELAY1 TIME_PER_SEC/150    //任務1的執行頻度
  5. #define TASK_DELAY2 TIME_PER_SEC/160        //任務2的執行頻度
  6. #define TASK_DELAY3 TIME_PER_SEC/2                //任務3的執行頻度
  7.        
  8. #define uchar unsigned char
  9. #define uint unsigned int

  10. void (*(task[]))()={task0,task1,task2,task3};//函數指針數組


  11. /*主函數*/
  12. void main()
  13. {
  14.         uchar i;
  15.         os_timer0_init();
  16.         while(1)
  17.         {
  18.                 for(i=0;i<MAX_TASK;i++)
  19.                 {
  20.                         if(task_delay[i]==0)       
  21.                         {
  22.                                 run(task[i]);break;
  23.                         }
  24.                 }
  25.         }
  26. }

  27. /*任務體0*/
  28. void task0(void)
  29. {
  30.         //添加任務內容
  31.         task_delay[0]=TASK_DELAY0;                
  32. }

  33. /*任務體1*/
  34. void task1(void)
  35. {
  36.         //添加任務內容
  37.         task_delay[1]=TASK_DELAY1;
  38. }

  39. /*任務體2*/
  40. void task2(void)
  41. {
  42.         //添加任務內容
  43.         task_delay[2]=TASK_DELAY2;
  44. }

  45. /*任務體3*/
  46. void task3(void)
  47. {
  48.         //添加任務內容
  49.         task_delay[3]=TASK_DELAY3;
  50. }

復制代碼
os_c.c
  1. #include "os_cfg.h"
  2. unsigned char task_delay[MAX_TASK];

  3. //定時器0初始化
  4. void os_timer0_init(void)
  5. {
  6.         unsigned char i;
  7.         for(i=0;i<MAX_TASK;i++)
  8.         {
  9.                 task_delay[i]=0;
  10.         }
  11.         TMOD = (TMOD & 0XF0) | 0X01;                                 //定時器0工作在模式1,16Bit定時器模式
  12.         TH0 = (65536-CLOCK/TIME_PER_SEC/12) / 256;        //CRY_OSC,TIME_PER_SEC在easycfg.h中配置
  13.           TL0 = (65536-CLOCK/TIME_PER_SEC/12) % 256;             
  14.         TR0 =1;
  15.         ET0 =1;                                                                        //開啟定時器和中斷
  16. }

  17. // 系統OS定時中斷服務
  18. void os_timer0(void) interrupt 1
  19. {
  20.            unsigned char i;
  21.         TH0 = (65536-CLOCK/TIME_PER_SEC/12) / 256;        //CRY_OSC,TIME_PER_SEC在easycfg.h中配置
  22.           TL0 = (65536-CLOCK/TIME_PER_SEC/12) % 256;             
  23.           for(i=0;i<MAX_TASK;i++)
  24.         {
  25.                 if(task_delay[i])
  26.                 {
  27.                         task_delay[i]--;//每節拍對任務延時變量減1,減至0后,任務就緒。
  28.                 }
  29.         }
  30. }

  31. void run(void (*ptask)())
  32. {
  33.    (*ptask)();
  34. }

復制代碼

0.png

所有資料51hei提供下載:
44915610Easy51RTOS.rar (88.76 KB, 下載次數: 78)


回復

使用道具 舉報

ID:346018 發表于 2018-6-6 14:32 | 顯示全部樓層
這個程序有什么作用?
回復

使用道具 舉報

ID:346018 發表于 2018-6-6 14:32 | 顯示全部樓層
沒看到哪個任務在執行
回復

使用道具 舉報

ID:598175 發表于 2019-8-9 09:31 | 顯示全部樓層

這個程序有什么作用?
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表