天天看點

對51單片機中斷系統的了解

51單片機的中斷系統十分重要,前幾次我在學習的時候,根本分不清外部中斷、定時器中斷的差別以及正确使用方法。今天,偶然打破了自己的正常思路,得到了一點點了解,與大家分享下,希望大家不吝指出其中的不足與錯誤。

        1.單片機的中斷分類:隻有兩類,外部中斷和定時器中斷。這兩種中斷使用時可以完全分離。

2.最常用的自動中斷是定時器中斷,也就是自己設定一個“倒計時”,該倒計時與主程式同時開始,一旦時間耗盡,開始停止主程式,進行中斷程式。這種定時器中斷的開啟方法隻需要這幾個寄存器設定:

EA=1表示允許任何中斷開啟;

ETx表示時間耗盡允許執行中斷程式;

TRx表示允許倒計時開始;

TMOD表示倒計時的計時工作方式;

THx,TLx表示倒計時的值。

然後寫中斷程式interrupt 1或3 。

3.可以人工控制的中斷是外部中斷,開啟方式最簡單,隻需要以下寄存器:EA=1表示意義同上;EXx表示外部條件(3.2或者3.3口低電平)滿足去執行中斷程式。然後寫中斷程式interrupt 0或 2 。

以前總是誤認為使用外部中斷必須要開啟定時器中斷,現在想想不是這樣的。

提供兩個簡單程式供大家測試:

程式一:定時器中斷

sbit beep=P2^3;

void init();

int main()

{

    init();

    while(1);

}

void init()

{

    EA=1;

    ET0=1;

    TR0=1;

    TH0=(65535-50000)/256;

    TL0=(65535-50000)%256;

    TMOD=0x01;

}

void inter() interrupt 1

{

    int a;

    TH0=(65535-50000)/256;

    TL0=(65535-50000)%256;

    a++;

    if(a==40)

    {

        a=0;

        beep=~beep;

    }

}

程式二:外部中斷

#include<reg52.h>

void init()

{

    EA=1;

    EX0=1;

    IT0=0;

}

int main()

{

    init();

    while(1)

    {

        P1

    }

}

void interceshi() interrupt 0

{

    P1=0;

}

繼續閱讀