开发平台:AVR128
移植系统:uC/OS-II
功能: 系统建立两个任务,操作“8个LED” 以及 “蜂鸣器”(附上LED和蜂鸣器 部分的原理图)
代码量少,添加了个人注释,容易理解
电路原理图如下:
LED和蜂鸣器部分原理图
此工程为TS8900-M128开发板uCOSii移植教程代码
功能是
1--8个LED进行“亮-灭”操作
2--控制蜂鸣器“响-不响”操作
单片机源程序如下:
- /*
- ***********************************Copyright(c)*****************************
- *
- * All Rights Reserved
- *
- *
- *---------------------------------File Info---------------------------------
- *File Name : main.c
- *Descriptor : 主程序
- *Create By :
- *Create Date : 2008-9-26
- *Version : V1.0
- *Note :
- *
- *---------------------------------------------------------------------------
- *Modified By :
- *Modified Date :
- *Version :
- *Note :
- *
- ****************************************************************************
- */
- #define _IN_MAIN_
- #include "config.h"
- #define OS_TASK_MAIN_STK_SIZE 200
- #define OS_TASK_MAIN_HARD_STK_SIZE 40
- #define OS_TASK2_STK_SIZE 200
- #define OS_TASK2_HARD_STK_SIZE 40
- OS_STK TaskMainStk[OS_TASK_MAIN_STK_SIZE];
- OS_STK Task2Stk[OS_TASK2_STK_SIZE];
- void* MainMsg[16];
- /***************************************************************************
- *Function Name :OSTickISRInit
- *Description :系统时钟初始化
- *Input parameters :
- *Return Values: :
- *Global Variables :
- *Calling Modules :
- ***
- *Create By :
- *Create Tate :2008-9-26
- ***
- *Modified By :
- *Modified Date :
- *Note :
- ****************************************************************************/
- void OSTickISRInit(void)
- {
- TCNT0 = 0x00;//将“定时计数器0”清零
- OCR0 = TCNT0_INIT;// “OCR0”为“输出比较寄存器0”
- TCCR0 = TMC8_CK128;// “TCCR0”为“定时计数器0的控制寄存器” WGM01 = 3 ;CS02 = 2 ; CS00 = 0 ; BIT(x) (1 << (x)) ,即有TCCR0 = (1<<3)|(1<<2)|(1<<0) ,
- // --设定“CTC--匹配时清楚定时计数器”模式、“COM01- COM00--正常端口操作”、“CS02-CS01-CS00--时钟选择位定义为系统时钟128分频”
- TIMSK = BIT(OCIE0);// “TIMSK-定时计数器中断屏蔽寄存器”;“OCIE0 = 1” ;使能“定时计数器0” 的输出比较匹配中断。
- }
- /***************************************************************************
- *Function Name :MainTask
- *Description :主线程任务
- *Input parameters :
- *Return Values: :
- *Global Variables :
- *Calling Modules :
- ***
- *Create By :
- *Create Tate :2008-9-26
- ***
- *Modified By :
- *Modified Date :
- *Note :
- ****************************************************************************/
- void Task2(void* pData);
- /***************************************************************************
-
- “主任务”的主要“任务代码”
- ****************************************************************************/
- void MainTask(void* pData)
- {
- uint8 byTemp = 0xff;
- pData = pData;
- DDRA = 0xff;// --GpioA引脚方向为“输出”
- DDRE = 0xff;// --GpioE引脚方向为“输出”
- OSTickISRInit();// --系统时钟初始化
-
- OSTaskStkSize = OS_TASK2_STK_SIZE;// --为第二个任务配置“堆栈大小”以及“硬件堆栈大小”
- OSTaskHardStkSize = OS_TASK2_HARD_STK_SIZE;
-
- OSTaskCreate(Task2, (void*)0, (OS_STK*)&Task2Stk[OS_TASK2_STK_SIZE - 1], 1);// --建立“次任务”,优先级为1
-
- while(TRUE)
- {
- byTemp = ~byTemp;// --将定义的字节取反,用于对LED输出相反的电平,即“亮-灭”
- PORTA = byTemp;// --将值从GpioA 发送出去
- PORTE = 0x00;// --将74HC573的“LE-锁存引脚”拉低,将数据填到74HC573的寄存器中
- PORTE = 0xff;// --将“LE”拉高,执行直通模式
- OSTimeDlyHMSM(0, 0, 0, 600);// --执行“任务延时”,等系统执行其他“最高优先级”的任务
- //(在优先级为0的“主任务”处于等待状态”,那么当前的“最高优先级”任务就是“Task2”)
- }
- }
- /***************************************************************************
- *Function Name :Task2
- *Description :
- *Input parameters :
- *Return Values: :
- *Global Variables :
- *Calling Modules :
- ***
- *Create By :
- *Create Tate :2008-9-26
- ***
- *Modified By :
- *Modified Date :
- *Note :
- ****************************************************************************/
- void Task2(void* pData)
- {
- pData = pData;
- DDRG |= BIT(4);// --0x10 GpioG^4 设置为输出,控制“蜂鸣器”的引脚
- while(TRUE)
- {
- PORTG ^= BIT(4);
- OSTimeDlyHMSM(0, 0, 1, 0);
- }
- }
- /***************************************************************************
- *Function Name :main
- *Description :主函数
- *Input parameters :
- *Return Values: :
- *Global Variables :
- *Calling Modules :
- ***
- *Create By :
- *Create Tate :2008-9-26
- ***
- *Modified By :
- *Modified Date :
- *Note :
- ****************************************************************************/
- void main(void)
- {
- OSTaskStkSize = OS_TASK_STK_SIZE;// --设置堆栈的总空间
- OSTaskHardStkSize = OS_TASK_HARD_STK_SIZE;// --设置硬件堆栈空间(AVR单片机)
- OSInit();// --uCOSII初始化
- OSTaskStkSize = OS_TASK_MAIN_STK_SIZE;// “主任务”堆栈的总大小空间
- OSTaskHardStkSize = OS_TASK_MAIN_HARD_STK_SIZE;// “主任务”的硬件堆栈空间
- OSTaskCreate(MainTask, (void*)0, (OS_STK*)&TaskMainStk[OS_TASK_MAIN_STK_SIZE - 1], 0);// --建立“主任务”,“堆栈增长方向为向下”,拥有“最高优先级”
- OSStart();// --系统启动
- }
复制代码
所有资料51hei提供下载:
TS8900-M128-uCOS-II移植.rar
(232.22 KB, 下载次数: 23)
|