上圖即為中斷過程示意圖,產生中斷的請求源被稱為中斷源,中斷源向cpu提出的處理請求被稱為中斷請求或中斷申請。cpu暫時中止當前的事件,轉去處理中斷請求所對應的事件稱為cpu的中斷響應過程,對事件的整個處理過程稱為中斷服務(中斷處理)。處理完畢後,返回到原先被中止的地方稱為中斷返回。
80c51的終端系統有5個中斷源(52有6個),兩個優先順序,可以實現二級中斷巢狀。
2、51微控制器的定時/計數器
51微控制器有兩個定時/計數器t0和t1,為16位可程式設計計數器,定時器的實質是加1計數器(16位),由低8位和高8位兩個暫存器組成,最大計數值為65535個計數脈衝。
該加1計數器的計數脈衝**有2個:
<1> 系統時鐘振盪器輸出的12分頻。
<2> t0或t1引腳輸入的外部脈衝訊號。
每接收到乙個計數脈衝,計數器就會加1,當計數值累計至全為1時(8位255,13位8191,16位65535),再輸入乙個計數脈衝,計數器便會溢位回零,並且計數器的溢位是tcon暫存器的tf0或tf1位置1,同時向核心提出中斷請求。如果定時/計數器工作於定時模式,則表示間隔定時時間到,如果工作與計數模式,則表示計數值已滿。
假設微控制器的外部晶振為12mhz,那麼,經過12分頻後輸入計數器的計數脈衝為1mhz,即每個脈衝的週期為1us。因此定時器t0的16位工作模式最大的定時時間為65535us,65.5ms。如果要定時10ms的話,計數器就不能夠從0開始計數了,必須給它乙個計數初值。怎麼計算這個初值呢?
要定時10ms,則相當於計數10000個脈衝後計數器的值就到達65535了,那麼開始計數的這個地方就是計數初值。
65535 - 10000 = 55535 = 0xd8ef
把這個計算得到的初值寫入th0和tl0暫存器即可:
th0 = 0xd8;或者th0 = (65535 - 10000) / 256;
tl0 = 0xef;或者tl0 = (65535 - 10000) % 256;
3、定時/計數器相關的暫存器
與定時/計數器相關的暫存器除了計數初值暫存器thx和tlx之外,就是tmod暫存器和tcon暫存器,務必掌握。
<1>tmod模式控制暫存器,不能進行位定址,只能位元組操作。
<2>tcon中斷標誌暫存器
4、定時/計數器的程式設計思路
在定時/計數器的程式設計中,通常有兩個函式:初始化函式和中斷服務函式。
在初始化函式中,一般需要進行以下幾個配置:
<1> 配置工作模式,即對tmod暫存器程式設計。
<2> 計算技術初值,即對thx和tlx暫存器進行賦值。
<3> 使能定時/計數器中斷,即et0或et1置1。
<4> 開啟總中斷,即ea =1。
<5> 啟動定時器,即tr0或tr1置1。
在中斷服務函式中,一般需要進行以下的程式設計:
<1> 如果不是自動重灌模式,需要對thx和tlx重新賦值。
<2> 進行間隔定時到達的邏輯處理(越少越好)。
定時器0:
#define n 50000 //n代表計時器中斷發生的時間,當n=50000時,中斷每50ms發生一次
/*初始化函式
*/void
init()
/*中斷函式
*/void timer_0() interrupt 1
藍橋杯微控制器之定時器
ie 中斷允許暫存器 中斷函式示例 時鐘週期 時鐘頻率的倒數 分頻 晶振的的頻率會變小,時鐘週期變大 詳情見超聲波模組 利用12分頻 即12t模式 更方便的計算聲波的傳輸距離。內部中斷 微控制器內部達到某種情況就觸發中斷 定時 首先是乙個平時我們寫的函式名再加上乙個中斷號 void timer0 i...
51微控制器複習 外部中斷,定時器 計數器中斷
中斷 什麼是中斷,就是打斷,你一開始在做一件事,突然意外發生 中斷源 你不得不停止手中的事,中斷響應 去處理那 件意外 中斷服務 處理完意外後你繼續做剛才那件事 中斷返回 這就是中斷,而微控制器中的中斷也是如此,微控制器中有五個中斷源,兩個優先順序 五個中斷源 外部中斷0 int0 定時器0中斷 t...
51微控制器定時器中斷定時方式012的區別
51微控制器定時方式0,1和2的區別 首先採用fsoc 12mhz晶振,其機器週期為12 fsoc,即為1us 定時方式0為13位定時 計數器,記滿值為213 8192 定時方式1為16位定時 計數器,記滿值為216 65536,16位初值分為高8位與低8位賦值,如採用定時器0,定時時間20ms,其...