找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9552|回复: 3
打印 上一主题 下一主题
收起左侧

Easy51RTOS一个简单的51实时操作系统源程序与proteus仿真原理图

[复制链接]
跳转到指定楼层
楼主
一个简单的51实时操作系统程序,内含电路可用
Easy51RTOS仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



单片机源程序(主程序)如下:
  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. }

复制代码



所有资料51hei提供下载:
44915610Easy51RTOS.rar (88.76 KB, 下载次数: 77)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:346018 发表于 2018-6-6 14:32 | 只看该作者
这个程序有什么作用?
回复

使用道具 举报

板凳
ID:346018 发表于 2018-6-6 14:32 | 只看该作者
没看到哪个任务在执行
回复

使用道具 举报

地板
ID:598175 发表于 2019-8-9 09:31 | 只看该作者

这个程序有什么作用?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表