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

📄 ex1.c

📁 ucosii移植到C8051F023上的源代码。 有三个任务
💻 C
字号:
#include "..\uc_os_II\includes.h"

OS_STK xdata Task1Stack[CPU_MAX_STK_SIZE];
OS_STK xdata Task2Stack[CPU_MAX_STK_SIZE];
OS_STK xdata Task3Stack[CPU_MAX_STK_SIZE];


void Task1(void xdata * ppdata) reentrant
{
	ppdata = ppdata;
	while(1)
	{
		OSTimeDlyHMSM(0, 0, 2, 0);
		printf("\n\n\n\n\n");
		printf("\n这里是任务1 的输出!!!!!!");
		printf("\n-------------------------------");
		printf("\n恭喜发财!!!");
		printf("\nuC/OS II 正在运行");
		printf("\nuC/OS II 源码开放的嵌入式实时操作系统");
	}
}

void Task2(void xdata * ppdata) reentrant
{
	ppdata = ppdata;
	while(1)
	{
		OSTimeDlyHMSM(0, 0, 8, 0);
		printf("\n\n\n\n\n");
		printf("\n这里是任务2 的输出!!!!!!");
		printf("\n-------------------------------");
		printf("\n");
		printf("本工程移植时间:");
		printf(__DATE__);
		printf(" ");
		printf(__TIME__);
	}
}

void Task3(void xdata * ppdata) reentrant
{
	ppdata = ppdata;
	while(1)
	{
		OSTimeDlyHMSM(0, 0, 16, 0);
		printf("\n\n\n\n\n");
		printf("\n这里是任务3 的输出!!!!!!");
		printf("\n-------------------------------");
		printf("\n高时兵");
		printf("\nceeback@qq.com");
		printf("\n福建泉州铁通电子设备有限公司");
	}
}

void SerialInitial()
{
	/* set TI to 1, set TR1 to 1 */
	SCON = 0x52;	/* SM0 SM1 =1 SM2 REN TB8 RB8 TI RI */
	TMOD = 0x20;	/* GATE=0 C/T-=0 M1 M0=2 GATE C/T- M1 M0 */
	TH1  = 0xfd;	/* 19200*/
	PCON = 0x80;	// 38400
	TCON = 0x40;	/* 01101001 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT */
}

void InterruptInitial()
{
	/* set timer. 50ms, THTL = 3caf when cpu at 12MHz */
	TMOD |= 0x01;
	TH0 = 0x70;
	TL0 = 0x00;
	/* TR0 is set in OSStart() */
	ET0 = 1;
}

sfr WDTCN    =	 0xFF;  
sfr CKCON    =   0x8E;
sfr EMI0CF   =  0xA3;
sfr XBR0     =  0xE1;
sfr XBR2     =  0xE3;
sfr OSCXCN   =  0xB1;
sfr OSCICN   =  0xB2;


void initial_cpu(void)
{
	unsigned int idata i = 0;
//Reset_Sources_Init()
//	EA = 0;
	WDTCN	  =	0xDE;
	WDTCN	  =	0xAD;
//	EA = 1;
	//RSTSRC	= 0x02;	

//Timer_Init()			// T0 为系统计时,10	ms 中断一次	
	CKCON	  =	0x00;	// T0 使用的是系统时钟的 12	分频,其计数每 1	约为 0.5425	us.	
	TMOD	  =	0x21;
	TH0		  =	0xB8;	// T0:10 ms	中断一次
	TH1		  =	0xFa;
	TCON	  =	0x50;	//启动定时器.
/*	T2CON	  =	0x34;
	RCAP2L	  =	0xB8;
	RCAP2H	  =	0xFF;
	//TMR3CN	  =	0x04;	// T3:	us 中断一次,用于 DAC 输出,其中断标志必须手动清 0
	TMR3H	  =	0xff;
	TMR3RLH	  =	0xff;	// T3 总是16 位自动重载方式
	TMR3RLL	  =	0xf4;	
*/
//UART_Init()
	//PCON	  =	0x80;
	SCON	  =	0x50;
	//SCON1	  =	0x50;

//EMI_Init()
	EMI0CF	  =	0x07;



	//P0MDOUT	  =	0x50;	// /RD,/CWR,/INT0,A11 设置为推挽输出方式.
	//P2MDOUT	  =	0x01;
	//P2MDOUT	  =	0x08;
	XBR0	  =	0x04;
	//XBR1	  =	0x04;
	XBR2	  =	0x46;

//Oscillator_Init()	
	OSCXCN	  =	0x67;
	for	(i = 0;	i <	5000; i++);	 //	Wait 1ms for initialization	
	while ((OSCXCN & 0x80) == 0);
	OSCICN	  =	0x08;
}

main()
{
	initial_cpu();
	SerialInitial();
	InterruptInitial();
    OSInit();
    printf("\nstart");
    OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],2);
	OSTaskCreate(Task2, (void xdata *)0, &Task2Stack[0],3);
	OSTaskCreate(Task3, (void xdata *)0, &Task3Stack[0],4);
    OSStart();
}

⌨️ 快捷键说明

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