0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)工控事件

汽車電子技術(shù) ? 來源:工控碼農(nóng) ? 作者:工控碼農(nóng) ? 2023-02-07 09:40 ? 次閱讀

單片機(jī)工控通常有延時,電機(jī)狀態(tài),傳感器狀態(tài)等通用耗時操作,業(yè)務(wù)程序查詢這些狀態(tài),就會產(chǎn)生大量的冗余代碼,不簡潔.使用事件則是把這些通用操作丟給系統(tǒng)去處理,系統(tǒng)操作完成后,則運行業(yè)務(wù)程序的下一個Step.

** 延時不使用事件**

switch(step)
{
  case STEP1:
    baseTime = systemTime;
    step= STEP2;
    break;
   case STEP2:
   if(systemTime>(baseTime+500))
   {
     ..
   }
   break;
}

延時使用事件:

switch(step)
{
  case STEP1:
  WaitTime(500,STEP2);  //向系統(tǒng)請求延時500ms,讓出程序運行權(quán)限,500ms后運行到STEP2
  break;
  
  case STEP2:
  break;
}

不使用事件查詢傳感器狀態(tài)

switch(step)
{
  case STEP1:
  if(IsSensorOn(X01))
  {
    StopSM(SM101);
  }
  break;
}

使用事件的查詢傳感器狀態(tài)

switch(step)
{
  case STEP1:
  //向系統(tǒng)請求查詢傳感器X101,傳感器感應(yīng)后跳到STEP2
  WaitSensorOn(X101,STEP2);
  break;
}

不使用事件的電機(jī)運動

switch(step)
{
  case STEP1:
  RunSM(SM101,2000);  //SM101運行2000步
  step = STEP2;
  break;
  case STEP2:
  if(IsSMStop(SM101))
  {

  }
}

使用事件的電機(jī)運動

switch(step)
{
  case STEP1:
  RunSM(SM101,2000);
  //請求系統(tǒng)查詢電機(jī)狀態(tài)
  WaitSM(SM101,STEP2);
  break;
}

沒有使用事件的找傳感器的電機(jī)運動

switch(step)
{
  case STEP1:
  RunSM(SM101,2000);
  step = STEP2;
  break;
  case STEP2:
  if(IsSensorOn(X101))
  {
    StopSM(SM101);
    return 1;
  }
  else if(IsSMStop(SM101))
  {
    return -1;
  }
  
  }

使用事件的找傳感器電機(jī)運動

switch(step)
{
  case STEP1:
  //電機(jī)運動2000步,請求傳感器狀態(tài) 電機(jī)事件
  FindSensor(SM101,2000,X101,STEP2,STEP_ERROR);
  break;
  case STEP2:
  SetActionOk();
  break;

  case STEP_ERROR:
  SetError("SM101電機(jī)丟步-SM101/X101");
  break;
}
從上面的案例可以看出使用事件的程序幾乎沒有if else 程序更加口語化.事件實現(xiàn)的基本原理為:
  1. 把事件的參數(shù)(事件類型,延時時間,電機(jī)編號,電機(jī)步數(shù),傳感器編號)壓入任務(wù)棧,下一步驟也就是PC指針也壓入任務(wù)棧。
  2. 讓出業(yè)務(wù)程序的運行權(quán)限到系統(tǒng)的通用事件運行,實現(xiàn)方式運行的函數(shù)指針指向事件處理的函數(shù)
  3. 事件處理程序查詢相應(yīng)的狀態(tài)變化
  4. 運行權(quán)限重新切回業(yè)務(wù)程序,運行函數(shù)指針指向業(yè)務(wù)函數(shù)指針,Step出棧.
//切換到事件處理函數(shù)
CurrentAction->ActionCallback = CurrentAction->EventCallback;


//系統(tǒng)循環(huán)
while(CurrentAction!=NULL)
 {
    CurrentAction->ActionCallback();
    DelFinishAction();
    CurrentAction = CurrentAction->NextAction;
 }  
 
 //切回業(yè)務(wù)App
 ThisAction->nStep = nStep;
 ThisAction->ActionCallback = ThisAction->AppCallBack
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2551

    文章

    51134

    瀏覽量

    753888
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6037

    文章

    44561

    瀏覽量

    635635
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4790

    瀏覽量

    68653
  • step
    +關(guān)注

    關(guān)注

    0

    文章

    42

    瀏覽量

    20476
收藏 人收藏

    評論

    相關(guān)推薦

    專注單片機(jī)工控編程開發(fā)#步控電子#步驟編程#單片機(jī) #單片機(jī)開發(fā)

    單片機(jī)
    東莞市步控電子科技有限公司
    發(fā)布于 :2022年08月03日 22:55:10

    單片機(jī)工控

    ,指示燈,計數(shù)器,撥碼開關(guān))如果用PLC成本太高,即使時最入門的也不是太合算,而且還需要自備24V開關(guān)電源,對配線也是個難題,就有這個一個想法,可對單片機(jī)了解甚少,還望對如上所列給予指點1.能否實現(xiàn)2.開發(fā)這個通用的班子費用和周期3.有意向合作開發(fā)的mail至:leon51717@163.com
    發(fā)表于 03-18 14:31

    超齊全單片機(jī)工具集

    超齊全單片機(jī)工具集單片機(jī)工
    發(fā)表于 11-03 16:49 ?155次下載

    超級單片機(jī)工具軟件

    電子發(fā)燒友網(wǎng)站提供《超級單片機(jī)工具軟件.exe》資料免費下載
    發(fā)表于 07-13 17:49 ?26次下載

    8051單片機(jī)工作原理介紹

    8051單片機(jī)工作原理 8051單片機(jī)工作原理
    發(fā)表于 10-28 11:19 ?43次下載

    單片機(jī)初學(xué)者邁向單片機(jī)工程師

    單片機(jī)初學(xué)者邁向單片機(jī)工程師從單片機(jī)初學(xué)者邁向單片機(jī)工程師
    發(fā)表于 01-15 16:33 ?45次下載

    單片機(jī)工具大全

    收藏的單片機(jī)工具,分享出來
    發(fā)表于 02-15 23:04 ?20次下載

    單片機(jī)工控常用IC—sn74lvc07a資料下載.pdf

    單片機(jī),工控常用IC
    發(fā)表于 05-25 15:46 ?6次下載

    實用單片機(jī)工具應(yīng)用程序合集免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是超級單片機(jī)工具軟件應(yīng)用程序合集免費下載包括了:51波特率計算應(yīng)用程序,超級單片機(jī)工具軟件,單片機(jī)小精靈。
    發(fā)表于 04-28 16:24 ?33次下載
    實用<b class='flag-5'>單片機(jī)工</b>具應(yīng)用程序合集免費下載

    MSP430單片機(jī)工程配置driverlib庫

    MSP430單片機(jī)工程配置driverlib庫
    發(fā)表于 11-19 16:36 ?22次下載
    MSP430<b class='flag-5'>單片機(jī)工</b>程配置driverlib庫

    單片機(jī)工控應(yīng)用

    電機(jī)狀態(tài) 傳感器狀態(tài) 時間狀態(tài)都是系統(tǒng)管理查詢的,極大的提高了代碼的復(fù)用,因為一個項目一般都有幾十個動作動作函數(shù).
    的頭像 發(fā)表于 02-07 09:34 ?637次閱讀

    單片機(jī)工控實現(xiàn)任務(wù)執(zhí)行管理

    前面寫了switch case做任務(wù)調(diào)度的應(yīng)用,這邊寫一下如何實現(xiàn).像一般的RTOS一樣都有一個任務(wù)控制塊(TCB)列表來管理所有的任務(wù),所以這里也需要一個結(jié)構(gòu)體來管理動作任務(wù),這里叫做ACB吧.
    的頭像 發(fā)表于 02-07 09:37 ?874次閱讀

    單片機(jī)工控的電機(jī)減速算法是什么?

    單片機(jī)給步進(jìn)驅(qū)動一個脈沖,電機(jī)轉(zhuǎn)動一個步距角,單片機(jī)給脈沖越快,步進(jìn)電機(jī)單位時間內(nèi),轉(zhuǎn)動的角度也就越大.即脈沖頻率正比于電機(jī)轉(zhuǎn)速.
    的頭像 發(fā)表于 02-07 09:43 ?1631次閱讀
    <b class='flag-5'>單片機(jī)工控</b>的電機(jī)減速算法是什么?

    單片機(jī)工控的工程分離是什么?

    單片機(jī)電路板一般專有的,如汽車的車燈控制電路板和EPS控制的電路板是完全不同的。專有的電路板,軟件就比較難通用,軟件編程比較強(qiáng)調(diào)的是單片機(jī)系統(tǒng)。
    的頭像 發(fā)表于 02-07 09:47 ?936次閱讀
    <b class='flag-5'>單片機(jī)工控</b>的工程分離是什么?

    51單片機(jī)工程模板創(chuàng)建方法

    本教程將向大家介紹如何使用KEIL C51 軟件以及如何創(chuàng)建51 單片機(jī)工程。通過本教程的學(xué)習(xí),讓大家創(chuàng)建屬于自己的51 單片機(jī)工程模板,為后面學(xué)習(xí)51 單片機(jī)編程做好鋪墊。
    發(fā)表于 07-15 15:27 ?4911次閱讀
    51<b class='flag-5'>單片機(jī)工</b>程模板創(chuàng)建方法