国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

【單片機到嵌入式之路】序列之3:苦逼的CPU

發(fā)布時間:2016-2-17 08:42    發(fā)布者:designapp
關鍵詞: 嵌入式 , CPU
  軟件平臺
  硬件平臺:單片機
  編譯環(huán)境:keil
  二、苦逼的CPU
  【事故起因】:單片機是單核的,所以在做多線程問題的時候,我們要考慮的太多。但是大部分人都會讓單片機一直工作,比如while死循環(huán),然后就抱怨單片機太簡單了,只能點燈,其它的事情就不行了。
  【現場分析】:1.單片機是單核的;
  2.做多線程,方法兩種:a.上操作系統,b.仿操作系統;
  3.自己想釋放單片機的CPU,但是格局有限,就怪單片機;
  4.要想馬兒跑,必須給馬兒吃草。要想單片機多工作,必須優(yōu)化代碼,多下功夫。
  【案例列舉】:單燈閃爍
  void main(void)
  {
  LED_Init(); //LED初始化
  while(1)
  {
  LED = ON; //LED亮
  Delay_Ms(1000); //延時1s
  LED = OFF; //LED滅
  Delay_Ms(1000); //延時1s
  }
  }
  【案例分析】:單燈閃爍分析
  聲明幾點:1.如果你只用單片機作為單燈閃爍,那么單片機就完全可以;
  2.如果你不想玩那么高級,那么單機這樣也是OK的;
  3.如果你想玩高級的,那么肯定不行。
  分析:咋一看,程序沒有什么問題,但是暗藏玄機。
  1.程序被死循環(huán)卡死;
  2.死循環(huán)里面就是一個產生2s周期的頻率,那么燈就是2s閃爍一次;
  3.單片機就這樣被你“征服”了。但是你這是把單片機浪費了。
  這是單片機CPU的苦啊,他是沒有口啊,有口要罵人的哦!O(∩_∩)O哈哈~
  三、單片機CPU的苦衷——請釋放CPU
  1.硬件電路分析
  


  用上面的電路來做分析,當P1口為低電平的時候,LED燈才亮,高電平則滅。
  1.軟件分析
  由硬件可以知道,我們可以通過宏定義來對接口進行簡單的定義
  #define LED_Light P1 //LED燈端口
  #define LED_ON() LED_Light = 0x00 //LED燈亮
  #define LED_OFF() LED_Light = 0xFF //LED燈滅
  現在端口也定義好了,下面單片機要哭訴了。
  3.你誤解了單片機
  單片機其實可以干很多活,結果你誤解了。
  為了讓單片機不白忙活我們可以通過兩種方式來實現LED燈閃爍:a.定時器中斷,b.計時+標志位。
  A.定時器中斷
  定時器中斷大家都知道,這里就不說了,就是產生xms的中斷就可以了。
  B.計時+標志位
  計時+標志位太有用了,這一下幫單片機洗清沉冤了。我們只要產生一個對200ms的時間,然后對該時間進行計數到了5次,然后就清0該計數值,同時反轉LED燈的狀態(tài)即可。
  代碼部分:
  unsigned int LedTimeCount = 0 ; //LED計數器
  unsigned char LedStatus = 0 ; //LED狀態(tài)標志, 0表示亮,1表示熄滅
  /***************************************
  * 函數描述:LED燈線程處理函數
  * 輸入參數:No
  * 返 回 值:No
  * 說 明:通過標志位來實現LED的反轉
  * 修改記錄:
  ****************************************/
  void LEDThread_Process(void)
  {
  if(0 == LedStatus) //如果LED的狀態(tài)為0,則點亮LED
  {
  LED_ON() ; //點亮LED燈
  }
  else //否則熄滅LED
  {
  LED_OFF() ;
  }
  }
  /***************************************
  * 函數描述:計時和標志位函數
  * 輸入參數:No
  * 返 回 值:No
  * 說 明:狀態(tài)標志位改變
  * 修改記錄:
  ****************************************/
  void LEDStatus_Change(void)
  {
  if(Sys_200MS) //系統200ms時標到
  {
  Sys_200MS = 0 ;
  LedTimeCount ++ ; //LED計數器加1
  if(LedTimeCount >= 5) //計數達到5,即1s到了,改變LED的狀態(tài)。
  {
  LedTimeCount = 0 ;
  LedStatus = ! LedStatus;
  }
  }
  }
  /***************************************
  * 函數描述:主函數
  * 輸入參數:No
  * 返 回 值:No
  * 說 明:
  * 修改記錄:
  ****************************************/
  void main(void)
  {
  while(1)
  {
  LEDThread_Process() ;
  LEDStatus_Change() ;
  }
  }
  通過上面的程序就可以釋放單片機的CPU。因為LED燈亮滅是有標志位(LedStatus)來決定,而標志位由計數器(LedTimeCount)來決定,兩個函數都沒有綁架單片機的CPU,所以單片機的CPU是自由的。終于洗冤了。O(∩_∩)O哈哈~
  到此結束!!! 謝謝閱讀,歡迎拍磚!!!!
                               
               
本文地址:http://m.qingdxww.cn/thread-160803-1-1.html     【打印本頁】

本站部分文章為轉載或網友發(fā)布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點宏來節(jié)省時間和空間
  • Dev Tool Bits——使用DVRT協議查看項目中的數據
  • Dev Tool Bits——使用MPLAB® Data Visualizer進行功率監(jiān)視
  • 貿澤電子(Mouser)專區(qū)

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 玖玖99视频| 一区视频在线播放 | 国产一区二区成人 | 国产精品久久久久影院色老大 | 99热热热 | 久草新视觉 | 日本高清色本在线www游戏 | 午夜精品一区二区三区免费视频 | 欧美激情一区二区三区不卡 | 色原网站| 看全色黄大色黄女视频 | 妻子的诱惑在线免费观看正片 | 日本强不卡在线观看 | 我爱操| 欧美成性色 | 久操网站| 中文字幕免费在线播放 | 99精品视频在线视频免费观看 | 在线免费观看麻豆 | 91在线视频免费91 | 一区二三区国产 | 一级毛片免费观看不卡视频 | 亚洲精品九色在线网站 | 四虎在线视频免费观看视频 | 国产麻豆免费 | 色樱桃影院亚洲精品影院 | 四虎最新入口 | 中文字幕一区二区三区免费视频 | 天天爆操| 欧美国产一区二区 | 欧美大陆日韩一区二区三区 | 久久久久久久久女黄 | 四虎福利视频 | 奇米视频7777| 精品卡1卡2卡三卡免费网站 | 在线看欧美三级中文经典 | 亚洲日本高清 | 亚洲精品专区 | 91传媒黄色app免费下载 | 91精品免费在线观看 | 一级毛片一级毛片 |