历史上的今天
今天是:2024年10月28日(星期一)
2019年10月28日 | AVR128_uC/OS-II 移植代码
2019-10-28 来源:51hei
开发平台:AVR128
移植系统:uC/OS-II
功能: 系统建立两个任务,操作“8个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初始化
史海拾趣
|
;P ;P !从本网站挪过来的资料! 为了响应小杰关于FPGA入门资料编写号召,特此发此贴,提供下载。 书还没看,感觉还不错,要求FPGA有点入门的。 关于学习FPGA,首先是自己有开发板,然后,就是自己给自己立一个项目练习。这样自己会编写代码。 ...… 查看全部问答> |
|
AD采集的数据在12232上显示 ,看看我的源程序#include<reg52.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit led1=P2^3; //led端口定义sbit led2=P2^4;sbit led3=P2^5;s ...… 查看全部问答> |
|
在eboot中也不能使用物理地址直接访问内存。而使用的是虚拟地址。 我的6410版,RAM从128M升级到256M之后,系统一直没有搞定,在eboot中测试内存发现, 我映射了一段并不存在的内存到0x96000000,在eboot中写了一个循环读写,如下: for (i = 0; ...… 查看全部问答> |
|
现在公司准备做Win下的PCI设备的驱动, 以前从未接触过这样的项目, 老大让我先收集资料, 请问我该补哪方面的钙? 就是那种很普通的数据采集卡,AD转换卡 硬件平台:普通PC. 软件平台:win xp,2k ps: 我只做过dos+工控机平台的板卡程序,,就是那种 ...… 查看全部问答> |
|
注册表项[HKEY_LOCAL_MACHINE\SOFTWARE\Apps]下有许多子项,如何将它们一一读出? 在WinCE上, 注册表项 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Apps]下有许多子项, 如何将它们一一读出?… 查看全部问答> |
|
我第一次接触串口开发,很多不明白的地方。 现在手头有一设备,类似读卡器,是USB口的,装完驱动后会生成一对应的COM口。 刷卡的时候,这个外界设备会向连着的主机程序发送一串ASCII字符,我该如何获得这些数据呢? 我用超级终端链接这个COM口, ...… 查看全部问答> |
|
LCD 驱动程序上有一个DUMMY (RGB_DUMMY) 的东西,它起什么作用呀? LCD 驱动程序上有一个DUMMY (RGB_DUMMY) 的东西,它起什么作用呀? 三星6410(或BSP上)有这个东西吗? 如何设置它?… 查看全部问答> |




