⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 本文面向首次接触uC/OS-II的程序员
💻 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 + -