1.關于定時器和中斷兩者的關系,以及為什么應該盡量選擇定時器,減少使用延時函式,
在很長一段時間,我都以為中斷服務函式里的內容執行完成后,才能再一次開始計時,直到昨天晚上請教了我們副教授,我才知道原來定時器是定時器,中斷時中斷,進入中斷服務函式執行里面內容以及執行完成后退出中斷服務函式,這些都是獨立于定時器的,
舉個簡單的例子,我們設定TMOD = 0x01, TH0 = -9 (對于11.0592MHZ,是標準2.5ms);但是我們中斷服務函式里的內容要3ms才能執行完成,那么我們不可能再有機會執行主函式的內容(對于單任務的單片機是這樣的),因為我們2.5ms進一次中斷服務函式,3ms完成一次中斷服務函式的內容,這兩個東西都是同時進行的,我們還沒完成3ms的任務,又會被打斷重新進入中斷服務函式重新執行,
只要初始化了定時器,它就會不停的開始加,不會因為你單片機正在處理的任何事情而中斷作業,
中斷會打斷CPU正在做的事情,轉而處理中斷服務函式里的事情,這里就涉及到一個問題,對于某些時序很嚴格的作業,比如說單總線的通信,以及IIC等通信,在傳輸資料的時候是不能被打斷的,否則資料就傳輸失敗(傳輸一個位元組的資料必須連續,傳輸多個位元組的時候如果中途要處理更緊急的事情可以在傳輸完某個位元組后暫時離開,同時對總線做一些處理,處理完后再回來繼續傳輸剩下的的位元組,這也是比較特殊的情況),所以對于一些對時序要求嚴格的程式,我們可以暫時關閉中斷,執行完后再打開中斷,但是是關閉所有中斷還是關閉部分中斷,取決于工程里面任務的優先級,比如說板子著火了和傳輸資料比,哪個更緊急?? 但是無論如何,關閉中斷是不會對定時器產生影響的,定時器還能用,
其實我想表達的核心呢,還是想說中斷和定時器不能一概而論,就算沒有開啟中斷, 定時器也可以用來計時,并且定時器不會因為進入了中斷函式就停止計時,
接下來我就能接著上面的核心,解釋為什么應該盡量避免延時函式,而選擇定時器了,先舉個例子,我們一節課45分鐘,假如上到40分鐘的時候老師突然出去接電話,并且唧唧歪歪了十分鐘,回來的時候已經下課5分鐘了,如果是延時函式,老師回來會繼續講五分鐘然后下課,但是如果是定時器,老師一看已經下課五分鐘了,會直接下課,每次,無論你在干什么,定時器都會作業,但是延時函式是只有你執行它的時候,它才作業,
舉個單片機作業的個例子,比如說我們的LED流水燈每50ms流動一次,我們如果用延時函式,那么我們這50ms的間隙只能做無用功,等50ms后再流動一次,繼續做無用功,51單片機是us級的設備,讀一條指令大概1us,執行一次流水燈流動也就1us左右,卻要浪費一整個單片機,如果用定時器就不一樣了,我們可以邊執行其他程式,邊等待,
勵志成為一名卓越的工程師的萌新的第一篇博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/243885.html
標籤:其他
上一篇:嵌入式基礎知識總結
