一 中斷的概念
cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理(中斷發生);
cpu暫時中斷當前的工作,轉去處理事件b(中斷響應和中斷服務);
待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a(中斷返回),這一過程被稱為中斷。
概念可能不好理解,舉個例子:假如你是個老師,你在上課,突然**響了,一看是你老婆打過來的,你不敢不接,於是你只好暫停講課接聽**,掛完**,你繼續講課。這個過程中實際發生了一次中斷。
二 中斷的響應條件
1.中斷源有中斷請求;
2.此中斷源的中斷允許位為1;
3.cpu開中斷。
以上3條同時滿足時,cpu才有可能響應中斷。
三 中斷的種類
52微控制器共有六個中斷源,分別是外部中斷int0、int1,定時器\計數器中斷t0、t1、t2,序列口中斷ti\ri。
這裡面還設計到乙個中斷優先順序的概念:
中斷源級別
int1
最高t0
第二int1
第三t1
第四ti\ri
第五t2
最低本次主要講的定時器t0、t1功能。
四 定時器的使用
目前要實現定時功能主要有以下方式:軟體定時(說簡單點就是用for迴圈)、採用時基電路定時(555電路)、採用可程式設計晶元定時。本次主要講述的就是第三種方法。
工作原理十分簡單:當加到計數器全為1時,再輸入乙個脈衝就使得計數器回零,且計數器的溢位使tcon中tf0或tf1置1,向cpu發出中斷請求。
定時器的工作方式又由暫存器tmod決定。tmod總共有八位,第四位用於t0、高四位用於t1。
各位功能如下:
m1m0的功能如下:
這裡我們主要講的方式1。
控制暫存器tcon:
定時器的使用步驟:
1.對tmod賦值,以確定t0和t1的工作方式。
2.計算初值,並講其寫入th0、tl0或th1、tl1。
3.對中斷允許暫存器ie賦值,開放中斷。
4.使tr0、tr1置位。
接下來我們來寫**:
首先我們來看看中斷函式怎麼寫:
void
exter0
() interrupt 1
//中斷函式不能返回任何值,函式名字可以隨便起
這就是中斷函式,當加一計數器溢位時則會進入此函式。
初始化定時器:
void
init()
這裡往往大家有疑問的是那個初值怎麼賦值,從上面的知識點可知,每個定時器都有4種工作模式,可通過設定tmod暫存器中的m1m0位來進行工作方式選擇。這裡我們主要講16位的。
方式1的計數字數是16位,對t0來說,由tl0暫存器作為低8、th0暫存器作為高8位,組成了16位加1計數器。
定時器一但啟動(tr0、tr1=1),它便在原來的數值上開始加1計數,若在程式開始時,我們沒有設定th0和tl0,它們的預設值都是0,假設時鐘頻率為12mhz,12個時鐘週期為乙個機器週期,那麼此時機器週期為1us,記滿th0和tl0就需要2的16次方 -1個數,再來乙個脈衝計數器溢位,隨即向cpu申請中斷。因此溢位一次共需65536us,約等於65.6ms,如果我們要定時50ms的話,那麼就需要先給th0和tl0裝乙個初值,在這個初值的基礎上記50000個數後,定時器溢位,此時剛好就是50ms中斷一次,當需要定時1s時,我們寫程式時當產生20次50ms的定時器中斷後便認為是1s,這樣便可精確控制定時時間啦。要計50000個數時,th0和tl0中應該裝入的總數是65536-50000=15536.,把15536對256求模:15536/256=60裝入th0中,把15536對256求餘:15536/256=176裝入tl0中。
以上就是定時器初值的計算法,總結後得出如下結論:當用定時器的方式1時,設機器週期為tcy,定時器產生一次中斷的時間為t,那麼需要計數的個數為n=t/tcy ,裝入thx和tlx中的數分別為:
thx=(65536-n)/256 , tlx=(65536-n)%256 。如果還不懂可以去看看b站上的課程。
以上來自於郭天祥老師2023年在哈爾濱授課的課件中。
51微控制器 中斷
一 中斷的概念 cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷發生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 二 中斷源 在51微控制器中有5個中斷源 中斷號...
微控制器中斷原理
微控制器在自主執行的時候一般是在執行乙個死迴圈程式,在沒有外界干擾 輸入訊號 的時候它基本處於乙個封閉狀態。比如乙個電子時鐘,它會按時 分 秒的規律來自主執行並通過輸出裝置 如液晶顯示屏 把時間顯示出來。在不需要對它進行調校的時候它不需要外部干預,自主封閉地執行。如果這個時鐘足夠準確而又不掉電的話,...
微控制器之中斷
11月14日學習總結 時隔兩周了吧,整理了一下課上記得筆記,發現沒有當即上過課就整理筆記的後果就是老師說的很多細節都想不起來了,不過憑著我這魚的記憶還是能想起來多少就寫多少吧。首先來回顧一下基礎知識,各類資料基本型別的變數範圍,這些一定要記住,我在寫程式時有時就是因為定義的變數超出了範圍達不到想表達...