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

📄 usertask.c

📁 ucos-ii在C8051F020上的移植
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -