欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 10566|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

Easy51RTOS一個(gè)簡(jiǎn)單的51實(shí)時(shí)操作系統(tǒng)源程序與proteus仿真原理圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
一個(gè)簡(jiǎn)單的51實(shí)時(shí)操作系統(tǒng)程序,內(nèi)含電路可用
Easy51RTOS仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



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


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

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


  11. /*主函數(shù)*/
  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. /*任務(wù)體0*/
  28. void task0(void)
  29. {
  30.         //添加任務(wù)內(nèi)容
  31.         task_delay[0]=TASK_DELAY0;                
  32. }

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

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

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

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

  3. //定時(shí)器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;                                 //定時(shí)器0工作在模式1,16Bit定時(shí)器模式
  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;                                                                        //開啟定時(shí)器和中斷
  16. }

  17. // 系統(tǒng)OS定時(shí)中斷服務(wù)
  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]--;//每節(jié)拍對(duì)任務(wù)延時(shí)變量減1,減至0后,任務(wù)就緒。
  28.                 }
  29.         }
  30. }

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

復(fù)制代碼



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


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

使用道具 舉報(bào)

沙發(fā)
ID:346018 發(fā)表于 2018-6-6 14:32 | 只看該作者
這個(gè)程序有什么作用?
回復(fù)

使用道具 舉報(bào)

板凳
ID:346018 發(fā)表于 2018-6-6 14:32 | 只看該作者
沒看到哪個(gè)任務(wù)在執(zhí)行
回復(fù)

使用道具 舉報(bào)

地板
ID:598175 發(fā)表于 2019-8-9 09:31 | 只看該作者

這個(gè)程序有什么作用?
回復(fù)

使用道具 舉報(bào)

5#
無(wú)效樓層,該帖已經(jīng)被刪除

本版積分規(guī)則

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

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

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