Chinaunix首页 | 论坛 | 博客
  • 博客访问: 631589
  • 博文数量: 1008
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 5175
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-31 09:44
文章分类
文章存档

2012年(1008)

我的朋友

分类:

2012-08-01 10:58:58


点击(此处)折叠或打开

  1. /**
  2.  *     uCOS_51 for MCS-51
  3.  *     获取和设置系统时间
  4.  * OSTimeGet(); 获取系统时间
  5.  * OSTimeSet( ); 设置系统时间
  6.  * 2012-5-31 lzy
  7.  */

  8. #include "..\ucos_51\ucos-ii\inc\includes.h"

  9. // 任务优先级别定义
  10. #define APPSTARTPRIO     TASK_START_PRIO
  11. #define POWERLEDPRIO     OS_LOWEST_PRIO - 2        // 定义灯为最低优先级别 【空闲任务】

  12. sbit WorkLedCtrl=P3^4;    // 灯引脚定义


  13. // 栈定义
  14. OS_STK AppStartStk[TASK_STK_SIZE];
  15. OS_STK PowerLedStk[TASK_STK_SIZE];

  16. // 任务声明
  17. void AppStart(void *ppdata) REENTRANT;
  18. void PowerLed(void *ppdata) REENTRANT;        // 工作指示灯任务

  19. int main()
  20. {
  21.     InitSystem();     // 系统初始化

  22.     OSTaskCreate(AppStart, (void *)0, AppStartStk, APPSTARTPRIO);

  23.     
  24.     OSStart(); // 启动多任务管理

  25.     return 0;
  26. }

  27.   
  28. /*
  29. *********************************************************************************************************
  30. * 系统开始任务
  31. *
  32. * 描述 : 开定时器T0中断,创建消息邮箱以及所有其他的任务,然后自我删除。
  33. *
  34. * 参数 : ppdata
  35. *
  36. * 注意 : 系统启动后第一时间开定时器中断,否则系统其它任务无法得到执行。             
  37. *********************************************************************************************************
  38. */
  39. void AppStart(void *ppdata) REENTRANT
  40. {
  41.     ppdata=ppdata;

  42.     ET0=1; /* 谨记:系统启动后第一时间开定时器中断 */
  43.     
  44.     OSTaskCreate(PowerLed, (void *)0, PowerLedStk, POWERLEDPRIO);

  45.     OSTaskDel(OS_PRIO_SELF);    // 自我删除    
  46. }


  47. // 灯闪烁任务
  48. void PowerLed(void *ppdata) REENTRANT
  49. {
  50. #if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
  51.     OS_CPU_SR cpu_sr;
  52. #endif

  53.     ppdata=ppdata;

  54.     for(;;)
  55.     {
  56.         if(OSTimeGet() == 10) // 获得系统时间
  57.         {
  58.             OS_ENTER_CRITICAL();
  59.             WorkLedCtrl=!WorkLedCtrl; /* 保护临界资源 */
  60.             OS_EXIT_CRITICAL();

  61.             OSTimeSet(0);         // 设置系统时间
  62.         }
  63.     //    OSTimeDlyHMSM(0,0,1,0);
  64.     }
  65. }
源码+仿真: 复件 uCOS_51.rar   
阅读(230) | 评论(0) | 转发(0) |
0

上一篇:uCOS_51 信号量

下一篇:uCos_51 时间管理

给主人留下些什么吧!~~