1. 程式人生 > >51微控制器中斷系統(定時器、計數器)

51微控制器中斷系統(定時器、計數器)

*部分內容來源於網路

一、中斷

中斷是指計算機執行過程中,出現某些意外情況需主機干預時,機器能自動停止正在執行的程式並轉入處理新情況的程式,處理完畢後又返回原被暫停的程式繼續執行。


(*以上解釋來自於百度百科-中斷)

二、51微控制器中斷級別

中斷號

優先順序

中斷源

中斷入口地址

0

1(最高)

INT0

外部中斷0

0003H

1

2

T0

定時器/計數器0中斷

000BH

2

3

INT1

外部中斷1

0013H

3

4

T1

定時器/計數器1中斷

0018H

4

5(最低)

TX/RX

序列口中斷

0023H

三、中斷結構圖


四、中斷暫存器

1、 中斷允許控制暫存器IE

位地址

AFH

AEH

ADH

ACH

ABH

AAH

A9H

A8H

位序號

7

6

5

4

3

2

1

0

位名稱

EA

-

-

ES

ET1

EX1

ET0

EX0

EX0/EX1:外部中斷允許控制位

        EX0=1 外部中斷0開關閉合     //開外部0中斷

        EX0=0 外部中斷0開關斷開

ET0/ET1:定時中斷允許控制位

        ET0=1 定時器中斷0開關閉合   //開內部中斷0

        ET0=0 定時器中斷0開關斷開

ES:串列埠中斷允許控制位    

        ES=1 串列埠中斷開關閉合         //開串列埠中斷

        ES=0 串列埠中斷開關斷開

2、 定時器控制暫存器TCON

位地址

8FH

8EH

8DH

8CH

8BH

8AH

89H

88H

位序號

7

6

5

4

3

2

1

0

位名稱

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

       外部中斷:

           IE0/IE1:外部中斷請求標誌位

                   當INT0(INT1)引腳出現有效的請求訊號,此位由微控制器自動置1,

                   CPU開始響應,處理中斷,而當入中斷程式後由微控制器自動置0.

           IT0/IT1:外部中斷觸發方式控制位          //選擇有效訊號

                   IT0/IT1=1:脈衝觸發方式,下降沿有效。

                   IT0/IT1=0:電平觸發方式,低電平有效。

       內部中斷:

           TF0/TF1:內部定時器/計數器溢位中斷標誌位

                    當定時器、計數器計數溢位的時候,此位由微控制器自動置1,

                    cup開始響應,處理中斷,而當進入中斷程式後由微控制器自動置0.

                    //內部中斷實際上就是利用內部的計數器,

                      只不過提供計數的脈衝來自微控制器自身。

           TR0(TR1):定時器/計數器啟動位                    //啟動定時器

                   TR0/TR1=1;啟動定時器/計數器0

                   TR0/TR1=0;關閉定時器/計數器0

3、 串列埠控制暫存器SCON

位地址

9FH

9EH

9DH

9CH

9BH

9AH

99H

98H

位序號

7

6

5

4

3

2

1

0

位名稱

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

      TI:序列口傳送中斷標誌位

           當微控制器串列埠傳送完一幀資料後,此位由微控制器自動置1,

           而當進入中斷服務程式後是不會自動清0的,

           必須由使用者在中斷服務中用軟體清0.

       RI:序列口接收中斷標誌位

           當微控制器串列埠接收完一幀資料後,此位由微控制器自動置1,

           而當進入中斷服務程式後是不會自動清0的,

           必須由使用者在中斷服務軟體中用軟體清0.

4、 中斷優先控制暫存器IP

位序號

 7 

 6 

 5 

4

3

2

1

0

位名稱

-

-

-

PS

PT1

PX1

PT0

PX0

       PS---序列口中斷優先順序控制位。

           PS=1,序列口中斷定義為高優先順序中斷。

           PS=0,序列口中斷定義為低優先順序中斷。

       PT1---定時器/計數器1中斷優先順序控制位。

           PT1=1,定時器/計數器1中斷定義為高優先順序中斷。

           PT1=0,定時器/計數器1中斷定義為低優先順序中斷。

       PX1---外部中斷1中斷優先順序控制位。

           PX1=1,外部中斷1中斷定義為高優先順序中斷。

           PX1=0,外部中斷1中斷定義為低優先順序中斷。

       PT0---定時器/計數器0中斷優先順序控制位。

           PT0=1,定時器/計數器0中斷定義為高優先順序中斷。

           PT0=0,定時器/計數器0中斷定義為低優先順序中斷。

       PX0---外部中斷0中斷優先順序控制位。

           PX0=1,外部中斷0中斷定義為高優先順序中斷。

           PX0=0,外部中斷0中斷定義為低優先順序中斷。

5、 定時器工作方式控制暫存器TMOD

位序號

7

6

5

4

3

2

1

0

定時器

定時器/計數器1(ET1)

定時器/計數器0(ET0)

位名稱

GATE

C/T

M1

MO

GATE

C/T

M1

M0

        GATE——門控制。   

             GATE=1時,由外部中斷引腳INT0、INT1來啟動定時器T0、T1。   

                   當INT0引腳為高電平時TR0置位,啟動定時器T0;   

                   當INT1引腳為高電平時TR1置位,啟動定時器T1。   

             GATE=0時,僅由TR0,TR1置位分別啟動定時器T0、T1。

        C/T——功能選擇位   

             C/T=0時為定時功能,

             C/T=1時為計數功能。    

        M0、M1——方式選擇功能

M1

M0

工作方式

功  能

0

0

工作方式0

13位計數器

0

1

工作方式1

16位計數器

1

0

工作方式2

自動再裝入8位計數器

1

1

工作方式3

定時器0:分成兩個8位計數器

定時器1:停止計數

6、 定時器初值賦予暫存器(TH0/TH1,TL0/TL1)

五、定時器、計數器

1、 工作方式



2、 定時器初值計算

1.計數器初值的計算

   設計數器的最大計數值為M(根據不同工作方式,M可以是2^13、2^16或2^8),則計算初值X的公式如下:

                    X=M-要求的計數值

2.定時器初值的計算

   在定時器模式下,計數器由微控制器主脈衝fosc經12分頻後計數。因此,定時器定時初值計算公式:

                    X=M-(要求的定時值)/(12/fosc)

   式中,M為定時器模值(根據不同工作方式,M可以是213、216或28)

關於如何確定定時器T0的初值問題。定時器一但啟動,它便在原來的數值上開始加1計數,若在程式開始時,我們沒有設定TH0和TL0,它們的預設值都是0,假設時鐘頻率為12MHz,12個時鐘週期為一個機器週期,那麼此時機器週期為1us,記滿TH0和TL0就需要216 -1個數,再來一個脈衝計數器溢位,隨即向CPU申請中斷。因此溢位一次共需65536us,約等於65.6ms,如果我們要定時50ms的話,那麼就需要先給TH0和TL0裝一個初值,在這個初值的基礎上記50000個數後,定時器溢位,此時剛好就是50ms中斷一次,當需要定時1s時,我們寫程式時當產生20次50ms的定時器中斷後便認為是1s,這樣便可精確控制定時時間啦。要計50000個數時,TH0和TL0中應該裝入的總數是65536-50000=15536.,把15536對256求模:15536/256=60裝入TH0中,把15536對256求餘:15536/256=176裝入TL0中。

以上就是定時器初值的計演算法,總結後得出如下結論:當用定時器的方式1時,設機器週期為TCY,定時器產生一次中斷的時間為t,那麼需要計數的個數為N=t/TCY ,裝入THX和TLX中的數分別為:

THX=(65536-N)/256    ,     TLX=(65536-N)%256 

設定為計數器模式時,外部計數脈衝由T0或T1引腳輸入到計數器。在每個機器週期S5P2期間取樣T0,T1引腳電平,當某週期取樣到一高電平輸入,而下一週期又取樣到一低電平時,則計時器加1,更新的計數值在下一個機器週期的S3P1期間裝入計數器。由於檢測一個從1到0的下降沿需要兩個機器週期,因此要求被取樣的電平至少維持一個機器週期。當晶振頻率位12MHz時,最高計數頻率不超過1/2MHz,即技術脈衝的週期要大於2us。

補充,

定時計數器2: MCS-52微控制器新增的定時計數器。

特點:

      --16位定時計數器

      --具有捕捉、自動重灌、波特率發生器3種工作模式

      --可作為程式設計時鐘發生器

暫存器:

      T2CON-定時器2控制暫存器

      T2MOD定時器2方式暫存器

      TH2,TL2定時計數暫存器

      RCAP2H,RCAP2L-捕獲/重灌暫存器

引腳:

      T2(P1.0):定時器2外部時鐘輸入/時鐘輸出

      T2EXP(P1.1):定時器2重灌/捕獲/方向控制

IE, IP, IPH中有定時器2的中斷允許,終端優先控制位。

T2CON 暫存器

地址:0C8H 復位值:00000000B

7

6

5

4

3

2

1

0

TF2

EXF2

RCLK

TCLK

EXEN2

TR2

C/T2

CP/RL2

符號

功能

T2CON.7

TF2

定時器2溢位標誌位。

RCLK或TCLK=1時不置位。

T2CON.6

EXF2

定時器2外部標誌。

當EXEN2=1時,T2EX的負跳變產生捕獲或重灌時,EXF2=1.

T2CON.5

RCLK

接受時鐘標誌

T2CON.4

TCLK

傳送時鐘標誌

T2CON.3

EXEN2

定時器2外部使能標誌。

T2CON.2

TR2

定時器2啟動/停止控制位。0停止,1啟動。

T2CON.1

C/T2

定時器計數器選擇:0定時,1計數。

T2CON.0

CP/RL2

捕獲重灌標誌,1捕獲,0重灌。

定時器2可以產生2箇中斷請求訊號,分別是TF2和EXF2,這2中斷請求訊號通過邏輯“或”的關係共享一個終端請求通道。

定時器2溢位時,TF2置1,向CPU申請中斷。若在定時器2工作在重灌模式時候,使RCAP2H,RCAP2L的值自動裝入TH2,TL2。

當EXEN2=1時,T2EX引腳的負跳變使EX2F置1,這個訊號除了向CPU申請中斷外,根據定時器2的工作方式,還有2個作用:一是將TH2,TL2的值裝入RCAP2H,RCAP2L,稱為捕獲;二是將RCAP2H,RCAP2L的值裝入TH2,TL2,稱為重灌。

TF2,EXF2必須由軟體清除。

RCLK:當該位置1時,定時器2做串列埠接受波特率發生器,即接受時鐘。否則使用定時器1做波特率發生器。

TCLK:當該位置1時,定時2做串列埠波特率發生器,即傳送時鐘。否則使用定時器1做波特率發生器。

TR2:置1時允許T2計數,置0時禁止T2計數

C/T2:置1時定時器2對T2引腳輸入的脈衝計數。置0時定時器2對內部震盪訊號的12分頻或6分頻計數。

CP/RL2:捕獲/重灌標誌,置1時捕獲,置0時重灌。當定時器2做波特率發生器時,強制自動重灌,不管該位狀態。

捕獲模式:

CKCON的X2位控制內部振盪訊號是12分頻還是6分頻。

T2CON的C/T2位控制T2對內部脈衝計數還是對外部脈衝計數。

T2CON的TR2位啟動或停止計數

T2CON的CP/RL位置1,使T2工作在捕獲模式

T2CON的EXEN2置1,連線T2EX引腳到捕獲控制端。

在T2EX引腳的負跳變時刻,使TH2的值捕獲到RCAP2H,TL2的值捕獲到RCAP2L,同時使T2CON的EXF2置1,向CPU申請中斷。

當T2溢位時,T2CON的TF2置1向CPU申請中斷。

捕獲方式可以用來測量外部脈衝的週期。

自動重灌模式

自動重灌模式下定時器的初值由硬體自動恢復。這個特性降低了軟體開銷。

T2的工作在自動重灌模式時計數方向可變,即定時器2即可工作在增量式計數方式,也可工作在減量式計數方式。計數方式的選擇由T2MOD暫存器的DCEN位控制使能,由T2EX引腳控制計數方向。

定時器2也可以在T2(P1.0)引腳輸出可程式設計時鐘。

通過配置T2MOD暫存器選擇以上功能。

T2MOD暫存器

地址0C9H   復位值:XXXXXX00B

7

6

5

4

3

2

1

0

-

-

-

-

-

-

T2OE

DCEN

符號

功能

T2CON.1

T2OE

定時器2輸出使能

T2CON.0

DCEN

向下計數使能位,置1使能。

其他不用的位在程式設計時不要置1.

自動重灌載模式


自動重灌模式(DCEN=0)說明

CKCON的X2位控制內部振盪訊號是12分頻還是6分頻。

T2CON的C/T2位控制T2對內部脈衝計數還是對外部脈衝計數。

T2CON的TR2位啟動或停止計數

T2CON的CP/RL位置0,使T2工作在自動重灌模式

T2CON的EXEN2置1,連線T2EX引腳到重灌控制端。

在T2EX引腳的負跳變時刻,使RCAP2H 的值重灌到TH2 , RCAP2L 的值重灌到TL2 ,同時使T2CON的EXF2置1,向CPU申請中斷。

當T2溢位時,T2CON的TF2置1,使RCAP2H 的值重灌到TH2 , RCAP2L 的值重灌到TL2 ,同時向CPU申請中斷。

在DCEN=0時,定時器2增量式計數。

自動重灌模式(DCEN=1)

自動重灌模式(DCEN=1)說明

CKCON的X2位控制內部振盪訊號是12分頻還是6分頻。

T2CON的C/T2位控制T2對內部脈衝計數還是對外部脈衝計數。

T2CON的TR2位啟動或停止計數

T2CON的CP/RL位置0,使T2工作在自動重灌模式

T2CON的EXEN2置1,連線T2EX引腳到重灌控制端。

在定時器2溢位時,自動裝入初值。

當T2EX=0時,定時器2減量方式計數,FFH自動裝入TH2和TL2。

當T2EX=1時,定時器2增量方式計數,RCAP2H自動裝入TH2,RCAP2L自動裝入TL2。

波特率發生器模式

當T2CON的RCLK=1,或TCLK=1,或RCLK=TCLK=1時,定時器2做波特率發生器。

這時定時器2強制自動重灌。

T2CON的C/T2=0時,定時器2對內部振盪脈衝的2分頻計數。

T2CON的TR2位啟動或停止T2計數

定時器2溢位時不向CPU申請中斷,溢位訊號16分頻後做串列埠的傳送或接收時鐘。由RCLK,TCLK的狀態決定。

當T2CON的EXEB2=1時,T2EX引腳可做為外部中斷源,該引腳的負跳變使EXF2=1向CPU申請中斷

可程式設計時鐘輸出

通過對定時器2的設定,可在T2(P10)引腳上輸出頻率可程式設計的時鐘脈衝。

T2CON的設定

RCLK=TCLK=0

C/T2=0

CP/RL=0

TMOD2的T2OE=1

RCAPH2,RCAPL2的值控制輸出時鐘頻率。

輸出時鐘頻率=

振盪器頻率/4*[65536-(RCAP2H,RCAP2H)]