91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

基于 51 單片機 多進程 多任務 純 C語言 實現 死循環 調度 多任務 調度程序

資源截圖

代碼片段和文件信息

/*?程序僅供參考??禁止非法使用
若有疑問請聯系:
郵箱:niewenli.2007@163.com
聯系方式:13572614184
聯系人:聶先生
QQ:723992349
本人于?2009.8.28
*/
/*
1.本程序不使用任何匯編指令
2.由定時器T0產生中斷,切換進程
3.由于中斷或調用子程序,要把PC堆棧,故可以以SP為基址的地方找到PC
4.中斷或子程序返回,要把SP出棧給PC,故可以操作SP改變程序入口
5.本程序經調試運行??電路圖已上傳
*/
//頭文件
#include
#include?
//宏定義
#define uchar?unsigned?char
#define?uint?unsigned?int ??
#define?TN??65436
//進程1,2,3執行時間之比為??T1:T2:T3??(時間單位us)
#define?TN1??62536 ??//1個進程循環周期內進程1執行的時間T1us??TN1=(65536-T1)
#define?TN2??55536 ??//1個進程循環周期內進程2執行的時間T2us??TN2=(65536-T1)
#define?TN3??60536 ??//1個進程循環周期內進程3執行的時間T3us??TN3=(65536-T1)
//
#define?N1??10 ??//?進程1的延時參數??郵箱:niewenli.2007@163.com
#define?N2??10 ??//?進程2的延時參數??聯系方式:13572614184
#define?N3??10 ??//?進程3的延時參數??QQ:723992349

//定義全局變量
uint?address1address2address3;
uchar?test1_1=0test2_1=0test3_1=0PID=1;
//各進程的標志位,是否為第一次執行;PID進程號;
uint?ac1ac2ac3;?//?PC_Next;?各進程的初始地址寄存器.
//test1 ??的參數??由于進程切換時?沒有保存普通變量,
//所以各進程的普通參數需要定義成全局變量.
uint?m1i1j1k1;
uchar?table1[4];
//test2 ??的參數???郵箱:niewenli.2007@163.com
int?m2i2j2k2;
uchar?table2[4];
//test3 ??的參數 聯系方式:13572614184
int?m3i3j3k3; ???//?QQ:723992349
uchar?table3[4];

//聲明
//unsigned?int?Get_Next_PC(void);//調用子程序,獲取PC
void?chushihua(void); ??//初始化函數
void?test1(void); ??//進程一
void?test2(void);
void?test3(void);

//main函數
void?main(void)
{?
//?PC_Next=Get_Next_PC();
?chushihua();
?ac1=(unsigned?int)(test1); ?//獲取進程1的入口地址
?ac2=(unsigned?int)(test2); //獲取進程2的入口地址
?ac3=(unsigned?int)(test3); ?//獲取進程3的入口地址
?//常規任務
?while(1);
}

//初始化時鐘
void?chushihua(void)
{
????TMOD=0x01; //?郵箱:niewenli.2007@163.com
EA=1; //?聯系方式:13572614184
ET0=1; //?QQ:723992349
TH0=TN/256;
TL0=TN%256;
TR0=1;
}

//中斷處理,進程調度
void?time0()?interrupt?1?using?0
{
TR0=0;
//進程順序分配
PID++;
if(PID==4)
???{PID=1;}
?//進程調度
switch(PID)
{
??case?1: ?
if(test3_1!=0)
????{?//保存現場,還回地址
???address3=*((unsigned?char?*)(SP-4)); //PC的高字節
???????????address3?<<=?8;
???????????address3+=*((unsigned?char?*)(SP-5));???//PC的低字節
???table3[0]=*((unsigned?char?*)(SP)); ?//現場保護
???table3[1]=*((unsigned?char?*)(SP-1)); ?//現場保護
???table3[2]=*((unsigned?char?*)(SP-2)); ?//現場保護
???table3[3]=*((unsigned?char?*)(SP-3)); ?//現場保護
}
????if(test1_1==0)
{?//執行新進程
test1_1=1;
????*((unsigned?char?*)(SP-4))=ac1>>8; ?//PC的高字節
????????*((unsigned?char?*)(SP-5))=ac1?&?0x00ff; ?//PC的低字節
}
else
{?//執行新進程,恢復現場
*((unsigned?char?*)(SP-4))=address1>>8; ???//PC的高字節
????????*((unsigned?char?*)(SP-5))=address1?&?0x00ff;??//PC的低字節
*((unsigned?char?*)(SP))=table1[0]; ???//現場恢復
*((unsigned?char?*)(SP-1))=table1[1]; ???//現場恢復
*((unsigned?char?*)(SP-2))=table1[2]; ???//現場恢復
*((unsigned?char?*)(SP-3))=table1[3]; ???//現場恢復
}
???TH0=TN1/256;
???TL0=TN1%256;
???????TR0=1;
???break;

??case?2:
????if(test1_1!=0)
????{??//保存現場,還回地址
?

評論

共有 條評論