📄 usertask.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 + -