《微機原理與介面技術》第五章——定時器/計數器和8253A
雖然寫這個部落格主要目的是為了給我自己做一個思路記憶錄,但是如果你恰好點了進來,那麼先對你說一聲歡迎。我並不是什麼大觸,只是一個菜菜的學生,如果您發現了什麼錯誤或者您對於某些地方有更好的意見,非常歡迎您的斧正!
第1節——定時器和計數器的概念
計數/Counter:統計某物件的數量(典型的計數物件是脈衝)
定時/Timer:定時的本質是計數。當計數物件出現的“時間間隔”固定且已知,則
第2節——8253A的結構和工作原理
8253A的結構和基本特點
①有3個16位相互獨立的計數器:T0, T1, T2
②每個計數器都可以按照二進位制或二—十進位制計數
③每個計數器可設定6種不同的工作方式
④每個計數器可以預置計數初值(時間常數)
⑤計數器的當前計數值可被CPU讀出
8053A的外部引腳【24腳,+5V】
功能引腳(面向CPU的訊號線) |
功能引腳(面向I/0的訊號線) |
①資料匯流排D0~D7 三態輸出/輸入線:資料、命令和狀態 |
⑥時鐘訊號CLK 計數的物件:每輸入1個脈衝便計數1次。 CLK 0、CLK 1、CLK 2 |
②片選線(CS) 低電平有效。由地址譯碼的結果控制 |
⑦門控訊號GATE 控制計數的啟動、暫停、禁止 具體功能和工作方式有關 GATE0、GATE1、GATE2 |
③ 讀訊號(RD) 低電平有效。對8253A暫存器進行讀操作 |
⑧計數器輸出OUT 輸出特定波形標識定時或計數完畢或計數過程 OUT0、OUT1、OUT2 |
④寫訊號(WR) 低電平有效。對8253A暫存器進行寫操作 |
|
⑤地址線A1A0 接到系統地址匯流排的A1A0 A1A0用於選擇8253A內部暫存器。 |
|
●8253A內部有6個模組
①3個獨立的計數器 結構完全相同,完成計數過程 ②資料匯流排緩衝器 與CPU資料匯流排D0~D7相連 寫入命令字 寫入計數初值 讀出計數初值或當前值 ③控制命令暫存器 接收控制命令,選擇計數器及設定工作方式 ④讀寫邏輯 根據CPU讀/寫訊號和地址訊號選擇資料傳輸方向和埠 |
計數器工作原理 |
通過控制命令結合GATE,以某種特定方式對CLK脈衝進行計數並在OUT端輸出相應波形。 |
●計數初值C的確定
計數初值C決定了計數的次數或定時的長度
①單純的計數:直接設定
②作為定時用,把時間L轉成相應的計數C
假設時鐘週期為TCLK (或頻率fCLK)
C = L / TCLK = L * fCLK
例: 定時 5ms , 時鐘1.19318MHz,
則 C = L * fCLK = 5*10-3 * 1.19318 * 106 = 5965
●8253A的埠選擇和操作
埠選擇:4個埠:T0,T1,T2,控制埠
CS 片選 |
RD 讀操作 |
WD 寫操作 |
A1 地址線 |
A0 地址線 |
選中的物件 |
操作 |
0 |
1 |
0 |
0 |
0 |
T0 |
寫入“計數初值” |
0 |
1 |
0 |
0 |
1 |
T1 |
寫入“計數初值” |
0 |
1 |
0 |
1 |
0 |
T2 |
寫入“計數初值” |
0 |
1 |
0 |
1 |
1 |
控制暫存器 |
寫“工作方式控制字” |
0 |
0 |
1 |
0 |
0 |
T0 |
讀“當前計數值” |
0 |
0 |
1 |
0 |
1 |
T1 |
讀“當前計數值” |
0 |
0 |
1 |
1 |
0 |
T2 |
讀“當前計數值” |
0 |
0 |
1 |
1 |
1 |
三態 |
|
1 |
× |
× |
× |
× |
三態 |
|
0 |
1 |
1 |
× |
× |
三態 |
|
第3節——8253A的初始化和基本操作
●控制埠:工作方式控制字(選擇計數器並設定工作方式)
①選擇計數器:T0,T1或T2
②確定讀寫資料方式(8位或16位,位元組位置和順序)
③確定計數器的工作方式(方式0~5)
④確定計數的機制(二進位制碼或BCD碼)
●T0或T1或T2埠:設定計數初值
寫入計數初值:向選定的計數器寫入計數初值
工作方式控制字(CW)
①選擇計數器:T0,T1或T2
②確定讀寫資料方式(8位或16位,位元組位置和順序)
③確定計數器的工作方式(方式0~5)
④確定計數的機制(二進位制碼或BCD碼)
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
SC1 |
SC0 |
RW1 |
RW0 |
M2 |
M1 |
M0 |
BCD |
計數器選擇 |
讀寫資料方式 |
工作方式 |
碼制 |
||||
0 0 :T0 0 1 :T1 1 0 :T2 1 1 :不用 |
00:不用(鎖存) 0 1 :低8位 1 0 :高8位 1 1 :先低後高 |
0 0 0 :方式0 0 0 1 :方式1 X 1 0 :方式2 X 1 1 :方式3 1 0 0 :方式4 1 0 1 :方式5 |
0 :二進位制 1 :BCD |
●課堂作業1
工作方式控制字 晶片地址304(即304~307且控制埠307)
例: T1 ,方式0,二進位制,計數初值BYTEH:BYTEL。
MOV DX, 307H ; 命令口,把16位資料307H送到DX暫存器
MOV AL, 01110000B ;工作方式控制字,把控制字0111000B送到AL暫存器
OUT DX, AL ;把AL中的控制字寫入命令暫存器
MOV DX, 305H ; T1資料口,把305H送到DX暫存器
MOV AL, BYTEL ;計數初值低位元組
OUT DX, AL
MOV AL, BYTEH ;計數初值高位元組
OUT DX, AL
●8253A的基本操作:
①獲取當前計數值:直接讀取或鎖存命令
②獲得工作狀態:獲得狀態字
③通過向控制埠寫特定的字完成
●鎖存命令:
●課堂作業2
鎖存命令 晶片地址304(即304~307且控制埠307)
例:讀出T2當前計數值(16位),並裝入AX暫存器。
MOV DX, 307H ;命令口
MOV AL, 10000000B ;T2的鎖存命令
OUT DX, AL ;寫入命令暫存器
MOV DX, 306H ;T2資料口
IN AL, DX ;讀T2的當前計數值的低8位
MOV BL , AL
IN AL, DX ;讀T2的當前計數值的高8位
MOV AH, AL
MOV AL , BL
第4節——8253A的工作方式和應用
●工作方式:方式0~方式5
●工作方式的主要差異:
①OUT訊號或波形
②計數的啟動方式(軟體啟動、硬體啟動(GATE))
③初值(/重新)裝入的生效方式
●方式0:計數結束中斷方式
基本特點:典型的事件計數用法
①寫入工作方式控制字(CW, Control Word)
OUT開始變成高電平
②寫計數初值C到初值暫存器
下一個CLK週期把C裝入減1計數器。
GATE高電平時立即開始計數。
③計數期間OUT維持低電平。
④當減1計數器減到0時OUT變為高電平。
⑤當重新寫入C後,立即開始新一輪計數
OUT再次變成低電平
計數期間,如果重寫計數寫計數值,立即重新開始計數。
⑥GATE:高電平:允許/繼續計數 ;低電平:禁止計數
⑦OUT可作中斷請求訊號【特點:被響應後才變低】
例子:計數初值C=4
●方式1
同方式0很類似
①寫入控制字CW後,OUT變高電平。
②寫入計數初值C
③GATE上跳時,C裝入減1計數器,開始計數,OUT變低。
④整個計數過程中OUT維持低電平,直到計數結束才變高。
OUT負脈衝寬度 = 計數初值 * CLK週期。
⑤如果計數過程中GATE出現上跳,則重新計數。
⑥計數過程中如果重寫初值,則要等當前計數結束且GATE再次出現上升沿後,才能開始新的計數
●方式1的應用場合:
改變計數初值C可產生不同寬度的低電平,獲取可變寬脈衝訊號
實現脈寬調製
●方式2:週期性負脈衝輸出,分頻器
若計數初值為N,則OUT輸出的頻率為CLK的1/N。又稱N分頻器。
①寫入控制字CW,OUT變成高電平。
②寫入計數初值C。
③若GATE為高電平時,下一個CLK週期把C寫入減1計數器,並開始計數。
④計數過程中OUT保持高電平,直到倒數第2個CLK。
⑤減一計數到1時,OUT輸出1個負脈衝( 寬度為1個CLK週期)
⑥自動裝入C, OUT再次變成高電平,開始新一輪計數。
注意:
方式2中啟動動計數器的方法有兩種
軟體啟動過程:裝入計數初值
硬體啟動過程:GATE上升沿
●方式2的應用場合:
OUT正脈衝寬度 =(計數初值 - 1)x CLK週期
OUT負脈衝寬度 = 1個CLK週期。
●方式3:週期性方波輸出
①與方式2基本相同:自動裝入計數初值C,迴圈計數
②不同之處:OUT輸出佔空比為1:1或近似1:1的方波
C為偶數時,OUT的高、低電平前後各一半。
C為奇數時:
前(N+1) / 2個CLK:OUT高電平
後(N -1) / 2個CLK:OUT低電平。
●特點:
①減1計數器每次計數減2。
②OUT輸出方波訊號
③計數器有軟體啟動和有硬體啟動兩種方式。
●方式4:單次負脈衝輸出
計數過程和特點
由軟體啟動計數:寫入計數初值C觸發計數器開始工作:
①設定方式後,OUT為高電平;
②寫入C後,在下一個CLK開始計數
③計數期間OUT保持高電平
④計數結束輸出1個CLK的負脈衝,然後OUT恢復高電平。
⑤GATE作用
高電平:允許計數;
低電平:停止(不是暫停)計數
恢復高電平:重新開始新一輪的計數。
⑥重寫新的計數初值
不影響當前計數過程,直到下一輪計數時才生效
●方式5:單次負脈衝輸出
同方式4類似,單次負脈衝輸出,硬體觸發
GATE上升沿觸發計數開始
①寫入C後,不立即計數,而要由GATE上升沿啟動計數。
②計數過程中OUT維持高電平
③計數到0後,OUT輸出1個CLK的負脈衝後恢復高電平。
④在計數過程中,如GATE出現上升沿,立即開始新一輪計數
●6種工作方式的總結
●差異
①計數過程和計數結束時OUT電平的高低和持續時間(波形)
②單次計數或自動迴圈計數
③計數的啟動方式:軟體(寫計數初值)或硬體(GATE)
●方式0和方式 1
①輸出波形類似
②無自動重灌C的能力
③啟動計數的觸發訊號不一樣
方式0:軟體(寫初值)
方式1:硬體(GATE上沿)
●方式2 (N分頻器)和方式3 (方波發生器)
①計數初值自動重灌,迴圈計數
②OUT頻率:CLK的N分之一;
③方式2:計數時高電平,結束時1個CLK負脈衝
④方式3:前一半為高,後一半為低
●方式4 (單次負脈衝)和5方式(單次負脈衝)
①輸出波形相同:單次負脈衝
②無自動重灌能力
③啟動計數方式不同:方式4:軟體,方式5:硬體
●方式2 (N分頻)和方式4與5
①方式2:週期性負脈衝
②方式4與5:單次負脈衝