微機原理—可編程計數器/定時器8253概念詳解

前言

定時器可以理解爲一個特殊的中斷。計數器和定時器其實只是功能上的不同以及度量單位的不同,定時器裏面肯定是有計數的。

【1】定時處理方法

1、定時的方法:

1、軟件定時方式(不是很準確,會被其他中斷打斷計數過程)
■CPU干預
■指令執行時間作間隔
2、不可編程的硬件定時方式(就像保險絲熔斷一樣,並不是由程序控制的)
■方式固定
■硬件設定參數
3、可編程的硬件定時方式
■程序設定、程序控制
■中斷.

2、定時和計數器

區別:對不同信號的計數
定時器:對時鐘信號進行計數,所計數的脈衝具有週期性
計數器:對外部脈衝進行計數,所計數的脈衝週期性、非週期性都可能呈現。
計數和及時本質是相同的,他們都是對一個輸入脈衝進行計數,如果輸入脈衝的頻率一定,那麼記錄脈衝的個數與所需的時間是一一對應的關係。例如輸入脈衝頻率爲2Mhz,那麼計數2x10 6

也就是1秒

【2】8253計數/定時器

1、特點:

1、可編程(工作方式/計數值)
2、三個獨立的計數器通道
3、對初值進行減1計數
4、二進制/BCD計數初值
5、計數對象的最高頻率爲2MHz

2、芯片引腳以及電路:

由引腳可以看出,數據位是8位的,也就是說不能超過255;如果計數值超過255要分兩次寫。
讀寫控制電路以及三個計數器通道:

CLK(輸入時鐘)
OUT(輸出時鐘)
GATE(控制門):高電平有效,是計數器的開關
訪問8253的信號由兩組產生:
1、從十六根總線拿出兩個接A0、A1 ,進行端口尋址:00:通道0、01:通道1、10:通道2、11:控制寄存器
2、CS可以拿另外14根(部分或者全部)外加一些邏輯電路構成CS片選信號

3、連接方式:

連接方式
注意,控制寄存器是不可以讀的

4、工作原理:

控制寄存器:決定工作模式(定時還是計數)
狀態寄存器:決定工作狀態
初值寄存器:計數的初值
計數輸出寄存器:CPU從中讀當前的計數值
計數器:執行計數操作,CPU不能訪問
寄存器
圖
工作原理:對CLK信號進行減1處理
首先,CPU把控制字寫入控制寄存器,計數初始值寫入初值寄存器。
計數從初值開始,每當CLK信號出現一次,計數值減1,當計數值減到0,從OUT段輸出規定的信號。
CLK信號出現,計數器是否減1,由門控制信號GATE決定。
CLK是計數輸入信號,計數器對CLK端出現的脈衝個數進行計數:
CLK端可以輸入外部事件
CLK端可以介入固定頻率的時鐘信號,從而實現計時。
OUT信號在計數結束時發生變化:
可將OUT作爲外部設備的控制信號
可將OUT作爲向CPU申請中斷的信號
CPU可以從計數寄存器獨處當前計數值,讀前應向控制寄存器發出鎖存信號
定時/計數器初值的計算:
定時時間=時鐘脈衝週期 x 預置的計數初值
定時頻率=時鐘脈衝頻率 / 預置的計數初值

5、寄存器配置

控制寄存器

a、初始化操作(三個通道單獨初始化)

1、寫入控制字
選擇計數通道
設置工作方式
初值的訪問方式
確定初值的數制(二進制/BCD)
計數器清零、OUT初始化
2、寫入初值
例題1:設三個計數器的CR/OI端口地址爲70H、71H、72H,控制寄存器端口地址73H。計數器0,工作模式2,CR/OL僅 使用低8位,=初值爲100,計數值使用二進制
分析:
1、根據要求配置控制寄存器:0001 x100,這裏x我們認爲是0,所以配置字爲14H
2、計數值100轉爲16進制:64H

MOV AL, 14H
OUT 73H, AL
MOV AL, 64H
OUT 70H, AL

例題2:例:設三個計數器的CR/OL端口地址爲70H、71H、72H,控制寄存器端口地址73H。計數器1,工作模式1, CR/OL使用16位,
初值爲1234,計數值使用BCD

分析:
1、根據要求配置控制寄存器:0111 0011,所以配置字爲73H
2、計數值1234H,爲16位,而輸出一次只能是8位,所以,分高低位分批次輸出

MOV AL, 73H
OUT 73H, AL
MOV AX, 1234H	;此時是BCD碼的形式,所以是1234
OUT 71H, AL
MOV AL, AH
OUT 71H, AL

b、讀出命令

步驟:
1、發出鎖存命令,使當前計數值鎖存在OL中,而CE會繼續計數
2、用IN語句讀OL,獲得當前計數值
例題:設三個計數器的CR/OL端口地址爲70H、71H、72H,控制寄存器端口地址73H。讀出計數器0的當前計數值,放在BX中
分析:
1、根據要求配置控制寄存器:0000 0000,0H
2、讀出的值分爲兩次傳出,先低位後高位

MOV AL, 0H
OUT 73H, AL
IN AL, 70H	;從OL讀取低位字節
MOV BL, AL	
IN AL, 70H	;從OL讀取高位字節
MOV BH, AL 	;此時BX的內容就是計數器當前的計數值

c、GATE的作用

1

d、工作方式配置

在具體學習6種工作方式之前(第一次看是有點暈的),我先找了幾篇博客,瞭解一下大致特點以及6種方式的區別。
8253的六種工作方式
8253與8255的工作方式
硬件觸發什麼意思?:觸發與否與gate門的狀態有關。

[1]方式0 計數結束中斷

計數器寫完計數值時,開始計數(軟件觸發),相應的輸出信號OUT就開始變成低電平。當計數器減到零時,OUT立即輸出高電平。
門控信號高電平時,計數器工作;爲低電平時,計數器停止工作,計數值保持不變。
在計數器工作期間,如果重新寫入新的計數值,計數器將按新寫入的計數值重新工作。方式0

例題:向8253的A1A0= 11B的地址寫入0011 0000B,則表示計數器0設置成方式0,並且採用16位時常數,假設時常數爲1500,則計數器0的初始化程序段如下:

MOV DX,COUNTD;	寫入8253的方式控制字
MOV AL,0011 0000B
OUT DX,AL;
MOV DX,COUNTA;	計數器0置入時常數
MOV AX,1500
OUT DX,AL
XCHG AL,AH
OUT DX,AL
[2]方式1 可編程單穩脈衝

寫入計數初值後,計數器開始工作。門控信號GATE上升沿有效,纔開始工作(硬件觸發),使輸出OUT變成低電平,直到計數器減到0後,輸出才變高電平。
在計數器工作期間,當GATE又出現一個上升沿時,計數器重新裝入原計數初值並重新開始計數。
如果工作期間對計數器寫入新的計數初值,則要等到當前的計數值記滿回零且門控信號再次出現上升沿後,才按新寫入的計數初值開始工作。
方式1

例題:向8253的A1A0= 11B的地址寫入0101 0010B,則表示計數器1設置成方式1,並且採用低8位時常數,假設時常數爲15,則計數器1的初始化程序段如下:

MOV DX,COUNTD;	寫入8253的方式控制字
MOV AL,0101 0010B
OUT DX,AL;
MOV DX,COUNTA;	計數器1置入時常數
MOV AX,15
OUT DX,AL
[3]方式2 頻率發生器(分頻器)

方式2是一種具有自動裝入時間常數(計數初值N)的N分頻器。
特點:一次設置計數初值,計數器可自動重複進行減“1”操作,減“1”計數回“0”,可以輸出端輸出一負脈衝信號。
寫入計數初值後,GATE爲高開始工作,計數器爲0時,OUT輸出一個時鐘脈寬的負脈衝後自動回覆高電平;同時自動重新裝入原計數初值,反覆計數。
如果工作期間對計數器寫入新的計數初值,則要等到當前的計數值記滿回零後,才按新寫入的計數初值開始工作。
在計數器工作期間,當GATE爲低則停止計數,待GATE恢復後計數器重新裝入原計數初值並重新開始計數。
方式2

例題:向8253的A1A0= 11B的地址寫入1001 0100B,則表示計數器2設置成方式2,並且採用低8位時常數,假設時常數爲13,則計數器1的初始化程序段如下:

MOV DX,COUNTD;	寫入8253的方式控制字
MOV AL,1001 0100B
OUT DX,AL;
MOV DX,COUNTC;	計數器2置入時常數
MOV AX,13
OUT DX,AL

這樣在OUT2端就產生了CLK2的13分頻信號,若是通過邏輯電路實現起來比較麻煩

[4]方式3 方波輸出(週期性方波輸出)

方式3工作方式與方式2基本相同,也具有自動裝入時間常數(計數初值)的功能。
不同之處在於:工作在3方式,引腳OUT輸出的不是一個時鐘週期的負脈衝,而是佔空比爲1:1或近似1:1的方波。當計數值爲偶數時,輸出在前一半的計數過程中爲高電平,在後一半的計數過程中爲低電平;爲奇數時高電平比低電平寬一個時鐘脈衝。
方式3

例題:向8253的A1A0= 11B的地址寫入0011 0110B,則表示計數器0設置成方式3,並且採用16位時常數,假設時常數爲2000,則計數器0的初始化程序段如下:

MOV DX,COUNTD;	寫入方式控制字
MOV AL.0011 0110B
OUT DX,AL
MOV DX,COUNTA;	計數器置入時常數
MOV AX,2000
OUT DX,AL
XCHG AL,AH
OUT DX,AL

這樣在OUT0端就產生了CLK0的2000分頻方波信號

[5]方式4 軟件觸發選通

此方式設定後,輸出OUT就開始變爲高電平,GATE爲高時,當寫完計數值後開始計數。當計數器減到零後,OUT輸出一個寬度爲一個時鐘脈衝的負脈衝,然後恢復高電平,並一直保持高電平。
門控信號GATE爲高電平時,計數器工作,爲低電平時,計數器停止工作,恢復爲高電平後計數器又從原裝入的計數初值開始減1工作。
在計數器工作期間,如果重新寫入新的計數初值,不影響當前計數狀態,僅噹噹前計數值記完後,計數值才按寫入的計數值工作。
方式4

例題:向8253的A1A0= 11B的地址寫入0101 1000B,則表示計數器1設置成方式4,並且採用低8位時常數,假設時常數爲75,則計數器1的初始化程序段如下:

MOV DX,COUNTD;	寫入方式控制字
MOV AL.0101 1000B
OUT DX,AL
MOV DX,COUNTA;	計數器置入時常數
MOV AL,75
OUT DX,AL
[6]方式5 硬件觸發選通

方式5的工作特點是由GATE上升沿觸發計數器開始工作。
在方式5工作方式下,當寫入計數初值後,計數器並不立即開始計數,而要由門控信號的上升沿啓動計數。
在計數過程中(或者計數結束後),如果門控信號再次出現上升沿,計數器將從原裝入的計數初值重新計數。
方式5

需要注意的地方:
1、處理器寫入8253的計數初值只是寫入了預置寄存器,之後到來的第一個CLK輸入脈衝(需先由低電平變高,再由高電平變低)才將預置寄存器的初值送到減1計數器
2、方式0: 一般用作請求中斷源.
方式1:一般用作輸出固定時長的方波,比如定時器.
方式2差不多,只不過他n計數爲零的時候,他只產生一次負脈衝,可作爲一次信號,作爲分頻器使用.

特點總結

特點
特點

【3】8253計數/定時器與系統總線的接法

在已經設計好的8086系統總線的情況下,可以直接利用系統總線的信號與8253連接。

與最小系統相連

使用偶地址:
與最小系統相連
使用奇地址:
1、A0換成BHE’
2、D7~ D0換成D15~D8

與最大系統相連

使用偶地址:
最大系統
使用奇地址:
1、A0換成BHE’
2、D7~ D0換成D15~D8

與PC機相連

此時實際上和最大系統是相似的,不過由於系統中存在DMA機構,所以必須使AEN=0,此時爲非DMA操作。由於數據位只有8位,不分奇偶。
1

總結

關於這方面的應用其實就是書後習題,明天專門寫一章關於應用的筆記。


Reference:

8253的六種工作方式
8253與8255的工作方式
關於6種工作方式更加詳細的過程請參考《微機原理與接口技術.樓順天版》P253——P263。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章