<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 程序的多任務(wù)和資源復用舉例

程序的多任務(wù)和資源復用舉例

作者: 時(shí)間:2012-07-04 來(lái)源:網(wǎng)絡(luò ) 收藏

程序的舉例

有一臺機電設備,有兩個(gè)按鍵,控制設備的兩個(gè)不同部分。
現要求:
 每個(gè)按鍵按下,相應控制程序運行。但兩個(gè)按鍵可以同時(shí)按下,就是說(shuō)兩個(gè)控制程序可能
需要同時(shí)運行。使用一個(gè)89C52,如何編寫(xiě)程序?

注:此程序不使用RTOS等操作系統。


/*程序說(shuō)明:
 一)產(chǎn)生波形可以使用中斷中計數來(lái)產(chǎn)生精確的波形。
   本答案中為更能體現程序的問(wèn)題,采用主程序循環(huán)產(chǎn)生。
 二)請特別注意,題意是兩個(gè)程序在并發(fā)運行,實(shí)際按本答案可以擴展到N個(gè)不同任務(wù)同時(shí)運行,在此就不討論。
  ?。▽Υ蟪绦蚪Y構增加了很多其它的概念)
 三)因為在論壇上直接貼出,所以程序放在一個(gè)文件中。
   應該按Timer.c, Key.c, Const.h(存放常量定義),Task1, Task2, Answer.c存放
*/
#include REG52.h>

/*Timer*/
bit fTimer0_2ms;  /*T0中斷產(chǎn)生的標志,準備傳遞給主循環(huán)*/
bit fSYS_2ms;   /*系統T0中斷產(chǎn)生的標志,12M,主循環(huán)使用*/
bit fSYS_20ms;   /*每20MS產(chǎn)生一次的消息*/

#define INT2MSCOUNT   10           /*產(chǎn)生2MS所需要的時(shí)間次數*/
unsigned char data mTimer_2msReg=INT2MSCOUNT;  /*產(chǎn)生2MS所需要的寄存器*/
#define INT20MSCOUNT  10           /*產(chǎn)生20MS所需要的時(shí)間次數,在20MS基礎上*/
unsigned char data mTimer_20msReg=INT20MSCOUNT; /*產(chǎn)生20MS所需要的寄存器,在20MS基礎上*/

/*KEY*/
unsigned char data mKey1SwapTask;  /***按鍵任務(wù)寄存器***/
unsigned char data mKey2SwapTask;  /***按鍵任務(wù)寄存器***/
sbit iKey1=P1^0;           /*按鍵的輸入口*/
sbit iKey2=P1^1;

bit fKey1;             /*為簡(jiǎn)單化,沒(méi)使用隊列保存鍵值,使用標志*/
bit fKey2;             /*為簡(jiǎn)單化,沒(méi)使用隊列保存鍵值,使用標志*/


/*Task1*/
unsigned char data mTask1Id;    /*任務(wù)一的任務(wù)號*/
unsigned char data mTask1_1HzReg;  /*1hz時(shí)間寄存器*/
unsigned int data mTask1_2SReg;   /*2S時(shí)間寄存器*/
sbit oTask1=P1^2;          /*輸出方波口*/

/*Task2*/
unsigned char data mTask2Id;    /*任務(wù)二的任務(wù)號*/
unsigned char data mTask2_1p2HzReg; /*1.2hz時(shí)間寄存器*/
sbit oTask2=P1^3;          /*輸出方波口*/

/*---------------------------------------------------------------------------*/
/*產(chǎn)生以1MS為基礎的系統定時(shí)信號,T0作為基準定時(shí)器*/

/*************************************************
定時(shí)器T0初始化0.2MS,12M
*************************************************/
void Timer0_Init()
{
 TMOD|=0x2;      /*8位定時(shí)器*/

 TL0=TH0=~(200)+1;   /*12M*/

 TR0=1;
 ET0=1;
}

/*************************************************
定時(shí)器0的中斷服務(wù),產(chǎn)生fTimer0_2ms
*************************************************/
void timer0(void) interrupt 1 /*T0中斷*/
{
 mTimer_2msReg--;
 if(mTimer_2msReg==0){
  mTimer_2msReg=INT2MSCOUNT; /*產(chǎn)生1MS所需要的寄存器*/
  fTimer0_2ms=1;
 }
}

/*************************************************
控制消息fSYS_2ms
*************************************************/
void Timer0_MainLoop()
{
 fSYS_2ms=0;
 fSYS_20ms=0;

 if(fTimer0_2ms){
  fTimer0_2ms=0;       /*接收中斷過(guò)來(lái)的時(shí)間標志,轉換為消息*/
  fSYS_2ms=1;         /*此消息在一周內有效,被外部程序復用*/
  /*產(chǎn)生20MS的消息*/
  mTimer_20msReg--;
  if(mTimer_20msReg==0){
    mTimer_20msReg=INT20MSCOUNT;  /*產(chǎn)生20MS所需要的寄存器,在20MS基礎上*/
    fSYS_20ms=1;
  }
 }
}


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 多任務(wù) 資源復用

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>