在微機應用系統中,經常會提出這樣的要求:一種是要求一些外部實時時鐘,以實現延時控制或定時;另一種是要求能對外部事件計數的計數器。實現上述要求可采用三種方法:
(1)設計數字邏輯電路來實現計數或定時要求,即由硬件電路實現的計數器/定時器。這種電路,若要改變計數/定時的要求,必須改變電路參數,通用性和靈活性差。
(2)編制一段程序,用軟件來實現計數器和定時的要求。這種方法通用性和靈活性都好,但要占用CPU的時間。
(3)采用可編程定時器/計數器,其定時與計數功能可由程序靈活地設定,設定后與CPU并行工作,不占用CPU的時間。
本節介紹的8253-5PIT(programmable Interval Timer)就是一種可編程定時器/計數器芯片,又稱為“可編程間隔定時器”。
一、可編程定時器/計數器的基本工作原理
圖7-16所示為可編程16位定時器/計數器的邏輯原理圖。其中,左邊的三個寄存器都是CPU可以訪問的,而計數器執行單元CPU不能直接訪問。16位計數初值寄存器CR用來存放計數初值,可通過程序來設定。計數執行單元CE是一個16位減1計數器,它的初值便是計數初值寄存器的內容,它只對CLK脈沖計數,一旦計數器被啟動后,每出現一個CLK脈沖,計數執行單元中的計數值減1,當減為零時,通過OUT輸出指示信號,表明計數執行單元已為零。顯然,當CLK是一個周期性時鐘信號時,計數器起定時功能;當CLK是一個非周期性事件計數信號時,此時呈計數器功能。計數輸出鎖存器OL通常跟隨計數執行單元的內容而變化,當接收到CPU發來的鎖存命令時,就鎖定當前的計數值而不跟隨計數執行單元變化,直到CPU從中讀取鎖存值后,才恢復到跟隨計數執行單元變化的狀態,從而避免了CPU直接讀計數執行單元時干擾計數工作的可能。GATE是控制輸入端,它有多種控制作用,如允許/禁止計數、啟動/停止計數等??刂谱旨拇嫫饔脕砜刂贫〞r器/計數器的工作方式,就是控制CLK脈沖和GATE門控信號適當配合來產生OUT端的輸出信號的形狀。所以,定時器/計數器可以歸納為以下幾種工作方式:
圖7-16 計數器邏輯原理圖
(1)門脈沖控制時鐘輸入。此時,當門脈沖GATE到來時,時鐘CLK有效,進行計數操作;當門脈沖結束時,時鐘無效,計數停止。
(2)用門脈沖重新啟動計數器。
(3)用門脈沖停止計數器工作。
(4)單次計數。此時僅要求GATE為高電平即可。
(5)循環計數。此時,每當計數執行單元為零時,輸出端OUT輸出一個信號,同時又重新裝入計數初值寄存器內容到計數執行單元,重復原來的計數過程,從而在OUT端上可輸出周期性的脈沖信號。
二、8253-5的結構和功能
8253-5為具有三個獨立的16位計數器,它可用程序設置成多種工作方式,按十進制計數或二進制計數,最高計數速率可達2.6MHz。8253-5能用于多種場合,例如作為可編程方波頻率發生器、分頻器、實時時鐘、事件計數器以及程控單脈沖發生器等。
8253-5的結構框圖及引腳排列如圖7-17所示。
圖7-17 8253-5的結構框圖和引腳排列
(a)結構框圖; (b)引腳圖
24條引腳中,D7~D0為8條雙向數據線;為寫輸入信號; 為讀輸入信號; 為片選輸入信號;A0、A1為片內寄存器地址輸入信號。上述信號線都和CPU相接。三個計數器中每一個都有三條信號線;計數輸入CLK用于輸入定時基準脈沖或計數脈沖;輸出信號OUT以相應的電平指示計數的完成,或輸出脈沖波形;選通輸入(門控輸入)GATE用于起動或禁止計數器的操作,以使計數器和計測對象同步。
每個計數器中有三個寄存器:①控制寄存器。初始化時,將控制字寄存器內容寫入該寄存器;②計數初值寄存器。初始化時寫入該計數器的初始值;③減1計數寄存器。計數初值由計數初值寄存器送入減1計數寄存器,當計數輸入端輸入一個計數脈沖時,減1計數寄存器內容減1,當減到零時,輸出端輸出相應信號表示計數結束。
8253-5的讀寫控制邏輯接受系統總線的輸入信號,當 接收到低電平時,8253-5根據 和 端的電平,控制本器件接受CPU的訪問,雙向三態的數據總線緩沖器根據指令接收或發送數據。這些數據是:編程8253工作方式的控制字;裝入各計數器的初始值;讀出各計數器的當前值。
用作寄存器選擇的地址輸入信號A1和A0決定CPU訪問的對象。8253-5內部寄存器選擇如表7-4所示。
表7-48253-5內部寄存器地址
A1A0 |
讀 |
寫 |
BIOS使用的地址 |
000 |
CNT0 |
CNT0 |
40H |
001 |
CNT1 |
CNT1 |
41H |
010 |
CNT2 |
CNT2 |
42H |
011 |
|
工作方式寄存器 |
43H |
1XX |
無效 |
工作方式寄存器(又稱控制字寄存器)是只寫寄存器,它接受寫入的控制字。8253-5內部有三個控制寄存器控制對應計數器的工作。它決定計數器的工作方式,按十進制或二進制計數,并控制CPU訪問這些計數器的方法??刂谱种械?位作控制,2位用于選擇計數器,其內容如下:
工作方式控制字:
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
SC1 |
SC0 |
RL1 |
RL0 |
M2 |
M1 |
M0 |
BCD |
各字段說明見表7-5~表7-8。
表7-5SC1,SC0——計數器選擇
SC1 |
SC0 |
計數器 |
SC1 |
SC0 |
計數器 |
0 |
0 |
CNT0 |
1 |
0 |
CNT2 |
0 |
1 |
CNT1 |
1 |
1 |
不用 |
表7-6RL1,RL0——CPU讀/寫操作
RL1 |
RL0 |
操作方式 |
0 |
0 |
計數器鎖存操作(供CPU讀) |
0 |
1 |
讀/寫計數器低8位 |
1 |
0 |
讀/寫計數器高8位 |
1 |
1 |
先讀/寫8位,再讀/寫高8位 |
表7-7M2M1M0——工作方式選擇
M2 |
M1 |
M0 |
工作方式 |
0 |
0 |
0 |
方式0 |
0 |
0 |
1 |
方式1 |
X |
1 |
0 |
方式2 |
X |
1 |
1 |
方式3 |
1 |
0 |
0 |
方式4 |
1 |
0 |
1 |
方式5 |
表7-8BCD-計數方式選擇
0 |
16位二進制計數 |
1 |
4位十進制(BCD)碼計數 |
8253-5的三個計數器是獨立的16位減1計數器。計數器的工作方式由工作方式寄存器確定。計數器在編程寫入初始值后,在某些方式下計數到0后自動預置,計數器連續工作。CPU訪問計數器時,必須先設定工作方式控制字中的RL1RL0位。
計數器對CLK計數輸入端的輸入信號進行遞減計數。選通信號GATE控制計數工作的進行,其功能如表7-9所示。
表7-9選通信號GATE的功能
|
上升邊沿 |
高電平 |
|
方式0 |
禁止計數 |
—— |
允許計數 |
方式1 |
— |
1.初始化和計數 2.下一個時鐘后輸出變為低電平 |
—— |
方式2 |
1.禁止計數 2.使輸出立即變為高電平 |
1.初始化和計數 2.計數器重新裝入 |
允許計數 |
方式3 |
1.禁止計數 2.使輸出立即變為高電平 |
1.初始化和計數 2.計數器重新裝入 |
允許計數 |
方式4 |
禁止計數 |
—— |
允許計數 |
方式5 |
—— |
初始化和計數 |
—— |
三、8253-5的工作方式
8253具有六種工作方式,在不同的方式下,計數器的啟動方式、GATE端輸入信號的作用以及OUT端的輸出波形都有所不同。
在任何一種方式下,都必須先向8253寫入控制字,控制字還起復位作用,它使OUT端變為工作方式中規定的狀態和對計數初值寄存器CR清零;然后再將計數初值寫到CR中,其最大值為0000H。
(一)方式0——計數結束中斷
當程序把控制字寫入控制寄存器時,苦工作在方式0,則該計數器的輸出OUT立即變為低電平。在計數初值寫入該計數器后,輸出仍將保持為低電平,在門控GATE信號為高電平時,計數器開始減1計數,當計數器從初始值減到全0時,便產生一高電平OUT輸出,利用此輸出信號可向CPU發出中斷請求,此高電平輸出一直保持到該計數器裝入新的工作方式或計數值為止。若在計數過程中裝入新的初始值,則會導致裝入第一字節停止現行計數,裝入第二字節后從新的初始值開始計數。
方式0的時序波形如圖7-18所示。
圖7-18 方式0波形
圖中取計數初值n-4,在GATE為高電平時,允許計數器計數;若GATE為低電平,則禁止計數器計數。
注意如下幾點:
1)按方式0計數時,計數器只計一遍,當計數到0時,計數器并不裝入初始值重新開始計數,其輸出將保持為高電平。
2)方式0的計數過程可由門控信號GATE控制其起停。在計數過程中,GATE信號的變化不影響輸出OUT的狀態。
3)計數過程中可重新裝入計數初值。如果是8位計數初值,在寫入新的計數值后,計數器將按新的計數值重新開始計數,如果是16位計數初值,在寫入第一個字節后,計數器停止計數,在寫入第二個字節后,計數器按照新的計數值開始計數。
4)8253的內部操作是在CPU寫計數值的 信號上升沿將該計數值送到與計數器對應的計數初值寄存器。在 信號上升沿之后的一個CLK脈沖,才將計數值從計數初值寄存器送到減1計數器,計數器才開始計數。如果設置計數初值為N,輸出OUT是在N+1個CLK脈沖期間變為高電平的,這個特點也適合于方式l、方式2、方式4和方式5。
(二)方式1——可編程單穩
在設定為方式1工作時,輸出OUT變為高電平。CPU執行輸出指令裝入計數初值時,OUT仍保持為高電平,在選通GATE輸入信號上升沿后的計數過程中,OUT變為低電平;直至減1計數器為全0時,OUT將變為高電平。若在計數過程中(OUT為低電平時),裝入一個新的計數值,則在下一次GATE觸發之前不影響計數器的計數,即不影響上一次的單穩脈沖的寬度。任何時刻都可以讀出計數器的值而不影響單穩脈沖的寬度。單穩是可重觸發的,因而在任何GATE輸入信號上升沿后,OUT輸出低電平信號的寬度將取決于時鐘頻率和計數初值的設定。
方式1的時序波形如圖7-19所示。
圖7-19 方式1波形
在方式1時,GATE信號實際上是單穩態線路的觸發信號,在GATE信號上升沿后的時鐘脈沖CLK的由高電平到低電平的下降沿將計數初值裝入計數器,同時使OUT變為低電平,然后開始遞減計數過程。在計數初值為N時,則OUT輸出的脈沖寬度為N個輸入脈沖的間隔時間。
(三)方式2——頻率發生器
當8253工作于方式2時,相當于一個N分頻器,N為設定的計數初值,OUT變為低電平的時間是一個輸入時鐘周期,從一個輸出脈沖到下一個輸出脈沖之間的時間等于輸入到計數寄存器中的計數初值N和時鐘周期的乘積。如果在兩個輸出脈沖之間,對計數寄存器裝入新的初始值,現行計數過程不受影響,但下一周期將反映新的計數初值。當GATE輸入端為低電平時,將迫使OUT為高電平,并禁止計數;當GATE變為高電平時,計數器裝入預置的計數值,且開始計數。這樣,GATE信號就可用作計數器的同步控制信號。
在控制字設定一個計數器為方式2工作時,OUT輸出保持為高電平,直至給計數寄存器重新裝入計數初值。這樣,OUT也能用軟件來同步。
方式2的時序波形如圖7-20所示。
圖7-20 方式2波形
(四)方式3——方波發生器
這種方式類似于方式2,不同的是OUT輸出是方波。當計數值是偶數時,在計數完成一半之前OUT保持為高電平,對另一半計數時OUT將變為低電平,然后重復上述計數操作,當計數值N是奇數時,對(N+1)/2進行計數時OUT是高電平,而對(N-1)/2進行計數時OUT則是低電平,然后重復計數,如果計數寄存器在計數期間重新裝入新值,這個新值將在計數輸出跳變以后立即反映出來。方式3波形如圖7-21所示。
圖7-21 方式3波形
(五)方式4——軟件觸發選通
設定為方式4后,OUT將是高電平。在CPU執行OUT指令時把計數值裝入計數初值寄存器,在 信號后的一個時鐘脈沖的下降沿把計數值裝入計數器,此后計數器開始計數。在計數結束時,OUT輸出一個時鐘周期的低電平信號,然后再次變為高電平。如果在計數過程中寫入一個新的計數值,則現行CLK時鐘周期不受影響,但下一個時鐘周期將新的計數值裝入計數器,然后開始計數。
當GATE信號為低電平時禁止計數;GATE為高電平時允許計數。
方式4的時序波形如圖7-22所示。
圖7-22 方式4波形
(六)方式5——硬件觸發選通
這種方式類似于方式4,不同的是GATE輸入信號的作用不同,計數過程由GATE的上升沿觸發,在GATE的上升沿后的一個時鐘脈沖的下降沿將計數值裝入計數器,然后開始計數過程。在計數結束時,OUT將輸出一個時鐘周期的低電平信號,計數器是可重觸發的。在任何GATE觸發脈沖上升沿之后,將把計數初值重新送入計數器,然后開始計數過程。
方式5的時序波形如圖7-23所示。
圖7-23 方式5波形
四、8253-5的初始化
(一)寫入方式控制字
使用任一計數器通道,首先要向該通道寫入方式控制字,以確定該通道的工作方式。注意,雖然三個通道用的控制字端口地址是相同的,但三個控制字寫入后卻存入對應通道的控制寄存器中。
(二)寫入計數初始值
某個計數器在寫入了方式控制字后,任何時候都可以按RL1RL0的規定寫入計數初始值,對某一計數器的寫入次序是必須嚴格遵守的,但是在符合次序情況下,允許在中間穿插著對別的計數器的讀寫操作。
當RL1RL0=01時,只寫入低8位,則高位自動置0;
當RL1RL0=10時,只寫入高8位,則低位自動置0;
當RL1RL0=11時,寫入16位,先寫低8位,后寫高8位。
寫入計數初始值時,還需注意的是:如果在方式控制字中的BCD位為1,即為十進制計數,在寫入指令中時必須寫成BCD數,例如計數初值為50,采用BCD計數,則指令中的50必須寫為50H。下面舉一個初始化的例子來說明上述過程。
要求計數器0工作于方式3,輸出方波的重復頻率為2KHz,計數脈沖輸入為2.5MHz,采用BCD計數,試寫出初始化程序段。
計算計數初始值
TC=2.5MHz/2KHz=1250
方式控制字為00110111=37H,即計數器0,寫16位,方式3,BCD計數。
設8253的端口地址為80H,81H,82H,83H。
則初始化程序段為
MOV AL,37H;寫入方式控制字
OUT 83H,AL
MOV AL,50H;寫入計數初始值低8位
OUT 80H,AL
MOV AL,12H;寫入計數初始值高8位
OUT 80H,AL
(三)讀計數值
在計數進行過程中,讀出當前的計數值有時是有用的。在動態讀計數值時可以有兩種辦法。
1. 以普通對計數器端口讀的方法取得當前計數值
按工作方式控制字中RL1RL0位的規定,可以讀出指定字節的計數值??紤]到計數器正在進行計數,可能會使從計數器直接讀出的數值不穩定。為此,在這種直接讀出方法使用時,可以用GATE無效或阻斷時鐘輸入等方法,使計數器暫停計數,保證CPU讀到穩定的數值。
由于8253內部邏輯安排,按RL1RL0的規定讀完全部規定字節是絕對必要的,如果規定要讀兩個字節,那么必須在讀出兩個字節后,才有可能正確地向計數器寫數。
2.鎖存計數器的當前計數值
用一個方式控制字,其中SL1SL0=01指定要讀的計數器通道號,RL1RL0=00,使這個方式控制字成為一個軟件命令,方式字的其余各位內容可以不考慮。這個命令一寫入后,就立即把當前計數值鎖存到鎖存寄存器,而計數器可以繼續工作。此后,CPU通過和上面一樣的辦法讀出計數值,即先用方式控制字規定讀取的方式,然后再讀計數值,但由于這是從鎖存寄存器中讀取的,所以是一個穩定的值。這種方法唯一的限定也是必須讀完規定的字節數。
五、8253定時器時數器應用舉例
用8253監視一個生產流水線,每通過50個工作,揚聲器響5s,頻率為2000Hz。
1. 硬件連接
8253的應用示意圖如圖7-24所示,圖中工件從光源與光敏電阻之間通過時,在晶體管的發射極上會產生一個脈沖,此脈沖作為8253-5通道0計數器的計數輸入CLK0,當通道0計數滿50后,由OUT0輸出負脈沖,經反相后作為8259A的一個中斷請求信號,在中斷服務程序中,啟動8253-5通道1計數器工作,由OUT1連續輸出2000Hz的方波,持續5s后停止輸出。
圖7-24 8253的應用示意圖
本例中,通道0計數器工作于方式2,通道1計數器工作于方式3,通道1的門控信號GATE1由8255A的PA0控制,輸出方波信號經驅動、濾波后送揚聲器。
2. 控制字設置
通道0計數器工作于方式2,采用BCD計數,因計數初值為50,采用RL1RL0=01(讀/寫計數器的低8位),則工作方式控制字為00010101。
通道1計數器工作于方式3,CLK1接2.5MHz時鐘,要求產生2000Hz的方波,則計數初值應為2.5×106/2000=1250,采用RL1RL0=11(先讀/寫低8位,后讀/寫高8位),BCD計數。則工作方式字為01110111。
3. 程序
設:通道0的地址為40H,通道1的地址為41H,控制口地址為43H,8255A的口地址為80H,則主程序為:
MOV AL,15H;通道初始化
OUT 43H,AL
MOV AL,50H;計數初值
OUT 40H,AL
STI;開中斷
LOP:HLT;等待中斷
JMP LOP
中斷服務程序為:
MOV AL,01H;通道1的GATE1置1,啟動計數
OUT 80H,AL
MOV AL,77H;通道1初始化
OUT 43H,AL
MOV AL,50H;計數初值
OUT 41H,AL
MOV AL,12H
OUT 41H,AL
CALL DL5S;延時5s
MOV AL,00H;通道1的GATE1置0,停止計數
OUT 80H,AL
IRET
本例中,通道0工作于計數狀態,通道1工作于定時狀態。
聲明:
(一)由于考試政策等各方面情況的不斷調整與變化,本網站所提供的考試信息僅供參考,請以權威部門公布的正式信息為準。
(二)本網站在文章內容來源出處標注為其他平臺的稿件均為轉載稿,免費轉載出于非商業性學習目的,版權歸原作者所有。如您對內容、版權等問題存在異議請與本站聯系,我們會及時進行處理解決。
相關推薦
2022年浙江自考心理學復習重點(七)
08-062023年10月浙江自考《英語(一)》復習筆記(27)
06-292023年10月浙江自考傳播學概論復習資料:反饋
08-292022年浙江自考市政學復習筆記第四章
09-142022年浙江《組織與管理概論》復習資料
09-222023年4月浙江自考知識產權法復習資料:馳名商標的特別保護
04-142023年4月浙江自考環境心理學復習重點三
11-182023年4月浙江自考知識產權法復習資料:專利權的期限
04-152023年浙江自考勞動就業概論復習資料:勞動概述
02-222023年4月浙江自考英美文學選讀復習筆記:Jane Austen
12-09