C51微控制器學習(二) 中斷系統和定時器

2021-07-08 19:50:27 字數 4153 閱讀 2554

cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理(中斷發生);

cpu暫時中斷當前的工作,轉去處理事件b(中斷響應和中斷服務);

待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a(中斷返回),這一過程稱為中斷 。

其中一些說明:

1、(p3.2)可由it0(tcon.0)選擇其為低電平有效還是下降

沿有效。當cpu檢測到p3.2引腳上出現有效的中斷訊號時,

中斷標誌ie0(tcon.1)置1,向cpu申請中斷。

2、(p3.3)可由it1(tcon.2)選擇其為低電平有效還是下降沿有效。當cpu檢測到p3.3引腳上出現有效的中斷訊號時,中斷標誌ie1(tcon.3)置1,向cpu申請中斷。

3、tf0(tcon.5),片內定時/計數器t0溢位中斷請求標誌。當定時/計數器t0發生溢位時,置位tf0,並向cpu申請中斷。

4、tf1(tcon.7),片內定時/計數器t1溢位中斷請求標誌。當定時/計數器t1發生溢位時,置位tf1,並向cpu申請中斷。

5、ri(scon.0)或ti(scon.1),序列口中斷請求標誌。當序列口接收完一幀序列資料時置位ri或當序列口傳送完一幀序列資料時置位ti,向cpu申請中斷。

說明:

t0(tcon.0),外部中斷0觸發方式控制位。

當it0=0時,為電平觸發方式。

當it0=1時,為邊沿觸發方式(下降沿有效)。

ie0(tcon.1),外部中斷0中斷請求標誌位。

it1(tcon.2),外部中斷1觸發方式控制位。

ie1(tcon.3),外部中斷1中斷請求標誌位。

tf0(tcon.5),定時/計數器t0溢位中斷請求標誌位。

tf1(tcon.7),定時/計數器t1溢位中斷請求標誌位。

ri(scon.0),序列口接收中斷標誌位。當允許序列口接收資料時,每接收完乙個序列幀,由硬體置位ri。注意,ri必須由軟體清除。

ti(scon.1),序列口傳送中斷標誌位。當cpu將乙個傳送資料寫入序列口傳送緩衝器時,就啟動了傳送過程。每傳送完乙個序列幀,由硬體置位ti。cpu響應中斷時,不能自動清除ti,ti必須由軟體清除。

51微控制器中斷優先順序:

cpu同時接收到幾個中斷時,首先響應優先級別最高的中斷請求。

正在進行的中斷過程不能被新的同級或低優先順序的中斷請求所中斷。

正在進行的低優先順序中斷服務,能被高優先順序中斷請求所中斷。

為了實現上述後兩條原則,中斷系統內部設有兩個使用者不能定址的優先順序狀態觸發器。其中乙個置1,表示正在響應高優先順序的中斷,它將阻斷後來所有的中斷請求;另乙個置1,表示正在響應低優先順序中斷,它將阻斷後來所有的低優先順序中斷請求。

同一優先順序中的中斷申請不止乙個時,則有中斷優先權排隊問題。同一優先順序的中斷優先權排隊,由中斷系統硬體確定的自然優先順序形成,其排列如所示:

中斷源有中斷請求;

此中斷源的中斷允許位為1;

cpu開中斷(即ea=1)。

/*以下設定的時候數碼管開始從0到f迴圈,當觸發中斷(杜邦線將gnd和p3^2口連線)

此時因為it0預設為0,所以是低電平觸發,由此led燈亮,鬆開時,燈滅。將it0置為1是,即下降沿有效

此時將p3^2引腳杜邦線接入瞬間led燈亮,繼續接入或者拔開燈滅*/

#include

#define uint unsigned int

#define uchar unsigned char

sbit dula=p2^6;

sbit wela=p2^7;

sbit d1=p1^0;

uchar num,flag = 0;

uchar code table=;

void delay(uint z);

void init()

void main()

}}void delay(uint z)

void exter0() interrupt 0

51單片的定時器可以使用1.軟體中斷(就是上面的delay函式),2.可程式設計晶元定時,3.時基電路定時(定時值和範圍不能由軟體控制)

這裡主要闡述第二種:

加1計數器輸入的計數脈衝有兩個**,乙個是由系統的時鐘振盪器輸出脈衝經12分頻後送來;乙個是t0或t1引腳輸入的外部脈衝源。每來乙個脈衝計數器加1,當加到計數器為全1時,再輸入乙個脈衝就使計數器回零,且計數器的溢位使tcon中tf0或tf1置1,向cpu發出中斷請求(定時/計數器中斷允許時)。如果定時/計數器工作於定時模式,則表示定時時間已到;如果工作於計數模式,則表示計數值已滿。

可見,由溢位時計數器的值減去計數初值才是加1計數器的計數值。

設定為定時器模式時,加1計數器是對內部機器週期計數(1個機器週期等於12個振盪週期,即計數頻率為晶振頻率的1/12)。計數值n乘以機器週期tcy就是定時時間t 。

設定為計數器模式時,外部事件計數脈衝由t0或t1引腳輸入到計數器。在每個機器週期的s5p2期間取樣t0、t1引腳電平。當某週期取樣到一高電平輸入,而下一週期又取樣到一低電平時,則計數器加1,更新的計數值在下乙個機器週期的s3p1期間裝入計數器。由於檢測乙個從1到0的下降沿需要2個機器週期,因此要求被取樣的電平至少要維持乙個機器週期。當晶振頻率為12mhz時,最高計數頻率不超過1/2mhz,即計數脈衝的週期要大於2 s。 (了解下就好)

50c51主要由兩個暫存器tmod,tcon控制

gate:門控位。gate=0時,只要用軟體使tcon中的tr0或tr1為1,就可以啟動定時/計數器工作;gata=1時,要用軟體使tr0或tr1為1,同時外部中斷引腳或也為高電平時,才能啟動定時/計數器工作。即此時定時器的啟動多了一條件。(一般置為0)

:定時/計數模式選擇位。 =0為定時模式; =1為計數模式。

m1m0:工作方式設定位。定時/計數器有四種工作方式,由m1m0進行設定。

tf1(tcon.7):t1溢位中斷請求標誌位。t1計數溢位時由硬體自動置tf1為1。cpu響應中斷後tf1由硬體自動清0。t1工作時,cpu可隨時查詢tf1的狀態。所以,tf1可用作查詢測試的標誌。tf1也可以用軟體置1或清0,同硬體置1或清0的效果一樣。

tr1(tcon.6):t1執行控制位。tr1置1時,t1開始工作;tr1置0時,t1停止工作。tr1由軟體置1或清0。所以,用軟體可控制定時/計數器的啟動與停止。

tf0(tcon.5):t0溢位中斷請求標誌位,其功能與tf1類同。

tr0(tcon.4):t0執行控制位,其功能與tr1類同。

推薦:定時器的初始化

定時器例項(定時器工作方式1)

//關鍵:init函式和中斷的time0函式

//通過定時器控制數碼管從0到f迴圈顯示

#include

#define uint unsigned int

#define uchar unsigned char

sbit dula=p2^6;

sbit wela=p2^7;

sbit d1=p1^0;

uchar num,num1;tt;

uchar code table=;

void delay(uint z);

void init()

void main()

}}void delay(uint z)

void time0() interrupt 1

微控制器學習筆記(二) 中斷系統

cpu正在處理某件事情時,微控制器的內部或外部發生的某一事件請求cpu迅速去處理,於是cpu暫時中止當前的工作去處理所發生的事件。處理的過程是由中斷服務處理程式來負責的,它處理完後又回到原來被中止的地方,繼續原來的工作,這就是中斷。一 中斷請求 51 mcs 51系統簡稱,以下均使用51 中斷系統有...

C51微控制器 外部中斷

cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷發生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 如圖 引起cpu中斷的根源,稱為中斷源。中斷源向cpu提出的中斷...

51微控制器 中斷1 中斷整體介紹

外部中斷請求源 即外部中斷0 和1,經由外部引腳引入,在微控制器上有兩個引腳,外稱為int0 int1,也就是p3.2 p3.3這兩個引腳 mcs51 微控制器內部的中斷模組在每個cpu週期都查詢各個中斷源的狀態,當其發生預期的中斷事件時,通知cpu將程式跳轉到中斷服務程式所在的程式儲存器 rom ...