找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3354|回复: 0
收起左侧

AVR128_uC/OS-II 移植代码

[复制链接]
ID:396960 发表于 2018-9-15 11:41 | 显示全部楼层 |阅读模式
开发平台:AVR128

移植系统:uC/OS-II
功能:  系统建立两个任务,操作“8个LED”  以及 “蜂鸣器”(附上LED和蜂鸣器 部分的原理图)

代码量少,添加了个人注释,容易理解

电路原理图如下:

LED和蜂鸣器部分原理图

LED和蜂鸣器部分原理图


此工程为TS8900-M128开发板uCOSii移植教程代码

功能是
    1--8个LED进行“亮-灭”操作
    2--控制蜂鸣器“响-不响”操作

单片机源程序如下:
  1. /*
  2. ***********************************Copyright(c)*****************************
  3. *                                                                           
  4. *                                                         All Rights Reserved
  5. *                                            
  6. *
  7. *---------------------------------File Info---------------------------------
  8. *File Name             : main.c
  9. *Descriptor            : 主程序
  10. *Create By             :
  11. *Create Date           : 2008-9-26
  12. *Version               : V1.0
  13. *Note                     :
  14. *
  15. *---------------------------------------------------------------------------
  16. *Modified By          :
  17. *Modified Date  :
  18. *Version        :
  19. *Note                     :
  20. *
  21. ****************************************************************************
  22. */
  23. #define _IN_MAIN_
  24. #include "config.h"

  25. #define                          OS_TASK_MAIN_STK_SIZE                                 200
  26. #define                          OS_TASK_MAIN_HARD_STK_SIZE                            40
  27. #define                          OS_TASK2_STK_SIZE                                         200
  28. #define                          OS_TASK2_HARD_STK_SIZE                                    40

  29. OS_STK                          TaskMainStk[OS_TASK_MAIN_STK_SIZE];
  30. OS_STK                          Task2Stk[OS_TASK2_STK_SIZE];
  31. void*                                MainMsg[16];

  32. /***************************************************************************
  33. *Function Name                :OSTickISRInit       
  34. *Description        :系统时钟初始化
  35. *Input parameters   :
  36. *Return Values:           :
  37. *Global Variables         :
  38. *Calling Modules          :
  39. ***
  40. *Create By                      :
  41. *Create Tate                 :2008-9-26
  42. ***
  43. *Modified By                  :
  44. *Modified Date            :
  45. *Note                              :
  46. ****************************************************************************/
  47. void OSTickISRInit(void)
  48. {
  49.     TCNT0 = 0x00;//将“定时计数器0”清零
  50.     OCR0 = TCNT0_INIT;// “OCR0”为“输出比较寄存器0”
  51.     TCCR0 = TMC8_CK128;// “TCCR0”为“定时计数器0的控制寄存器”  WGM01 = 3 ;CS02 = 2 ; CS00 = 0 ;  BIT(x)        (1 << (x)) ,即有TCCR0 = (1<<3)|(1<<2)|(1<<0) ,
  52.                                            // --设定“CTC--匹配时清楚定时计数器”模式、“COM01- COM00--正常端口操作”、“CS02-CS01-CS00--时钟选择位定义为系统时钟128分频”

  53.         TIMSK = BIT(OCIE0);// “TIMSK-定时计数器中断屏蔽寄存器”;“OCIE0 = 1” ;使能“定时计数器0” 的输出比较匹配中断。
  54. }
  55. /***************************************************************************
  56. *Function Name                :MainTask       
  57. *Description        :主线程任务
  58. *Input parameters   :
  59. *Return Values:           :
  60. *Global Variables         :
  61. *Calling Modules          :
  62. ***
  63. *Create By                      :
  64. *Create Tate                 :2008-9-26
  65. ***
  66. *Modified By                  :
  67. *Modified Date            :
  68. *Note                              :
  69. ****************************************************************************/
  70. void Task2(void* pData);


  71. /***************************************************************************

  72. “主任务”的主要“任务代码”


  73. ****************************************************************************/
  74. void MainTask(void* pData)
  75. {       
  76.         uint8 byTemp = 0xff;
  77.     pData = pData;
  78.         DDRA = 0xff;// --GpioA引脚方向为“输出”
  79.         DDRE = 0xff;// --GpioE引脚方向为“输出”
  80.     OSTickISRInit();// --系统时钟初始化
  81.        
  82.         OSTaskStkSize     = OS_TASK2_STK_SIZE;// --为第二个任务配置“堆栈大小”以及“硬件堆栈大小”      
  83.     OSTaskHardStkSize = OS_TASK2_HARD_STK_SIZE;  
  84.        
  85.     OSTaskCreate(Task2, (void*)0, (OS_STK*)&Task2Stk[OS_TASK2_STK_SIZE - 1], 1);// --建立“次任务”,优先级为1
  86.        
  87.         while(TRUE)
  88.     {
  89.             byTemp = ~byTemp;// --将定义的字节取反,用于对LED输出相反的电平,即“亮-灭”
  90.                PORTA = byTemp;// --将值从GpioA 发送出去
  91.                 PORTE = 0x00;// --将74HC573的“LE-锁存引脚”拉低,将数据填到74HC573的寄存器中
  92.                 PORTE = 0xff;// --将“LE”拉高,执行直通模式
  93.                 OSTimeDlyHMSM(0, 0, 0, 600);// --执行“任务延时”,等系统执行其他“最高优先级”的任务
  94.                                                                         //(在优先级为0的“主任务”处于等待状态”,那么当前的“最高优先级”任务就是“Task2”)
  95.     }
  96. }
  97. /***************************************************************************
  98. *Function Name                :Task2       
  99. *Description        :
  100. *Input parameters   :
  101. *Return Values:           :
  102. *Global Variables         :
  103. *Calling Modules          :
  104. ***
  105. *Create By                      :
  106. *Create Tate                 :2008-9-26
  107. ***
  108. *Modified By                  :
  109. *Modified Date            :
  110. *Note                              :
  111. ****************************************************************************/
  112. void Task2(void* pData)
  113. {       
  114.     pData = pData;
  115.         DDRG |= BIT(4);// --0x10 GpioG^4 设置为输出,控制“蜂鸣器”的引脚
  116.         while(TRUE)
  117.     {
  118.             PORTG ^= BIT(4);
  119.             OSTimeDlyHMSM(0, 0, 1, 0);
  120.     }
  121. }
  122. /***************************************************************************
  123. *Function Name                :main       
  124. *Description        :主函数
  125. *Input parameters   :
  126. *Return Values:           :
  127. *Global Variables         :
  128. *Calling Modules          :
  129. ***
  130. *Create By                      :
  131. *Create Tate                 :2008-9-26
  132. ***
  133. *Modified By                  :
  134. *Modified Date            :
  135. *Note                              :
  136. ****************************************************************************/
  137. void main(void)
  138. {
  139.     OSTaskStkSize     = OS_TASK_STK_SIZE;// --设置堆栈的总空间      
  140.     OSTaskHardStkSize = OS_TASK_HARD_STK_SIZE;// --设置硬件堆栈空间(AVR单片机)
  141.     OSInit();// --uCOSII初始化        
  142.     OSTaskStkSize     = OS_TASK_MAIN_STK_SIZE;// “主任务”堆栈的总大小空间      
  143.     OSTaskHardStkSize = OS_TASK_MAIN_HARD_STK_SIZE;// “主任务”的硬件堆栈空间  
  144.     OSTaskCreate(MainTask, (void*)0, (OS_STK*)&TaskMainStk[OS_TASK_MAIN_STK_SIZE - 1], 0);// --建立“主任务”,“堆栈增长方向为向下”,拥有“最高优先级”
  145.         OSStart();// --系统启动
  146. }
复制代码

所有资料51hei提供下载:
TS8900-M128-uCOS-II移植.rar (232.22 KB, 下载次数: 23)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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