開發平臺:AVR128
移植系統:uC/OS-II
功能: 系統建立兩個任務,操作“8個LED” 以及 “蜂鳴器”(附上LED和蜂鳴器 部分的原理圖)
代碼量少,添加了個人注釋,容易理解
電路原理圖如下:
LED和蜂鳴器部分原理圖.png (79.79 KB, 下載次數: 89)
下載附件
LED和蜂鳴器部分原理圖
2018-9-15 11:39 上傳
此工程為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)
2018-9-15 11:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|