• 沒有找到結果。

第五章 系統介紹及原理

5.4 中斷原理

5.4.1 MCS-51 計時 計數器

MCS-51 內部有兩組十六位元計時/計數器、計時/計數器 0

(TIMER/COUNTER0)及計時/計數器 1(TIMER/COUNTER1),以後說明簡稱 Timer 0,Timer 1,MCS-52 內部計時/計數器除了 Timer 0,Timer 1 外尚增加一組計時/計數器 2(TIMER/COUNTER2)以後說明簡稱 Timer 2。

以上三組計時/計數器均可經由軟體規劃成計數器或者是計時器。

Timer 0,Timer 1 不管是執行計時器或者是計數器,均可各別規劃 成下列四種工作模式:

 Timer1 停止計時/計數工作。

Timer0,Timer1 在模式 0,模式 1 及模式 2 中使用方法均相同,在 模式 3 中 Timer0 為兩組獨立可同時工作 8 位元計時/計數器而 Timer 1 進入模式 3 便停止 Timer 1 計時/計數的工作。

Timer 0 與 Timer 1 規劃步驟

在規劃 Timer 0、Timer 1 時,必須使用到特殊功能暫存器(SFR)中 計時/計數器模式控制暫存器(TMOD),計時/計數器控制暫存器(TCON)及 計時/計數器(TH0,TL0)、(TH1,TL1)。在以後說明中,若 Timer 0、Timer 均有的暫存器或位元,由於其特性均一樣,我們將以 x(x:0 或 1)表示

表 5-1 TMOD 暫存器位元功能表

TMOD:計時/計數器模式控制暫存器(Timer/Counter Mode Control Register)

位址:89H(不可位元定址)

表 5-2 TCON 暫存器位元功能表

TCON:計時/計數器控制暫存器(Timer/Counter Control Register)

位址:88H(可位元定址)

B7 B6 B5 B4 B3 B2 B1 B0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TFX(X:0、1):計時/計數器 X 之溢位旗標,溢位時硬體自動設定

為 1。當執行計時/計數器 X 之中斷程式時,硬體 會自動將溢位旗標清除,否則需由軟體清除。

TRX(X:0、1):計時/計數器 X 之啟動位元,由軟體設定為 1 時自 動啟動,清除為 0 時關閉。

IEX(X:0、1):外部中斷 X 之中斷旗號,當外部中斷信號(由 P3.2 或 P3.3 接腳輸入)被偵測時,硬體會自動設定為 1,

當執行外部中斷服務程式時,硬體自動清除為 0。

ITX(X:0、1):規劃外部中斷信號觸發型態 ITX=0 低準位觸發。

ITX=1 負緣(1→0)觸發。

圖 5-5 計時/計數器控制邏輯電路圖

表 5-3 第四行,若 TRX 設定為 1,GATE 設定為 1,當INTX_______為 0 時則

c.INTX_______=1(外部輸入信號) 計時/計數脈波源的選擇:

一、C/T__=0(TMOD):選擇計時脈波,計時脈波頻率為 fosc/12。

二、C/T__=1(TMOD):選擇計數脈波,計數 T0(T1)的脈波頻率。

解:十六位元計數器,最高計數值為 2^16=(65536)D(D 表十進制)預定 計數 5000,而計數器為上數方式。所以(TH0,TH1)之初始值為

2^16-5000=65536-5000=(60536)D (60536)D=(EC78)H(H 表十六進制) TH0=(EC)H,TL0=(78)H

#<(2^16-5000)表示將(2^16-5000)運算後取十六進制的 Low Byte 值 (78)H

#>(2^16-5000)表示將(2^16-5000)運算後取十六進制的 High Byte 值 (EC)H

MOV TL0,#(2**16-5000)˙MOD˙256 MOV TH0,#(2**16-5000)/256

2^16-5000=60536=236×256+120

#(2^16-5000)/256 表示取運算完後的商數(236)D=(EC)H

#(2^16-5000)˙MOD˙256 表示取運算完後的餘數(120)D=(78)H 計時/計數器四種工作模式說明如下:

模式 0

模式 0 為 13 位元計時/計數器,電路結構圖如圖 5-6 所示。圖中控 制邏輯電路與圖 5-5 所示一樣,因此啟動方式及脈波源的選擇,請參考 表 4-3。由於 TLX 為低 5 位元(B4~B0),只能計數 2^5=32 個脈波,因此

計時時間/計數目的計算略有不同。

例如:要設計計數 5000 個脈波,則(TLX,THX)的初始值為 TLX=(2^13-5000)˙MOD˙32

THX=(2^13-5000)/32 若使用 Timer0 則程式

MOV TL0,#(2**13-5000)˙MOD˙32 MOV TH0,#(2**13-5000)/32

若使用 Timer1 則程式

MOV TL1,#(2**13-5000)˙MOD˙32 MOV TH1,#(2**13-5000)/32

圖 5-6 計時/計數器 1 模式 0 結構圖

模式 1

模式 1 為 16 位元計時/計數器,電路結構圖如圖 5-7 所示。模式 1 和模式 0 除了計數暫存器位元長度不同外,(模式 0 為 13 位元),其餘 動作方式均相同,請參考模式 0。

圖 5-7 計時/計數器 1 模式 1 結構圖

模式 2

模式 2 為 8 位元自動載入計時/計數器,電路結構圖如圖 5-8 所示。

圖中控制邏輯電路與圖 5-5 所示一樣,啟動方法及脈波源的選擇,請參 考表 5-3。TLX 為執行計數脈波的計數器,而 THX 則存放計數暫存器之 初始值,當 TLX 計數器溢位時,硬體除了設定溢位溢味旗號外(TFX=1) 會自動將 THX 的值載入到 TLX 中。

圖 5-8 計時/計數器 1 模式 2 結構圖

模式 3

模式 3 工作情形較特殊,計時/計數器 0 分成兩個獨立的 8 位元計

時/計數器,電路結構圖如圖 5-9 所示。TLO 使用計時/計數器 0 的控制 位元INT0_______,GATE,TR0,C/T__及 TF0,可規劃成計時器或計數器。TH0 則 由 TR1 控制啟動/停止只能當作計時器,TH0 溢位時 TF1 設定為 1 要求中 斷。

雖然當計時/計數器 0 在模式 3 時使用 TR1 及 TF1 控制位元,但計 時/計數器 1 仍可執行只是溢位時無法產生中斷請求,計時/計數器 1 採 用進入/離開模式 3 方式來停止/啟動計時/計數器 1 的工作。

圖 5-9 計時/計數器 0 模式 3 結構圖

5.4.2 中斷

MCS-51 有五種中斷源,MCS-52 則有 6 種中斷源,各中斷源由中斷 致能暫存器(IE; Interrupt Enable Register)及中斷優先權暫存器(IP;

Interrupt Priority Register)控制、各暫存器功能依序說明如下:

中斷致能暫存器(IE; Interrupt Enable Register)

中斷致能暫存器的位元格式及功能如表 5-3 所示。EA 元控制所有的 中斷致能/禁能,當 EA=0,則禁止所有中斷 MCS-51/52 不接受中斷處理。

當 EA=1,MCS-51/52 可以接受中斷處理。各中斷源由相對中斷控制元決 定中斷能力,例如當 ET0=0 時,雖然計時/計數器 0 溢位 TF0=1,也無法 執行計時/計數器 0 中斷處理,若 ET0=1,當 TF0=1 會執行計時/計數器 0 中斷處理,各位元被清除為 0,因此要執行中斷功能時必須由軟體加 以設定。

表 5-3 IE 暫存器位元功能表

IE:中斷致能暫存器(Interrupt Enable Register) 位址:A8H(可位元定址)

中斷優先權暫存器(IP;INTERRUPT PRIORITY REGISTER)

中斷優先權暫存器的位元格式及功能表如表 5-4 所示,預設的中斷

IP:中斷優先權暫存器(Interrupt Enable Register) 位址:B8H(可位元定址)

表 5-5 中斷優先順序表

中斷源 優先順序 IE0 1(最高優先)

TF0 2 IE1 3 TF1 4 RI 或 TI 5 TF2 或 EXF2 6(最低優先)

MCS-51/52 中斷控制系統如下圖所示。

圖 5-10 MCS-51/52 中斷控制架構

各中斷源使用說明如下:

1.外部中斷

週邊介面 IC(如 8279、8255)的中斷請求信號,由INT0_______(P3.2)或INT1_______

(P3.3)進入 MCS51/52,外部中斷INT0_______、INT1_______的中斷觸發型態由 TCON 的 IT0、IT1 位元規劃成準位觸發或負緣觸發。

若 IT0(IT1)=1 為負緣觸發,當INT0_______ (INT1_______)接腳信號由 Hi 降成 Low(負緣)時,硬體自動將 TCON 的 IE0(IE1)位元設定為 1(具閂鎖作 用),一直等到 CPU 跳到中斷向量位址 0003H(0013H)執行中斷副程式後 硬體自動將 IE0(IE1)清除為 0。由於硬體架構原故,外部中斷請求信號 在負緣之前的高電位信號要維持一個機械週期,負緣之後的低電位信號 最少要維持一個機械週期(震盪頻率為 12MHz 時,一個機械週期為 1μS)

若 IT0(IT1)=0 時,為低電位觸發,INT0_______ (INT1_______)接腳的電位信號必 須維持低電位直到 CPU 執行中斷為止,若 CPU 執行中斷之前,接腳信號

ORG 0BH ;假指令,表示以下指令從000BH放起 JMP Address Of ISR ;跳到中斷服務程式位址

……

MOV TMOD,#00000001b ;將計時器0設定為16位元計時模式 MOV IE,#10000010b ;致能計時器0中斷

MOV TH0,#>(2**16-50000) ;這兩行設定計時50ms

MOV TL0,#<(2**16-50000) ;在50ms之後溢位,TF0變為1

……

MOV TCON,#00010000b ;啟動計時器0

;啟動計時器0也可用以下指令 SETB TR0

計時器中斷最長的中斷間隔為65536μs,也就是約65ms,因此我們 將每次中斷的間隔時間設為50ms,並設一計數器COUNTER,每次的中斷 發生時都在中斷服務程式中將COUNTER值加一。等到COUNTER的值為20 時,便將方塊下移,並將COUNTER設為0。

下頁圖5-11為本次專題中斷程式的流程圖。

圖 5-11 中斷程式流程圖

在文檔中 使用8051製作俄羅斯方塊 (頁 46-61)

相關文件