📄 ex1.c
字号:
#include "..\uc_os_II\includes.h"
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^3;
sbit LED2=P3^2;
sbit LED3=P2^4;
sbit LED4=P2^3;
sbit CLK=P1^4;
sbit DAT=P1^5;
uchar code seg[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x19};
uchar disp[6];//显示缓冲区
unsigned char count1;
struct {unsigned char h;
unsigned char m;
unsigned char s;
}run_time={0,0,0};
OS_STK xdata Task1Stack[CPU_MAX_STK_SIZE];
OS_STK xdata Task2Stack[CPU_MAX_STK_SIZE];
void SendTime(void) reentrant
{TI=0;
SBUF=run_time.h;
while(TI==0);
TI=0;
SBUF=run_time.m;
while(TI==0);
TI=0;
SBUF=run_time.s;
while(TI==0);
}
void delay(int t)//延时子程序
{int i,j;
for(i=0;i<t;i++)
for (j=0;j<100;j++);
}
void Moni_Send(uchar dsdata)
{uchar i,temp=0;
CLK=0;
for(i=0;i<=7;i++)
{
temp=dsdata&0x01;
dsdata=dsdata>>1;
if(temp==0)
DAT=0;
else
DAT=1; //置数据在端口上
CLK=1; //发出移位脉冲
CLK=0;
}
}
void disp_num(uchar num)
{disp[0]=seg[num%10]; //ge wei
disp[1]=seg[num/10]; //shi wei
Moni_Send(disp[1]);
Moni_Send(disp[0]);
}
void Task1(void xdata * ppdata) reentrant
{
ppdata = ppdata;
while(1)
{
OSTimeDly(50);
count1++;
if(count1>5)
{count1=0;
LED4=~LED4;
}
if(run_time.s>=59)
{run_time.s=0;
if(run_time.m>=59)
{run_time.m=0;
if(run_time.h>=23)run_time.h=0;
else run_time.h++;
}
else
{ run_time.m++;
}
}
else
{ run_time.s++;
}
// LED3=~LED3;
disp_num(run_time.h);
disp_num(run_time.m);
disp_num(run_time.s);
printf("\nTASK1 IS ACTIVE");
}
}
void Task2(void xdata * ppdata) reentrant
{
ppdata = ppdata;
while(1)
{
OSTimeDly(50);
OS_ENTER_CRITICAL();
SendTime();
OS_EXIT_CRITICAL();
LED1=~LED1;
printf("\n TASK2 IS ACTIVE");
}
}
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 = 0xE6; /* TH1=E6 4800bit/s when at 24MHz,TH1=F3,9600bit/s,24MHz */
PCON = 0x80;
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;
}
main()
{
SerialInitial();
InterruptInitial();
OSInit();
printf("\nstart");
OSTaskCreate(Task1, (void xdata *)0, &Task1Stack[0],2);
OSTaskCreate(Task2, (void xdata *)0, &Task2Stack[0],3);
OSStart();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -