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

📄 main.c

📁 UCOS在51上的移植,绝对经典!可以较少开发人员的工作量
💻 C
字号:

#ifndef  OS_MASTER_FILE
#include "includes.h"
#endif
//声明任务堆栈
OS_STK 	TestTask4Stk[64];
OS_STK	TestTask5Stk[64];
OS_STK	TestTask6Stk[64];
OS_STK	TestTask7Stk[64];

void	InitS0 ( unsigned int baud_rate ) TASK_REENTRANT	//baud_rate,n,8,1
{
	ES		= 0;//1;											//EA=1;ET1=1;  
	SCON 	= 0x50;    										/* 0x52;//SCON */
	TMOD 	|= 0x20;    									/*0x20;// TMOD */
	TCON 	= 0x40;//0x60;    										/*0x60;// TCON */
	PCON	= PCON&0x7f;
	switch(baud_rate){										//波特率设置
		case 1200:
			TL1	= 0xe8;TH1	= 0Xe8;break;					//1200
		case 2400:
			TL1	= 0xf4;TH1	= 0Xf4;break;					//2400
		case 4800:
			TL1	= 0xfa;TH1	= 0Xfa;break;					//4800
		case 9600:
			TL1	= 0xfd;TH1	= 0Xfd;break;					//9600
		case 19200:
			PCON	= PCON|0x80;TL1	= 0xfd;TH1	= 0Xfd;break;//19200
		case 38400:
			PCON	= PCON|0x80;TL1	= 0xfe;TH1	= 0Xfe;break;//38400
		default:
	 		TL1=0xfd;TH1=0Xfd;break;						//9600
	}
}
//********************************************************************************************************
//
//				设置时钟节拍中断函数_?OSTickISR的tick率
//	NOTE:	1:  一般tick率为10-100次/秒;
//			2:  特别注意不要在这里启动时钟节拍!!!
//			3:  最好在第一个任务(优先级最高的任务)里启动tick时钟节拍
//			4:  请尽量不要更改中断优先级寄存器IP的低2位,当INT0与T0同级时就会影响到正常tick
//
//
//********************************************************************************************************
void	InitTick ( void ) TASK_REENTRANT
{

	TMOD	|= 0x01;			//选T0,方式1(16位)
	TH0		= 0x3c;				//定时50ms
	TL0		= 0x0b0;
	TR0		= 1;
	TI		= 1;
	//TF0		= 1;
	IP		= 0x02;				//设置中断优先级T0最高
	ET0 	= 1;
	EA		= 1;
	//请注意在第一个任务里启动T0,即:TR0=1;
	//		在OS_CPU_A.ASM的_?OSTickISR里使TH0=0x3ch;TL0=0x0b0h;
}
void	TestTask4 (void * os_pdata) TASK_REENTRANT
{//本任务优先级为4
	os_pdata	= os_pdata;

	InitS0 ( 38400 );
	InitTick();				//初始化OSTickISR()
	printf ("\n*********************************************************\n");
	printf ("************************任务:TASK-4************************\n");
	printf ("***************这是最高优先级任务的第一次启动**************\n");
	printf ("***************多任务已经启动,tick已经开始	****************\n");
	printf ("***********************************************************\n");
	while (1)
	{
		printf ("*****TASK-44444\n");
		OSTimeDly(100);
	}

}
void	TestTask5(void * os_pdata) TASK_REENTRANT
{//本任务优先级为5
	os_pdata	= os_pdata;

	while(1)
	{
		printf ("********************TASK-55555\n");
		OSTimeDly(200);
	}
}
void	TestTask6(void * os_pdata) TASK_REENTRANT
{//本任务优先级为6
	os_pdata	= os_pdata;

	while(1)
	{
		printf ("***********************************TASK-66666\n");
		OSTimeDly(400);
	}
}
void	TestTask7(void * os_pdata) TASK_REENTRANT
{//本任务优先级为7
	os_pdata	= os_pdata;

	while(1)
	{
		printf ("**********************************************************************TASK-77777\n");
		OSTimeDly(800);
	}
}

void main (void)
{
	OSInit();

/*INT8U  OSTaskCreate (void (*task)(void *pd)TASK_REENTRANT, 
						void *os_pdata, 
						OS_STK *ptos, 
						INT8U prio)TASK_REENTRANT)
*/
	OSTaskCreate (TestTask4,(void *)0, &TestTask4Stk[63], 4);
	OSTaskCreate (TestTask5,(void *)0, &TestTask5Stk[63], 5);
	OSTaskCreate (TestTask6,(void *)0, &TestTask6Stk[63], 6);
	OSTaskCreate (TestTask7,(void *)0, &TestTask7Stk[63], 7);

	OSStart();
}					    


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -