上圖即為中斷過程示意圖,產生中斷的請求源被稱為中斷源,中斷源向cpu提出的處理請求被稱為中斷請求或中斷申請。cpu暫時中止當前的事件,轉去處理中斷請求所對應的事件稱為cpu的中斷響應過程,對事件的整個處理過程稱為中斷服務(中斷處理)。處理完畢後,返回到原先被中止的地方稱為中斷返回。
80c51的終端系統有5個中斷源(52有6個),兩個優先順序,可以實現二級中斷巢狀。
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;
與定時/計數器相關的暫存器除了計數初值暫存器thx和tlx之外,就是tmod暫存器和tcon暫存器,務必掌握。
在定時/計數器的程式設計中,通常有兩個函式:初始化函式和中斷服務函式。
在初始化函式中,一般需要進行以下幾個配置:
<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
中斷定時器與流水燈
此程式為設定led流水燈與數碼管第0一位的0 16數字迴圈亮。不能將數碼管程式放進主函式裡,因為延遲函式delay,可能會在add自加到40時剛好在dalay裡面,這時不會有數碼管的閃爍。include include define uchar unsigned char define uint u...
PWM,外部中斷,定時器中斷的基本總結
本週的學習內容主要是pwm,外部中斷和定時器中斷,了解了pwm的基本功能以及外部中斷,定時器中斷的執行過程.一 pwm 1.pwm一般是指脈衝寬度調製,通過pwm功能就能調節輸出電壓。2.占空比指的是高低電平所佔時間的比值,比值越大,占空比越大。在乙個週期t內,若高電平輸出時間為0.4t,則它的占空...
STVD TIM4 8位中斷定時器
中斷定時 1.在main.c中寫下中斷函式 far interrupt void tim4 upd ovf irqhandler void 新增宣告 void tim4 upd ovf irqhandler void 出現錯誤 error cpstm8 main.c 40 48 space attr...