#include"reg51.h"
extern os_start();
void task1();
void task2();
unsigned char os_state[2];
unsigned char stack1[20];
unsigned char stack2[20];
//char cur_task=0;
//void main()
void time_init();
//void stack_init(unsigned char *p,
// unsigned char adderh,unsigned char adderl);
void stack_init(unsigned char *p,unsigned int adder);
void start_main()
{
//unsigned int adderh;
//unsigned int adderl;
///adderh=((unsigned int)task1)>>8;
//adderl=((unsigned int)task1)&0x00ff;
stack_init(stack1,((unsigned int)task1));
stack_init(stack2,((unsigned int)task2));
time_init();
os_state[0]=1;
os_start();
}
void task2()
{
int i=5;i=i+7;
while(1)
{ i=i++;
}
}
void task1()
{int i=5;i=i+7;
while(1)
{ i=i+10;}
}
void stack_init(unsigned char *p,unsigned int adder)
{
//将ACC、B、DPH、DPL、PSW、R0~R7共13个寄存器压栈。
*(p+2)=(unsigned char)(adder>>8);
*(p+1)=(unsigned char)(adder%256);
*p=(unsigned char)(15+p);
*(p+15)=0X88;//R7
*(p+14)=0X77;//R3
*(p+13)=0X66;//R2
*(p+12)=0X55;//R1
*(p+11)=0X44;//R3
*(p+10)=0X33;//R2
*(p+9)=0X22;//R1
*(p+8)=0X11;//R0
*(p+7)=0;//PSW
*(p+6)=0;//DPL
*(p+5)=0;//DPH
*(p+4)=0;//b
*(p+3)=0;//ACC
//stack1[2]=(unsigned int)task1>>8;
//stack1[1]=(unsigned int)task1&0xff;
//stack1[0]=(unsigned char)&stack1[15];
}
void time_init()
{
TMOD = 0x01;
TH0 = 0xd8;
TL0 = 0xf0;
TR0 = 1;
EA = 1;
ET0 = 1;
}