这个程序我感觉没什么问题 可是一下载到单片机中就没反应了 程序停止再DISPLAY(1) 中间 而DISPLAY(2) 根本就不会执行 只有把两个DISPLAY函数中间的时间延时函数取掉才可以 但是两个显示 1 和 2 太快了 是不是程序太大了? 我觉得没啥问题啊 编译后 data是115.0 xdata 227.0 code 6540 我用的是AT89C52单片机 应该能装下啊
/* 本例程uCOS-II 版本为2.51,仅创建一个LED闪烁任务于 P1.0 上,每隔 0.5 秒闪动一次,任务而此例程运行于内 RAM > 300 Byte 的51内核单片机即可。*/
#include "includes.h"
//#include "stdio.h"
sbit LED=P1^7;
sbit LED1=P1^6;
sbit dula=P2^6;
sbit wela=P2^7;
INT8U err;
INT8U code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
OS_EVENT *semp;
OS_STK TaskStartStk[MaxStkSize+1];
OS_STK MyTaskStk[MaxStkSize+1];
OS_STK YouTaskStk[MaxStkSize+1];
void Task(void *ppdata);
void MyTask(void *ppdata);
void YouTask(void *ppdata);
void DigInit();
void Display(INT8U num);
void main(void)
{
DigInit();
OSInit();
InitHardware();
semp=OSSemCreate(0);
OSTaskCreate(Task,(void*)0,&TaskStartStk[0],0);
OSStart();
}
void Task(void *ppdata)
{
ppdata=ppdata;
OSTaskCreate(MyTask,(void*)0,&MyTaskStk[0],1);
OSTaskCreate(YouTask,(void*)0,&YouTaskStk[0],2);
for(;;)
{
LED=~LED;
OSTimeDly(OS_TICKS_PER_SEC/2);
}
}
void MyTask(void *ppdata)
{
INT8U temp;
ppdata=ppdata;
for(;;)
{
P3=0xfd;
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
OSTimeDly(1);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed: OSSemPost(semp);
break;
case 0xdd:
break;
case 0xbd:
break;
case 0x7d:
break;
}
}
}
OSTimeDly(1);
}
}
void YouTask(void *ppdata)
{
ppdata=ppdata;
for(;;)
{
OSSemPend(semp,0,&err);
Display(1);
OSTimeDly(50); //就是这里一加上延时 程序就不会往下继续执行了
OSSemPend(semp,0,&err);
Display(2);
}
}
void DigInit()
{
dula=1;
P0=table[0];
dula=0;
wela=1;
P0=0xc0;
wela=0;
}
void Display(INT8U num)
{
dula=1;
P0=table[num];
dula=0;
}