51單片機中斷機制(定時器/計數器)

單片機中斷簡介

52單片機一共有6箇中斷源,它們的符號,名稱以及各產生的條件分別以下:編程

  1. INT0 - 外部中斷0,由P3.2端口線引入,低電平或降低沿引發
  2. INT1 - 外部中斷1,由P3.3端口線引入,低電平或降低沿引發
  3. T0    - 定時器/計數器0中斷, 由T0計數器計滿回零引發
  4. T1    - 定時器/計數器1中斷, 由T1計數器計滿回零引發
  5. T2    - 定時器/計數器2中斷, 由T2計數器計滿回零引發
  6. TI/RI - 串行口中斷,串行端口完成一幀字符發送/接收後引發

其中T2是52單片機特有的。ui

中斷容許寄存器IE

 

中斷優先級寄存器IP

 

 

定時器中斷

51單片機內部共有兩個16位可編程的定時器/計數器,即定時器T0和定時器T1spa

52單片機內部多一個T2定時器/計數器3d

 

它們既有定時功能,也有計數功能。可經過設置與它們相關的特殊功能寄存器選擇啓用定時功能仍是計數功能。code

這個定時器系統是單片機內部一個獨立的硬件部分,它與CPU和晶振經過內部某些控制線鏈接並相互做用,CPU一旦設置開啓定時功能後,定時器便在晶振的做用下自動開始計時,但定時器的計數器計滿後,會產生中斷。blog

 

定時器/計數器的實質是加1計數器(16位), 由高8位和低8位兩個寄存器組成,it

TMOD:定時器/計數器的工做方式寄存器,肯定工做方式和功能。class

TCON:控制寄存器,控制T0,T1的啓動和中止及設置溢出標誌。硬件

 

TMOD:定時器/計數器工做方式寄存器定時器

 

 TCON:定時器/計數器控制寄存器

       

 

 每一個定時器有4種工做方式,可經過設置TMOD寄存器中的M1和M0來進行工做方式選擇。

方式1的技術位數是16bit,對T0來講, TL0寄存器做爲低8bit,TH0寄存器做爲高8bit,組成了16bit加1計數器,邏輯結構框圖以下

 

 

如何計算定時器的初值

 

 中斷服務程序的寫法

 

示例

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit led1 = P0^0;
uchar num = 0;

//主程序
void main()
{
    TMOD = 0x01;
    TH0 = (65536 - 45872) / 256;    // 設置定時器0爲工做方式1(M1M0爲01)
    TL0 = (65536 - 45872) % 256;    // 裝初值11.0592M晶振定時50ms數位45872
    EA = 1;                            // 開總中斷
    ET0 = 1;                        // 開定時器0中斷
    TR0 = 1;                        // 啓動定時器0
    while(1)
    {
        if (num == 20)
        {
            num = 0;
            led1 = ~led1;
        }
    }
}


void T0_time() interrupt 1
{
    TH0 = (65536 - 45872) / 256;
    TL0 = (65536 - 45872) % 256;
    num++;
}
相關文章
相關標籤/搜索