第四節(jié) 可編程定時(shí)和計(jì)數(shù)器
在控制系統(tǒng)中,經(jīng)常需要有一些實(shí)時(shí)鐘以實(shí)現(xiàn)實(shí)時(shí)或延時(shí)控制,如定時(shí)啟動(dòng),定時(shí)檢測(cè),定時(shí)通信等,計(jì)數(shù)器 對(duì)外部事件計(jì)數(shù).實(shí)現(xiàn)這些要求經(jīng)常有三種方法:
(1)設(shè)計(jì)數(shù)字邏輯電路,用硬件實(shí)現(xiàn)定時(shí)或計(jì)數(shù)功能,如用NE555芯片實(shí)現(xiàn)定時(shí),用74LS163電路實(shí)現(xiàn)計(jì)數(shù)等.
(2)軟件定時(shí),讓CPU反復(fù)執(zhí)行一段程序,程序段所需時(shí)間乘以循環(huán)次數(shù)就是延時(shí)時(shí)間.這種方法通用性, 靈活性好,但占用CPU的時(shí)間,降低CPU的利用率.
(3)可編程定時(shí)器電路,可用軟件改變定時(shí)范圍,并與CPU并行工作,功能強(qiáng),使用靈活.
各種系列的微處理器芯片中都有可編程的定時(shí)計(jì)數(shù)電路,如I8253和I8254,Z80CTC,M6840等,本節(jié)主要介紹 I8253定時(shí)計(jì)數(shù)電路.
§7.4.1 概述
Intel 8253是一種具有以下三個(gè)獨(dú)立的16位計(jì)數(shù)器的可編程器件,可以用來(lái)定時(shí)和計(jì)數(shù).
1.基本功能如下:
(1)一片上有三個(gè)獨(dú)立的計(jì)數(shù)器通道.
(2)每個(gè)計(jì)數(shù)器的計(jì)數(shù)頻率范圍為0~2MHZ.
(3)每個(gè)計(jì)數(shù)器都可以按照二進(jìn)制或十進(jìn)制計(jì)數(shù).
(4)每個(gè)通道有6中工作方式,可由程序設(shè)置或改變.
(5)所有輸入輸出都與TTL兼容.
(6)除具有計(jì)數(shù)或定時(shí)功能外,還可用來(lái)作為可編程頻率發(fā)生器,二進(jìn)制分頻器,數(shù)字單穩(wěn),以及復(fù)雜的電機(jī)控制器等.
2.8253的內(nèi)部結(jié)構(gòu)如圖7-21所示.
數(shù)據(jù)總線(xiàn)緩沖器是8253與CPU數(shù)據(jù)總線(xiàn)連接的8位雙向三態(tài)緩沖,CPU用輸入輸出指令對(duì)8253進(jìn)行讀寫(xiě)的 所有信息都是通過(guò)這個(gè)緩沖器傳送的.如CPU向8253寫(xiě)控制字,寫(xiě)計(jì)數(shù)初值或從8253讀計(jì)數(shù)值等均通過(guò)總線(xiàn) 緩沖器.
讀/寫(xiě)邏輯是8253內(nèi)部操作的控制部件,它接收來(lái)自系統(tǒng)總線(xiàn)的輸入信號(hào),然后產(chǎn)生控制信號(hào).各控制信號(hào)及作用為:
CS:片選信號(hào),當(dāng)CS為低電平時(shí),8253被選中,允許CPU對(duì)8253進(jìn)行讀寫(xiě)操作.否則,數(shù)據(jù)總線(xiàn)緩沖器處在三態(tài),與系統(tǒng)總線(xiàn)脫開(kāi),不能進(jìn)行讀寫(xiě)操作.
RD和WR:讀和寫(xiě)信號(hào),RD為低電平時(shí),計(jì)數(shù)值讀入CPU,WR為低電平時(shí),CPU可向8253寫(xiě)入控制字和計(jì)數(shù)初值,這兩個(gè)信號(hào)是控制三態(tài)緩沖器傳送方向的.
A0和A1:通常接到地址總線(xiàn)的A0和A1上,用來(lái)選擇控制字寄存器和三個(gè)計(jì)數(shù)器之一.各個(gè)端口的讀寫(xiě)操作 選擇如表7-2.
| CS | RD | WR | A1 | A0 | |
| 0 | 1 | 0 | 0 | 0 | 寫(xiě)入計(jì)數(shù)器0 |
| 0 | 1 | 0 | 0 | 1 | 寫(xiě)入計(jì)數(shù)器1 |
| 0 | 1 | 0 | 1 | 0 | 寫(xiě)入計(jì)數(shù)器2 |
| 0 | 1 | 0 | 1 | 1 | 寫(xiě)入控制寄存器 |
| 0 | 0 | 1 | 0 | 0 | 讀計(jì)數(shù)器0 |
| 0 | 0 | 1 | 0 | 1 | 讀計(jì)數(shù)器1 |
| 0 | 0 | 1 | 1 | 0 | 讀計(jì)數(shù)器2 |
| 0 | 0 | 1 | 1 | 1 | 無(wú)操作 |
| 1 | * | * | * | * | 未選中三態(tài) |
| 0 | 1 | 1 | * | * | 無(wú)操作 |
控制字寄存器在8253的初始化編程時(shí),由CPU寫(xiě)入控制字,用來(lái)控制通道工作方式,計(jì)數(shù)方式等.
計(jì)數(shù)器0,1,2三個(gè)計(jì)數(shù)器/定時(shí)器通道,內(nèi)部邏輯結(jié)構(gòu)相同,每一個(gè)都是由一個(gè)16位的可預(yù)置初值的減法 計(jì)數(shù)器組成,三個(gè)通道操作完全是獨(dú)立的.每個(gè)通道都是按二進(jìn)制或十進(jìn)制計(jì)數(shù),從預(yù)置初值開(kāi)始減一計(jì)數(shù), 當(dāng)計(jì)數(shù)器減到0時(shí),從OUT輸出端輸出一個(gè)信號(hào),在計(jì)數(shù)過(guò)程中,計(jì)數(shù)器受門(mén)控信號(hào)GATE的控制,計(jì)數(shù)器的輸入 和輸出及門(mén)控信號(hào)之間的關(guān)系取決于工作方式.
3.引腳
8253是24引腳雙列直插式器件,其引腳如圖7-22所示.數(shù)據(jù)總線(xiàn)D0~D7及控制線(xiàn)RD,WR,A0,A1,CS是與 系統(tǒng)總線(xiàn)相連的.除此之外,每一個(gè)通道還有三條引線(xiàn),它們是CLK,GATE和OUT.CLK是輸入計(jì)數(shù)脈沖線(xiàn),輸入 時(shí)鐘脈沖周期要大于380ns.GATE是門(mén)控信號(hào)輸入線(xiàn),GATE為高電平時(shí)允許計(jì)數(shù)器工作.GATE為低電平時(shí),禁 止計(jì)數(shù)器工作.OUT是輸出綫線(xiàn),當(dāng)計(jì)數(shù)器減到0時(shí),OUT線(xiàn)有輸出,輸出波形決定工作方式.
§7.4.2 8253的初始化編程
使用8253必須首先進(jìn)行初始化編程,初始化編程的步驟是:先寫(xiě)入每一個(gè)計(jì)數(shù)器的控制字,然后寫(xiě)入每個(gè)計(jì)數(shù)器計(jì)數(shù)初值.控制字的格式如圖7-23所示.控制字占用8位,其各位的意義如圖7-23所示。

D7,D6是計(jì)數(shù)器選擇,決定這個(gè)控制字是哪個(gè)通道的控制字.由于三個(gè)通道是獨(dú)立工作的,所以需三個(gè)控制 字寄存器保存三個(gè)寫(xiě)入的控制字.但寫(xiě)入時(shí)的地址是相同的(A1A0=11),由控制字的D7,D6分別指定不同的通道.
D5,D4是控制數(shù)據(jù)讀寫(xiě)格式.當(dāng)CPU向計(jì)數(shù)器寫(xiě)入初值或讀出當(dāng)前值時(shí),可以只讀寫(xiě)低8位,或只讀寫(xiě)高8位, 或讀寫(xiě)16位,這些功能由D3,D4控制.
D3,D2,D1是工作方式選擇,由這三位可選擇16種不同的工作方式.
D0位用于數(shù)制選擇,當(dāng)D0=0時(shí),計(jì)數(shù)器按二進(jìn)制計(jì)數(shù),計(jì)數(shù)范圍是0000H~FFFFH.當(dāng)D0=1時(shí),計(jì)數(shù)器按二-十 進(jìn)制計(jì)數(shù),計(jì)數(shù)范圍為0000~9999.
§7.4.3 8253的工作方式
1、方式0,完成計(jì)數(shù)時(shí)中斷
在這種方式下,當(dāng)把控制字寫(xiě)入控制寄存器后,OUT輸出端變低,計(jì)數(shù)初值裝入該計(jì)數(shù)器后,OUT仍為低, 也不計(jì)數(shù).當(dāng)GATE輸入高電平時(shí),計(jì)數(shù)器開(kāi)始遞減計(jì)數(shù).并在計(jì)數(shù)過(guò)程中OUT一直為低電平,當(dāng)計(jì)數(shù)器減到0 時(shí),OUT輸出變高,其工作波形見(jiàn)圖7-24,圖中寫(xiě)入的初始值為4.方式0有如下特點(diǎn):
(1)計(jì)數(shù)器只計(jì)一遍,當(dāng)計(jì)數(shù)到0時(shí),計(jì)數(shù)器不再裝入初始值重新計(jì)數(shù),輸出保持高電平,直到CPU又寫(xiě)入 一個(gè)新計(jì)數(shù)值,OUT變低開(kāi)始新的計(jì)數(shù).
(2)計(jì)數(shù)過(guò)程中,可由GATE信號(hào)控制暫停計(jì)數(shù),即GATE=0時(shí)暫停計(jì)數(shù),GATE=1時(shí)又接著計(jì)數(shù),但GATE不 影響OUT的狀態(tài).
(3)計(jì)數(shù)過(guò)程中可重新裝入計(jì)數(shù)初值,若是按8位計(jì)數(shù),在寫(xiě)入新的計(jì)數(shù)初值后,計(jì)數(shù)器按新的計(jì)數(shù)初值 重新開(kāi)始計(jì)數(shù).如果是16位計(jì)數(shù),在寫(xiě)入第一個(gè)字節(jié)后,計(jì)數(shù)器停止計(jì)數(shù),寫(xiě)入第二個(gè)字節(jié)后,計(jì)數(shù)器按新的 計(jì)數(shù)值開(kāi)始計(jì)數(shù).
(4)8253內(nèi)部是在CPU寫(xiě)計(jì)數(shù)值時(shí)WR的上升沿寫(xiě)入時(shí)常寄存器,在WR上升沿的下一個(gè)CLK脈沖,才將計(jì)數(shù)值 從時(shí)常寄存器裝入計(jì)數(shù)器,計(jì)數(shù)器才開(kāi)始計(jì)數(shù).所以若設(shè)置初值為N,則輸出OUT是在N+1個(gè)CLK脈沖之后才變高 的.這個(gè)特點(diǎn)在方式1,方式2,方式4和方式5也是同樣的.
2、方式1,可編程單穩(wěn)
在這種方式下,CPU寫(xiě)入控制字后,OUT變?yōu)楦唠娖?CPU寫(xiě)入計(jì)數(shù)值后,計(jì)數(shù)器并不計(jì)數(shù),在GATE信號(hào)的 上升沿的下一個(gè)CLK的下降沿開(kāi)始計(jì)數(shù),OUT變?yōu)榈碗娖?直至遞減計(jì)數(shù)器全為0時(shí),OUT變?yōu)楦唠娖?輸出一個(gè) 單脈沖,若GATE信號(hào)再由低變高,可以再產(chǎn)生一個(gè)單脈沖,相當(dāng)于一個(gè)單穩(wěn),圖7-25是方式1的工作波形.方式 1的特點(diǎn)是:
(1)輸出單脈沖的寬度是計(jì)數(shù)初值N乘以輸入脈沖周期.
(2)當(dāng)計(jì)數(shù)到0后,可再次由外部觸發(fā)啟動(dòng),可再輸出一個(gè)同樣寬度的單脈沖,而不需要重新輸入一個(gè)計(jì)數(shù) 初值.
(3)計(jì)數(shù)過(guò)程中,CPU可改寫(xiě)計(jì)數(shù)值,但計(jì)數(shù)過(guò)程不受影響,計(jì)數(shù)將按原來(lái)的計(jì)數(shù)值減到0,若再次啟動(dòng),則 后寫(xiě)入計(jì)數(shù)值起作用.
3.方式2,分頻脈沖產(chǎn)生器

在這種工作方式下,8253相當(dāng)于一個(gè)分頻脈沖產(chǎn)生器,如計(jì)數(shù)值為N,則每輸入N個(gè)CLK脈沖,輸出一個(gè)脈沖,脈沖寬度等于CLK的周期.其計(jì)數(shù)過(guò)程如圖7-26所示.方式2的主要特點(diǎn)是:
(1)不要重新設(shè)置計(jì)數(shù)值,通道能連續(xù)工作,輸出固定頻率的脈沖.
(2)計(jì)數(shù)過(guò)程可由GATE信號(hào)控制,當(dāng)GATE為0時(shí),暫停計(jì)數(shù),當(dāng)GATE變?yōu)楦唠娖降南乱粋€(gè)CLK脈沖又重新計(jì)數(shù)
(3)在計(jì)數(shù)過(guò)程中,CPU可隨時(shí)改變計(jì)數(shù)值,當(dāng)計(jì)數(shù)器減到0后,又按新的計(jì)數(shù)值分頻.
4.方式3,分頻方波產(chǎn)生器
方式3輸出的是周期性方波,若計(jì)數(shù)值為N,則輸出方波的周期是N個(gè)CLK脈沖周期.所以稱(chēng)為方波產(chǎn)生器. 在這種情況下,CPU寫(xiě)入控制字后OUT變高,寫(xiě)完計(jì)數(shù)值后自動(dòng)開(kāi)始計(jì)數(shù),輸出保持為高.當(dāng)計(jì)到一半計(jì)數(shù)值時(shí) 輸出變低,直至計(jì)數(shù)到0,輸出又變高,重新開(kāi)始計(jì)數(shù),工作波形如圖7-27所示.方式3的主要特點(diǎn)是:

(1)當(dāng)計(jì)數(shù)為偶數(shù)時(shí),裝入計(jì)數(shù)值后,每一個(gè)CLK脈沖使計(jì)數(shù)器減2,計(jì)到0后,一方面使OUT狀態(tài)改變,另外 計(jì)數(shù)值又裝入計(jì)數(shù)器,這樣反復(fù)工作.若計(jì)數(shù)值為奇數(shù)第一個(gè)CLK脈沖使計(jì)數(shù)器減1,以后與偶數(shù)時(shí)的工作情形 相同.所以N值為奇數(shù)時(shí),OUT有(N+1)/2個(gè)CLK脈沖周期為高,有N/2個(gè)CLK脈沖周期為低.
(2)GATE信號(hào)可以控制計(jì)數(shù).GATE=0時(shí)停止計(jì)數(shù),GATE=1時(shí),允許計(jì)數(shù).
(3)在計(jì)數(shù)期間裝入新計(jì)數(shù)值不影響原來(lái)的計(jì)數(shù)過(guò)程.
5.方式4,軟件觸發(fā)選通
當(dāng)寫(xiě)入控制字后,OUT變高,寫(xiě)入計(jì)數(shù)值后,立即開(kāi)始計(jì)數(shù)(相當(dāng)于軟件觸發(fā)啟動(dòng)),計(jì)數(shù)器計(jì)到0時(shí),OUT變 低,經(jīng)過(guò)一個(gè)脈沖周期后,OUT又變高,計(jì)數(shù)器停止計(jì)數(shù),所以是一次性的,當(dāng)寫(xiě)入新的計(jì)數(shù)值后才開(kāi)始新的計(jì)數(shù), 工作波形見(jiàn)圖7-28.方式4的特點(diǎn)為:
(1)要求GATE一直為高電平才能軟件觸發(fā).
(2)若在計(jì)數(shù)過(guò)程中改變計(jì)數(shù)值,則按新計(jì)數(shù)值重新開(kāi)始計(jì)數(shù).
6.方式5,硬件觸發(fā)選通
在這種方式下,寫(xiě)入控制字后,OUT變高,寫(xiě)入計(jì)數(shù)值后,計(jì)數(shù)器不計(jì)數(shù),而由GATE信號(hào)上升沿觸發(fā)計(jì)數(shù).直到 0后,輸出變低,經(jīng)過(guò)一個(gè)CLK周期后,OUT又變高,并停止計(jì)數(shù),等下次GATE觸發(fā)器才能計(jì)數(shù),如圖7-29所示.

§7.4.4 8253在IBM PC/XT中的應(yīng)用
通道0用作定時(shí)器,為系統(tǒng)提供一個(gè)恒定的時(shí)間標(biāo)準(zhǔn).初始編程使通道0按方式3工作,每秒產(chǎn)生198.2次 輸出信號(hào),該信號(hào)送到8259中斷控制器的IRQ0輸入端.每55MS產(chǎn)生一次中斷請(qǐng)求,8088對(duì)其計(jì)數(shù),用來(lái)計(jì)算時(shí)間. 通道1用在動(dòng)態(tài)RAM刷新定時(shí),每隔15.12微秒產(chǎn)生一次輸出信號(hào),請(qǐng)求動(dòng)態(tài)RAM刷新.OUT1輸出產(chǎn)生DMA請(qǐng)求信號(hào) 送8237,由8237對(duì)動(dòng)態(tài)RAM刷新.通道2編程為方波產(chǎn)生器,輸出方波送到揚(yáng)聲器,用程序可改變方波頻率和延續(xù) 時(shí)間,就可改變揚(yáng)聲器的聲調(diào)和發(fā)聲時(shí)間.
圖7-30是8253在PC/XT的接線(xiàn)圖,三個(gè)計(jì)數(shù)器的輸入脈沖都是PLCK的二分頻,而PCLK是8284時(shí)鐘發(fā)生器, 頻率為2.38MHZ,所以三個(gè)計(jì)數(shù)器的輸入脈沖頻率均為1.19MHz.GATE0和GATE1都接在5V上,使通道0和1寫(xiě)入 計(jì)數(shù)值后開(kāi)始計(jì)數(shù).GATE2接在并行接口8255的PB0上,由并行接口控制其工作.

在PC/XT計(jì)算機(jī)中,8253分配地址為40~~43H,BIOS對(duì)8253進(jìn)行初始化編程,各通道工作狀態(tài)為:
通道0:地址為40H,控制字為36H,即工作方式3,二進(jìn)制計(jì)數(shù),計(jì)數(shù)初值為0.
通道1:地址為41H,控制字為54H,工作方式2,二進(jìn)制計(jì)數(shù),計(jì)數(shù)初值為12H.
通道2:地址為42H,控制字為B6H,工作方式3,二進(jìn)制計(jì)數(shù),計(jì)數(shù)初值為533H,輸出方波頻率為1KHZ.
