|
理論部分:
中斷系統(tǒng)是為了使單片機(jī)能夠?qū)ν獠炕騼?nèi)部隨機(jī)發(fā)生的事件實(shí)時(shí)處理而設(shè)置的。中斷系統(tǒng)很大程度上提高了單片機(jī)實(shí)時(shí)處理能力,它也是單片機(jī)最重要的功能之一。
單片機(jī)輸入\輸出方式(信息交互):
1. 無條件傳送方式
2. 查詢傳送方式
3. 中斷傳送方式
中斷概念
對(duì)于單片機(jī)來講,中斷是指CPU在處理某一事件A時(shí),發(fā)生了另一事件B,請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU接到中斷請(qǐng)求后,暫停當(dāng)前正在進(jìn)行的工作(中斷響應(yīng)),轉(zhuǎn)去處理事件B(執(zhí)行相應(yīng)的中斷服務(wù)程序),待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。簡而言之,CPU正在執(zhí)行主程序的過程中,由于CPU之外的某種原因,有必要暫停主程序的執(zhí)行,轉(zhuǎn)而去執(zhí)行相應(yīng)的處理(中斷服務(wù))程序。待處理程序結(jié)束之后,再返回原程序斷點(diǎn)處繼續(xù)運(yùn)行的過程。
相關(guān)重要概念:
中斷源、中斷系統(tǒng)、主程序和中斷服務(wù)程序、中斷優(yōu)先級(jí)、中斷嵌套。
51單片機(jī)中斷系統(tǒng)原理圖:
原理概述:
中斷源共有5個(gè),其中外部中斷源共2個(gè)(外部中斷0和外部中斷1,圖中INTO和INT1)、定時(shí)/計(jì)數(shù)器中斷源2個(gè)(T0和T1,圖中T0和T1)、串行口中斷源1個(gè)(圖中結(jié)合的RX和TX的SCON);
TCON:可尋地址的8位定時(shí)/計(jì)數(shù)器控制寄存器;它可以用來控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止,標(biāo)志定時(shí)/計(jì)數(shù)器是否計(jì)滿溢出和中斷情況,還可以設(shè)定兩個(gè)外部中斷的觸發(fā)方式、標(biāo)志外部中斷請(qǐng)求是否觸發(fā)。
TCON寄存器的各位功能介紹如下:
IT0:外部中斷0的觸發(fā)方式控制位。當(dāng)IT0=0時(shí),為電平觸發(fā)方式,低電平觸發(fā)有效;當(dāng)IT0=1時(shí), 為邊沿觸發(fā)方式,下降沿觸發(fā)有效。
IE0:外部中斷0的中斷請(qǐng)求標(biāo)志位。當(dāng)外部中斷0的觸發(fā)請(qǐng)求有效時(shí),硬件電路自動(dòng)將該位置1,否則清0。換句話說,當(dāng)IE0=1時(shí),表明外部中斷0正在向CPU申請(qǐng)中斷;當(dāng)IE0=0時(shí),則表明外部中斷0沒有向CPU申請(qǐng)中斷。當(dāng)CPU響應(yīng)該中斷后,由硬件自動(dòng)將該位清0,不需用專門的語句將該位清0。
IT1:外部中斷1的觸發(fā)方式控制位。當(dāng)IT1=0時(shí),為電平觸發(fā)方式,低電平觸發(fā)有效;當(dāng)IT1=1時(shí), 為邊沿觸發(fā)方式,下降沿觸發(fā)有效。
IE1:外部中斷1的中斷請(qǐng)求標(biāo)志位。當(dāng)外部中斷1的觸發(fā)請(qǐng)求有效時(shí),硬件電路自動(dòng)將該位置1,否則清0。換句話說,當(dāng)IE1=1時(shí),表明外部中斷1正在向CPU申請(qǐng)中斷;當(dāng)IE1=0時(shí),則表明外部中斷1沒有向CPU申請(qǐng)中斷。當(dāng)CPU響應(yīng)該中斷后,由硬件自動(dòng)將該位清0,不需用專門的語句將該位清0。
TR0:定時(shí)/計(jì)數(shù)器0(T0)的啟動(dòng)控制位。當(dāng)TR0=1時(shí),T0啟動(dòng)計(jì)數(shù);當(dāng)TR0=0時(shí),T0停止計(jì)數(shù);
TF0:定時(shí)/計(jì)數(shù)器0(T0)的溢出中斷標(biāo)志位。當(dāng)定時(shí)/計(jì)數(shù)器0計(jì)滿溢出時(shí),由硬件自動(dòng)將TF0置1,并向CPU發(fā)出中斷請(qǐng)求,當(dāng)CPU響應(yīng)該中斷進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)將該位清0,不需用專門的語句將該位清0。需要說明的是:如果使用定時(shí)/計(jì)數(shù)器的中斷功能,則該位完全不用人為操作,硬件電路會(huì)自動(dòng)將該位置1、清0,但是如果中斷被屏蔽,使用軟件查詢方式去處理該位時(shí),則需用專門語句將該位清0。
TR1:定時(shí)/計(jì)數(shù)器1(T1)的啟動(dòng)控制位。其功能及使用方法同TR0。
TF1:定時(shí)/計(jì)數(shù)器1(T1)的溢出中斷標(biāo)志位。其功能及使用方法同TF0。
中斷允許寄存器IE:中斷的允許或禁止是在中斷允許寄存器IE中設(shè)置的。IE也是一個(gè)可位尋址的8位特殊功能寄存器
中斷允許寄存器IE的各位功能定義說明如下:
EA:即Enable All的縮寫,全局中斷允許控制位。當(dāng)EA=0時(shí),則所有中斷均被禁止;當(dāng)EA=1時(shí),全局中斷允許打開,在此條件下,由各個(gè)中斷源的中斷控制位確定相應(yīng)的中斷允許或禁止。換言之,EA就是各種中斷源的總開關(guān)。
EX0:外部中斷0( )的中斷允許位。如果EX0置1,則允許外部中斷0中斷,否則禁止外部中斷0中斷。
ET0:定時(shí)/計(jì)數(shù)器0的中斷允許位。如果ET0置1,則允許定時(shí)/計(jì)數(shù)器0中斷,否則禁止定時(shí)/計(jì)數(shù)器0中斷。
EX1:外部中斷1( )的中斷允許位。如果EX1置1,則允許外部中斷1中斷,否則禁止外部中斷1中斷。
ET1:定時(shí)/計(jì)數(shù)器1的中斷允許位。如果ET1置1,則允許定時(shí)/計(jì)數(shù)器1中斷,否則禁止定時(shí)/計(jì)數(shù)器1中斷。
中斷優(yōu)先級(jí)寄存器IP: 中斷源,按優(yōu)先級(jí)分為兩級(jí)中斷:1級(jí)中斷即高級(jí)中斷,0級(jí)中斷即低級(jí)中斷。中斷源的優(yōu)先級(jí)需在中斷優(yōu)先級(jí)寄存器IP中設(shè)置。IP也是一個(gè)可位尋址的8位特殊功能寄存器。
PX0、PT0、PX1、PT1、PS分別為外部中斷0、定時(shí)/計(jì)數(shù)器0中斷、外部中斷1、定時(shí)/計(jì)
數(shù)器1中斷、串行口中斷的優(yōu)先級(jí)控制位。當(dāng)某位置1時(shí),則相應(yīng)的中斷就是高級(jí)中斷,
否則就是低級(jí)中斷。優(yōu)先級(jí)相同的中斷源同時(shí)提出中斷請(qǐng)求時(shí),CPU優(yōu)先響應(yīng)自然優(yōu)先級(jí)
較高的中斷。
中斷初始化和中斷服務(wù)程序結(jié)構(gòu)
中斷初始化實(shí)質(zhì)上就是對(duì)4個(gè)與中斷有關(guān)的特殊功能寄存器TCON、SCON、IE和IP進(jìn)行管理和控制,具體實(shí)施如下:
① CPU的開、關(guān)中斷(即全局中斷允許控制位的打開與關(guān)閉,EA=1或EA=0);
② 具體中斷源中斷請(qǐng)求的允許和禁止(屏蔽);
③ 各中斷源優(yōu)先級(jí)別的控制;
④ 外部中斷請(qǐng)求觸發(fā)方式的設(shè)定。
中斷管理和控制(中斷初始化)程序一般都包含在主函數(shù)中,也可單獨(dú)寫成一個(gè)初始化函數(shù),根據(jù)需要通常只需幾條賦值語句即可完成。中斷服務(wù)程序是一種具有特定功能的獨(dú)立程序段,往往寫成一個(gè)獨(dú)立函數(shù),函數(shù)內(nèi)容可根據(jù)中斷源的要求進(jìn)行編寫。
C51的中斷服務(wù)程序(函數(shù))的格式如下:
void 中斷處理函數(shù)名()interrupt中斷序號(hào)
{
中斷函數(shù)處理內(nèi)容;
}
51單片機(jī)的5個(gè)中斷源的中斷序號(hào)、默認(rèn)優(yōu)先級(jí)別、對(duì)應(yīng)的中斷服務(wù)程序的入口地址
中斷源名稱
中斷序號(hào)
默認(rèn)優(yōu)先級(jí)別
中斷服務(wù)程序入口地址
外部中斷0( )
0
最高
0003H
定時(shí)/計(jì)數(shù)器0中斷
1
第2
000BH
外部中斷1( )
2
第3
0013H
定時(shí)/計(jì)數(shù)器1中斷
3
第4
001BH
串行口中斷
4
第5
0023H
實(shí)踐部分
中斷實(shí)驗(yàn)
代碼:
#include
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
sbit d1=P1^0;
uchar num;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
EA=1;//開總中斷
EX0=1;//開外部中斷0
//IT0=1;
TCON=0x01;
wela=1;//11101010
P0=0xea;
wela=0;
while(1)
{
for(num=0;num<16;num++)
{
d1=1;
dula=1;
P0=table[num];
dula=0;
delay(1000);
}
}
}
void delay(uint z)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void exter0() interrupt 0
{
d1=0;
}
實(shí)驗(yàn)現(xiàn)象:
單片機(jī)LED顯示屏顯示數(shù)字從1顯示到16(十六進(jìn)制),當(dāng)把P3^2和GND接通時(shí),D1亮起,斷開D1熄滅。
Powered by 單片機(jī)教程網(wǎng)