8253定時/計數器總結


在微機系統中產生定時信號的方法有 軟件定時 和 硬件定時

軟件定時就是寫延遲函數循環,優點:編程簡單,缺點:一直占用CPU時間,沒有充分利用

硬件定時是有兩種不同器件

一種是不可編程器件,此方法電路簡單,通過改變電路中的阻容值

第二種就是可編程器件,如8253/8254,通過預先設定控制方式,定時時間等完成定時

 

8253按照設定的定時/計數常數進行遞減,若作為計數器,則由外部事件控制計數器遞減;若為定時器,則由內部事件控制計數器遞減。8254只是多了一個讀回命令和狀態字。

8253 內部結構

nmos 工藝,24引腳的雙直插式封裝(DIP),輸出與TTL兼容,最高計數頻率為2.6MHz

8253有3個獨立的定時/計數器,可以按二進制/十進制(BCD碼)計數,計數方式可編程。每個技術器有3個引腳和外部相連,分別是CLK,GATE和OUT

引腳圖和功能圖如下

 

 

數據總線緩沖期:它是8位3態,雙向數據緩沖器,其功能是CPU向8253的控制寄存器寫控制字;CPU向計數器012寫入計數初值,如果是16位計數初值,需要寫兩次,先低八位后高八位(8253/8254與CPU連接的數據線卻是8位的)

/寫邏輯電路:接收來自總線的5個控制信號,包括(RD)(WR),地址選擇(A1A0)和片選信號(CS

CS=1的時候,片選未選中,后續所有操作都無效

CS=0的時候,片選選中

A1A0,00為0號計數器,01為1號計數器,10為2號計數器,11就是沒有操作

RDWR,當RD1,WR0,寫信號選通,開始向計數器設置初值

RD0,WR1,讀信號選通,開始讀計數器計數值

下面是計數器的結構

 

 

可以看到

CLK是時鍾信號,輸入決定計數頻率

GATE :門控信號,輸入,控制計數器工作模式(上升沿有效/高電平有效)

OUT:計數結束信號,計數結束就會產生一個輸出信號,輸出波形隨工作模式

設置完初值,在GATE和CLK信號下,來一個CLK信號,計數器-1

8253/8254工作方式

方式0:計數結束產生中斷

方式1:可重復觸發的單穩態脈沖

方式2:分頻器

方式3:方波發生器

方式4:軟件觸發選通

方式5:硬件觸發

8253有6種工作方式,每個通道均可以通過編程選擇工作方式。

計數啟動方式:

軟件啟動:GATE端為高電平,置入計數初值后的第2個CLK脈沖的

          下降沿就開始計數

硬件啟動:GATE端要求有一個上升沿跳變,對應CLK脈沖的下降

          沿開始計數

工作方式:

方式0:計數到零產生中斷請求。軟件啟動。

方式1:硬件可重復觸發的單穩態觸發器。硬件啟動。

(3)方式2:分頻器。軟、硬件啟動。

(4)方式3:方波發生器(用得最多的方式)。軟、硬件啟動。

(5)方式4:軟件觸發選通。軟件啟動。

(6)方式5:硬件觸發選通。硬件啟動。

 

方式0:

 

 

WR發出選通信號的時候,OUT立刻為0,當CPU填入初值的時候,從下一時刻開始計數,計數到0的時候,OUT立刻為1(門控信號始終為1)

如果中間GATE信號為0,則中斷計數中斷,直到GATE信號為1的時候重新開始計數。

 

 

方式1:單穩態脈沖可重復觸發

OUT初始為低電平,當WR選通的時候,OUT為高電平。此時等待GATE的上升沿。當GATE為高電平的時候

① 若設置初值為N,則輸出為N個CLK周期寬度的負脈沖。

② 計數到零時,可再次由GATE上升沿觸發,輸出同樣寬度的負脈沖,而不必重新寫入初值,即可重復觸發如圖7.7所示。

③ 在計數過程中(輸出負脈沖期間),可由GATE上升沿再觸發,如圖7.8所示。

④ 在計數過程中,CPU可改變初值,這時計數過程不受影響,計數到0后輸出變高。當再次觸發時,計數器才開始按新的計數初值計數。即改變計數初值是下次有效的。

 

 

 

 

方式2 分頻器

① 不用重新設置計數初值,通道能連續工作。如果初值為N,則每輸入N個CLK脈沖,輸出一個負脈沖,負脈沖的寬度為1個CLK周期,重復周期為N倍的CLK周期。

② 計數過程中可由GATE信號控制,當GATE信號變低時,立即暫停現行計數;當GATE信號變高后,從計數初值開始重新計數,如圖7.9所示。

③ 如果在計數過程中,CPU重新寫入計數初值,則對於正在進行的計數無影響,而是從下一個計數操作周期開始按新的計數值改變輸出脈沖的頻率,如圖7.10。

 

 

方式3 方波產生器

 

 

① 注意初值N為偶數或奇數時,輸出信號的差別。N為偶數時,輸出對稱方波,周期為N個CLK寬度;N為奇數時,輸出有N+1/2個CLK周期的高電平和N-1/2個CLK周期的低電平。

② 在計數過程中,GATE信號變低則暫停現行計數過程,直到GATE變高,將從計數初值開始重新計數。

③ 如果要求改變輸出方波的頻率,則CPU可在任何時候重新寫入初值,並從下一個計數操作周期開始改變輸出方波頻率

 

方式4:軟件觸發選通

 

 

① 若初值為N ,則寫入初值后的N+1個CLK脈沖才輸出一個負脈沖,負脈沖的寬度為一個CLK周期,如圖7.12。

② 當GATE=1時,允許計數;GATE=0時,禁止計數。

③ 在計數過程中改變初值,則按新的初值重新計數,即改變初值是立即有效的。

 

 

方式5:硬件觸發選通

 

 

① 初值為N,則在門控GATE上升沿觸發后。經過N+1個CLK脈沖,才輸出一個CLK周期的負脈沖,如圖7.13。

② 若在計數過程中再次出現門控GATE觸發信號。則將從初值開始重新計數,但OUT輸出的高電平不受影響,如圖7.14。

③ 若在計數過程中改變初值,只要在計數到0之前不出現新的門控觸發信號,則原計數過程不受影響;等計數到0並出現新的門控觸發信號后,再按新的計數初值計數。若在寫入了新的計數初值后,在未計數到0之前有門控觸發信號出現,則立即按新的計數初值重新開始計數。

 

總結,比較

 

 

 

 

⑴ 方式2(分頻器)、方式4(軟件觸發選通)和方式5( 硬件觸發選通),它們的輸出波形相同,都是寬度為 1個CLK周期的負脈沖。區別是:方式2是自動重復工作的,而方式4需要由軟件(設置計數初值)觸發啟動,方式5需要由硬件(門控GATE信號)觸發啟動。

⑵ 方式5(硬件觸發選通)與方式1(硬件觸發單穩),觸發信號相同,但輸出波形不同:方式1輸出為寬度是N個CLK周期的負脈沖(計數過程中輸出為低) ,而方式5輸出為寬度是1個CLK周期的負脈沖(計數過程中輸出為高)。

⑶ 6種工作方式中,只有方式0,寫入控制字后輸出為低;其余5種方式,都是寫入控制字后輸出為高。

⑷ 6種工作方式中的任何一種方式,只有在寫入計數值后才能開始計數。方式0、2、3、4都是寫入計數初值后,計數過程就開始了。而方式1和方式5在寫入計數初值后,需由外部GATE信號的觸發啟動,才能開始計數過程。

⑸ 6種工作方式中,只有方式2(分頻器)和方式3(方波發生器)為自動重復工作方式,其他4種方式都是一次 性計數,要繼續工作需要重新啟動。

7.15是8253六種工作方式下的輸出波形圖。

 

 

8253/8254的編程

  1. 寫入控制字

因為8253沒有復位,只能先寫控制字初始化

 

 

8253中,D7D6為11為非法,8254中為讀回命令

D5D6為讀寫格式,

如果寫入的初值為0-255,選01

寫入初值大於255,但低位全為0,選10

如果大於255,低位不為0,選11

如果想讀出,選00,直接進行鎖存

D0選擇計數初值的格式,1為十進制,0為二進制

 

  1. 寫入初值

注意的問題

  1. 要先寫控制字
  2. 寫入的格式要和控制字一致
  3. 0為計數值的最大值

計數初值的計算有下面幾種情況:

當計數器工作在方式2或者方式3的時候,實際上是一個分頻器,因此計數常數就是分頻系數,分頻系數=ƒi/ƒo(ƒi:輸入CLK頻率;ƒo:OUT端輸出頻率)。

當計數器作為定時器工作時,CLK通常來自系統內部的時鍾,計數常數就是定時系數,定時系數=T/tCLK=T׃CLK(T為定時時間,ƒCLK為輸入的CLK頻率)。

當計數器作為外部計數使用時,計數脈沖通常來自系統外部,計數常數就是要記錄的外部事件的脈沖個數。

 

3 計數返回

8253想讀當前計數值,先發命令字鎖存,然后先讀低八位,再讀高八位

8254,可以將3個計數器的計數值和狀態都鎖存,向CPU返回命令字

8253的計數值的讀回

由CPU訪問每個通道的輸出鎖存器OL,即可實現讀出每個通道的計數值。

在上面的方式控制字格式中,我們看到,如果D5D4=00,就表示鎖存該計數器的值,用來進行讀入。

8254的計數值和狀態讀回

多了專門的讀回命令字,可以將3個計數器的計數值和狀態都進行鎖存,並且向CPU返回一個狀態字

讀回命令寫入控制端口,而狀態字和計數值都通過相應的計數器端口讀出

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM