📄 main.c
字号:
/*
*********************************************************************************************************
* uC/OS-II
* The Real-Time Kernel
*
* (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
* All Rights Reserved
*
* AT89C/S5x Specific Code
* LARGE MEMORY MODEL
*
* Keil C/C++ V7.09
*
* 文件名 : Main.C
* 作者 : 华歆 Huaxin@wxzte.com 中兴光电子 研发一部 2005-07-07 22:40
; 功能 : uC/OS-II在MCS51微控制器上的移植试验
*********************************************************************************************************
*/
#ifndef OS_MASTER_FILE
#include "includes.h"
#endif
void TestTask1(void *os_pdata) reentrant;
void TestTask2(void *os_pdata) reentrant;
void TestTask3(void *os_pdata) reentrant;
void TestTask4(void *os_pdata) reentrant;
OS_STK TestTask1Stk[MaxStkSize];
OS_STK TestTask2Stk[MaxStkSize];
OS_STK TestTask3Stk[MaxStkSize];
OS_STK TestTask4Stk[MaxStkSize];
void InitS0 ( INT16U baud_rate ) reentrant
{
ES = 0;
SCON = 0x50;
TMOD |= 0x20;
TR1 = 1;
PCON = PCON&0x7f;
switch( baud_rate ){
case 1200:
TL1 = 0xe8; TH1 = 0xe8; break;
case 2400:
TL1 = 0xf4; TH1 = 0xf4; break;
case 4800:
TL1 = 0xfa; TH1 = 0xfa; break;
case 9600:
TL1 = 0xfd; TH1 = 0xfd; break;
case 19200:
PCON = PCON|0x80; TL1 = 0xfd; TH1 = 0xfd; break;
case 38400:
PCON = PCON|0x80; TL1 = 0xfe; TH1 = 0xfe; break;
default:
TL1 = 0xfd; TH1 = 0xfd; break;
}
}
//********************************************************************************************************
//
// 设置时钟节拍中断函数_?OSTickISR的tick率
// NOTE: 1: 一般tick率为10-100次/秒;
// 2: 特别注意不要在这里启动时钟节拍!!!
// 3: 最好在第一个任务(优先级最高的任务)里启动tick时钟节拍
// 4: 尽量不要更改中断优先级寄存器IP的低2位,当INT0与T0同级时就会影响到正常tick
//
//********************************************************************************************************
void InitTick ( void ) reentrant
{
TMOD |= 0x01;
TH0 = 0xb8;
TL0 = 0x00;
TI = 1;
IP = 0x02;
ET0 = 1;
EA = 1;
TR0 = 1;
}
void main (void)
{
OSInit();
Comm_Port=0;
P12887a=0x20;
Lcd1602Init();
OSTaskCreate (TestTask1,(void *)0, &TestTask1Stk[0], 1);
OSTaskCreate (TestTask2,(void *)0, &TestTask2Stk[0], 2);
OSTaskCreate (TestTask3,(void *)0, &TestTask3Stk[0], 3);
OSTaskCreate (TestTask4,(void *)0, &TestTask4Stk[0], 4);
OSStart();
}
void TestTask1 (void *os_pdata) reentrant
{
os_pdata = os_pdata;
InitS0(9600);
InitTick();
while (1)
{
printf ("TASK-1\n");
OSTimeDly(OS_TICKS_PER_SEC);
}
}
INT8S idata LogoStr[]=" This is a Test Program Designed by Huaxin.";
void TestTask2(void *os_pdata) reentrant
{
INT8U *cp;
cp=LogoStr;
os_pdata = os_pdata;
while(1)
{
Lcd1602Clr(2);
Lcd1602DispStr(1,2,cp);
printf ("TASK-2\n");
OSTimeDly(OS_TICKS_PER_SEC/2);
cp++;
if(*cp=='\0')
{
cp=LogoStr;
}
}
}
void TestTask3(void *os_pdata) reentrant
{
os_pdata = os_pdata;
while(1)
{
Lcd1602Clr(1);
OSTimeDly(OS_TICKS_PER_SEC/5);
Lcd1602DispStr(2,1,"uC/OS-II");
Lcd1602DispCha(10, 1, ' ');
Lcd1602DispStr(11,1,"V2.52");
printf ("TASK-3\n");
OSTimeDly(OS_TICKS_PER_SEC/5);
}
}
void TestTask4(void *os_pdata) reentrant
{
os_pdata = os_pdata;
while(1)
{
LED=0;
OSTimeDly(OS_TICKS_PER_SEC/2);
LED=1;
printf ("TASK-4\n");
OSTimeDly(OS_TICKS_PER_SEC/2);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -