STC89C52中斷調用以及定時器計數、中斷、定時的調用


僅適用於STC89C52系列芯片。

 

 

中斷:

通過配置IE中斷允許寄存器以及TCON來使用中斷  這個寄存器可以進行位尋址操作及直接EA = 1;

 

 

EA為中斷總開關。

芯片有三個定時器中斷入口:

ET1是定時器T1溢出中斷允許位。

ET0是定時器T0溢出中斷允許位。

ET2是定時器T2溢出中斷允許位。

 

ES是串口中斷允許位。

 

EX1是外部中斷1允許位

EX0是外部中斷0允許位

外部中斷2 3同理

 

IE1是外部中斷1請求源標志,當IE1 = 1時外部中斷向單片機請求中斷,當單片機相應中斷,由硬件置0.

IE0、IE2、IE3同理。

 

配置外部中斷時需要配置TCON以及XICON來配置外部中斷觸發的方式:

IT1和IT0控制外部中斷1、0的觸發方式是低電平還是下降沿。

IT2、IT3同理。

 

串口中斷還需要配置SCON寄存器(可以位尋址)

 

 

 

 

 

定時器:

通過配置TCON寄存器來使用定時器

TR0是定時器T0的運行控制位

TR1是定時器T1的運行控制位

TF0是定時器0的溢出中斷標志,當計數最高位超出65535時TF0被硬件置1需要手動清零

TF1是定時器1的溢出中斷標志,當計數最高位超出65535時TF1被硬件置1需要手動清零

 

 

 

在配置完TCON后還需要配置TMOD來配置定時器的工作模式    TMOD不可以位尋址

 

 

當配置TMOD = 0x01時即為定時器工作模式1,16位定時模式

 

定時器計時示例:

void timer0Init()
{
    TR0 = 1;     //啟動定時器0
    TMOD = 0X01; //定時器工作模式1,16位定時器計數模式
    TH0 = 0x4b;
    TL0 = 0xfd; //定時50ms
}

 

 

在使用定時器中斷的時候同時需要配置定時器:

下面是定時器中斷示例:

void timer0Init()  //timer0中斷初始化
{
    EA = 1;      //打開總中斷
    ET0 = 1;     //打開定時器0中斷
    TR0 = 1;     //啟動定時器0
    TMOD = 0X01; //定時器工作模式1,16位定時模式
    TH0 = 0xED;
    TL0 = 0xFF; //定時5ms
}

void timer0() interrupt 1  //中斷服務函數
{
    TH0 = 0xED;
    TL0 = 0xFF; //定時5ms
    display(num); //數碼管顯示函數    
}

關於定時器的賦值:

 以定時50ms為例:

先轉換位um

50000um

50000/1.085 = 46082

TH0 = (65535 - 46082)/ 256

TL0 = (65535 - 46082)% 256


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM