STC89C52中斷系統(tǒng)
80C51的中斷系統(tǒng)有5個中斷源(80C52有6個),2個優(yōu)先級,可實現(xiàn)二級中斷嵌套。
根據(jù)它的原理圖就可以看出,80C51一共有4個寄存器(TCON,SCON,IE,IP),附件有她們的詳細的寄存器示例圖。
如果想產(chǎn)生一個中斷請求,首先要做的就是打開IE里的EA標(biāo)志位,因為IE寄存器的地址是0xA8,所以可以對其位進行操作。而EA標(biāo)志位是整個中斷系統(tǒng)的總開關(guān),這一步必不可少。接著還要將你要產(chǎn)生的中斷號對位的IE中的相應(yīng)位置高電平,包括EX0(0號外部中斷),ET0(0號定時器中斷),EX1(1號外部中斷),ET1(1號定時器中斷),ES(串口中斷);上面的就是IE中的一些特殊位。下一步就是要指定是電平觸發(fā)還是脈沖觸發(fā)了,此步是要操作TCON寄存器,將IT0置1表示脈沖觸發(fā),置0表示是電平觸發(fā),此處操作是0號外部中斷的一些基本設(shè)置,其它中斷設(shè)置參照原理圖便可得,此處不再重復(fù)。
接下來就可以拿出板子進行試驗了,注意因為是電平觸發(fā),所以要將P32引腳接地,也就是變?yōu)榈碗娖郊纯?,來產(chǎn)生一個中斷請求。下面附上我的一個示例程序, 產(chǎn)生的效果是:蜂鳴器將不間斷的發(fā)出響聲,注:程序為手寫,沒調(diào)試過,不能保證一定能調(diào)通
#includesbitbeep=P3^2;inti,j;voiddelay(unsignedchar);//聲明延遲函數(shù)voidmain(){EA=1;//打開中斷系統(tǒng)總開關(guān)EX0=1;//產(chǎn)生0號外部中斷IT0=0;//采用電平觸發(fā)方式觸發(fā)while(1){beep=0;delay(100);//延遲函數(shù)interupt();//調(diào)用中斷函數(shù)}}//延遲函數(shù)voiddelay(unsignedchart){for(i=0;i<50000;i++)for(j=0;j