usertask.c

来自「ucos-ii在C8051F020上的移植」· C语言 代码 · 共 105 行

C
105
字号
#include"includes.h"
#include"absacc.h"

#define CLK 0

sbit   LED=P1^6;
INT8U  err1=0,err2=0;
INT32U  count=0;

INT8U   key=0;
OS_STK xdata mystack1[USER_STACK_SIZE],mystack2[USER_STACK_SIZE],mystack3[USER_STACK_SIZE];
OS_EVENT *RandomSem;

void mytask1(void) KCREENTRANT;
void mytask2(void) KCREENTRANT;
void mytask3(void) KCREENTRANT;
void Timer2init(void) KCREENTRANT;
void InitTimer0(void)KCREENTRANT;



void main(void)
{	
    int i;  
	EA=0;
	WDTCN=0xde;
	WDTCN=0xad;
	//OSCICN=OSCICN|0x03;                            // delay counter

   OSCXCN = 0x67;                      // start external oscillator with
                                       // 22.1184MHz crystal

   for (i=0; i < 256; i++) ;           // XTLVLD blanking interval (>1ms)

   //while (!(OSCXCN & 0x80)) ;          // Wait for crystal osc. to settle

   OSCICN = 0x88;
	OSInit();
	RandomSem=OSSemCreate(0);
	OSTaskCreate(mytask1,(void *)0,&mystack1[0],0);
	OSTaskCreate(mytask2,(void *)0,&mystack2[0],1);
	OSTaskCreate(mytask3,(void *)0,&mystack3[0],2);
	OSStart();
}

void intisr(void) interrupt 5
{	
	OSIntEnter();
	TF2=0;
	key++;
	count++;
	if(key==20){
	  err1=OSSemPost(RandomSem);
	  key=0;
	  }
    OSIntExit();
}
void mytask1(void) KCREENTRANT
{
    unsigned long  times1=0;
    InitTimer0();
	XBR2    |= 0x40;
	P1MDOUT |= 0x40; 
	Timer2init();
	OSStatInit();
    for(;;)	 
	{
	  times1++;
	  OSSemPend(RandomSem,0,&err2);
	  LED=~LED;
    }
}
void mytask2(void) KCREENTRANT
{	
    INT32U  times2;

    for(times2=0;;)
	{
	times2++;
	WDTCN=0xa5;//喂狗	  
    OSTimeDly(1);
    }
}
void mytask3(void) KCREENTRANT
{
    unsigned long  times3=0;
    for(;;)
	{
	times3++;
    OSTimeDly(5);
    }
}



void Timer2init(void) KCREENTRANT
{
	//CKCON=0x20;//选择系统时钟
	T2CON=0x00;//自动重载方式
	TH2=0;
	TL2=0;
	ET2=1;
	TR2=1;//启动定时器2
}

⌨️ 快捷键说明

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