好了,廢話(huà)不多說(shuō),今天小編給大家講講如何來(lái)寫(xiě)51單片機(jī)的中斷功能,51單片機(jī)中斷源有5個(gè),分別是外部中斷0,外部中斷1,定時(shí)器0,定時(shí)器1,串行口中斷。
不管是大學(xué)里上課的書(shū)本,還是參考書(shū)也好,在單片機(jī)的書(shū)里面都是寫(xiě)了一系列密密麻麻的知識(shí)點(diǎn),最后就敲個(gè)代碼,然后很多初學(xué)者從頭學(xué)到尾,好像知道怎么寫(xiě),但是又不會(huì)寫(xiě)。進(jìn)來(lái)看這篇文章的同伴們,不管您會(huì)也好,不會(huì)也罷,小編把我當(dāng)時(shí)怎么學(xué)中斷的經(jīng)驗(yàn)分享給大家,好讓更多的同伴們?cè)缛彰撾x書(shū)本,開(kāi)啟自寫(xiě)編程時(shí)代!。
好了,大家也大概明白了什么是中斷了吧?我們不要像書(shū)本寫(xiě)的內(nèi)容那么復(fù)雜,我們來(lái)說(shuō),怎么樣來(lái)讓51單片機(jī)執(zhí)行中斷,然后,有需要的我們?cè)偃ゲ闀?shū)本。
那么,我們?nèi)绾蝸?lái)寫(xiě)一個(gè)51單片機(jī)的中斷呢??
首先,我們?cè)谥骱瘮?shù)中要有以下代碼:
以外部中斷0為例子:
void main()
{
EA=1; //打開(kāi)中斷總開(kāi)關(guān),等于1表示打開(kāi),等于0表示關(guān)閉
EX0=1; //打開(kāi)外部中斷0,如果是外部中斷1則為EX1=1;
IT0=0; //選擇觸發(fā)方式,0是表示電平觸發(fā),1表示下降沿觸發(fā)
//如果是外部中斷1則為IT1=?
}
接著寫(xiě)中斷服務(wù)函數(shù)
void interrupt_0()interrupt 0 //這后面的中斷序號(hào)千萬(wàn)別寫(xiě)錯(cuò)
{
........................
}
大概就是以上的兩個(gè)步驟!
接下來(lái)我們來(lái)看一個(gè)程序代碼:感受一下中斷的魅力!
#include<reg51.h>
#define uchar unsigned char //宏定義
#define uint unsigned int
sbit led=P1^0; //
void Delay(uint del) //10毫秒帶參量延時(shí)函數(shù)
{
uint i,j;
for(i=0; i<del; i++)
for(j=0; j<1827; j++);
}
void interrupt_0()interrupt 0 //外部中斷0的序號(hào)是0
{
led=~led; //將led的狀態(tài)取反
delay(10); //延時(shí)10X10=100ms
}
//現(xiàn)在你試試,按一下P3^2的按鍵,看看led有沒(méi)有閃一下,注意噢,這是用外部中斷來(lái)實(shí)現(xiàn)led燈亮滅的噢,雖然也是用按鍵,但是開(kāi)頭我沒(méi)有對(duì)任何一個(gè)按鍵KEY進(jìn)行定義噢。
void main()
{
EA=1; //打開(kāi)總中斷
EX0=1; //打開(kāi)外部中斷0
IT0=0; //讓外部中斷0用電平觸發(fā)方式
while(1); //讓程序就停在這兒
}
好了,我們這一講就到此結(jié)束吧,你們可以把我的程序拷貝回去改一改變成自己想要的中斷操作模式,要是有不懂的地方多翻翻書(shū)本,如果還不理解的話(huà)可以加小編的微信提問(wèn)。