在微機系統中產生定時信號的方法有 軟件定時 和 硬件定時
軟件定時就是寫延遲函數循環,優點:編程簡單,缺點:一直占用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就是沒有操作
看RD和WR,當RD為1,WR為0,寫信號選通,開始向計數器設置初值
當RD為0,WR為1,讀信號選通,開始讀計數器計數值
下面是計數器的結構
可以看到
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的編程
- 寫入控制字
因為8253沒有復位,只能先寫控制字初始化
8253中,D7D6為11為非法,8254中為讀回命令
D5D6為讀寫格式,
如果寫入的初值為0-255,選01
寫入初值大於255,但低位全為0,選10
如果大於255,低位不為0,選11
如果想讀出,選00,直接進行鎖存
D0選擇計數初值的格式,1為十進制,0為二進制
- 寫入初值
注意的問題
- 要先寫控制字
- 寫入的格式要和控制字一致
- 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返回一個狀態字
讀回命令寫入控制端口,而狀態字和計數值都通過相應的計數器端口讀出