第七章 8254可程式規劃計時/計數器 8254 Programmable Timers
內容大綱 8254簡介 8254可程式規劃計時/計數器 8254內部構造 、8254接腳 、8254控制字碼、 8254工作模式 、8254回讀控制 脈波寬度調變輸出控制(PWM) 直流馬達速度控制實習
內容大綱(我們在哪裡?) 8254簡介 8254可程式規劃計時/計數器 8254內部構造 、8254接腳 、8254控制字碼、 8254工作模式 、8254回讀控制 脈波寬度調變輸出控制(PWM) 直流馬達速度控制實習
8254簡介 8254乃是一顆由3個各自獨立之16位元可程式規劃計數器所組成之IC 。 各個計數器可以十進位或二進位之方式來計數,並可以軟體規劃為6種不同之工作模式 。 對需要控制即時事件之微電腦系統而言,8254乃是極有用之元件,例如時間計算(C++Builder之clock)、計數、馬達速度與轉向控制等。
內容大綱(我們在哪裡?) 8254簡介 8254可程式規劃計時/計數器 8254內部構造 、8254接腳 、8254控制字碼、 8254工作模式 、8254回讀控制 脈波寬度調變輸出控制(PWM) 直流馬達速度控制實習
8254可程式規劃計時/計數器 8254內部構造 (1) 資料匯流排緩衝區 (Data Bus Buffer) (2) 讀寫控制邏輯 (Read Write Control Logic) (3)控制字碼暫存器 (Control Word Register) (4)計數器 #0、#1 、#2 8254之內部構造示意圖(Intel)
8254可程式規劃計時/計數器(續) 8254內部構造 (1) 資料匯流排緩衝區 此8位元之緩衝區用來處理8254與CPU之資料傳輸,當CPU執行 inportb指令時,8254之資料即可由此緩衝區藉資料匯流排D7- D0 送至CPU,反之;當outportb被執行時,資料由CPU經此緩衝區送 至8254。
8254可程式規劃計時/計數器(續) 8254內部構造 (2) 讀寫控制邏輯 讀寫控制邏之功能由A1,A0,RD,WR,CS等腳位加以控制,主 要是用以操控8254之資料寫入,讀取與禁能。
8254可程式規劃計時/計數器(續) 8254內部構造 (3)控制字碼暫存器 控制字碼暫存器乃是用來儲存8254控制字碼(7-3節)之所在, 僅能由CPU寫入資料而不能被讀取 。 (4)計數器 #0、#1 、#2 ◇ 8254內含三個16位元之計數器(計數器0,1, 2) 。 ◇可由軟體設定不同之工作模式(mode0-mode5)做為計數與計時之應用 。 ◇每個計數器分別以CLK, GATE, OUT等三支接腳與外部相連, CLK與GATE為輸入接腳,OUT則是輸出接腳 。
8254可程式規劃計時/計數器(續) 8254接腳 (1) 電源接腳: Vcc:+5V GND:接地 (2) 資料匯流排: (1) 電源接腳: Vcc:+5V GND:接地 (2) 資料匯流排: D7-D0 (8位元):接至CPU之資料匯流排 (3) 晶片選擇與I/O埠選擇: CS:設定8254之致能或禁能 A0、A1:用以選擇計數器或 控制暫存器 8254接腳圖
8254可程式規劃計時/計數器(續) 8254接腳 (4) 控制線(接至CPU): RD:讀取控制 WR:寫入控制 (5) 計數器控制線 : CLK0-2: 此三支接腳分別是三個計數器之時脈信號輸入線,通常連至時脈信號產生器。 GATE0-2:此三支接腳分別是三個計數器之致能(enable)控制輸入線。 OUT0-2:此三支接腳乃是三個計數器之計數信號輸出線。 8255A接腳圖
8254可程式規劃計時/計數器(續) 8254控制字碼 8254有6種不同之工作 模式與多種不同之資 料傳輸方式,因此; 欲使用8254做計時或 技數工作前,必須將 所需之功能以控制字 碼隻方式寫入其控制 字碼暫存器中。
8254可程式規劃計時/計數器(續) 8254控制字碼 Example 7-1 電腦音樂寫入43H之控制字碼為 B6H=10110110
8254可程式規劃計時/計數器(續) 8254工作模式 8254每個計數器皆有六種工作模式可選用: 模式0:計數終了時中斷(Interrupt On Terminal Count) 模式1:可程式規劃之單擊(One Shot Programmable) 模式2:脈波產生器(Rate Generator) 模式3:方波產生器(Square-wave generator) 模式4:軟體觸發選通(software-triggered strobe) 模式5:硬體觸發選通(Hardware-triggered strobe)
8254可程式規劃計時/計數器(續) 8254工作模式 模式0:計數終了時中斷 CW:資料寫入8254之動作 CLK:輸入8254之脈波信號 GATE:致能控制信號 OUT:計數結果輸出信號 CW=10H=00010000b,代表16進位計數,模式0,僅讀∕寫低次位元,選擇計數器#0 。
8254可程式規劃計時/計數器(續) 8254工作模式 模式1:可程式規劃之單擊 CW=12H=00010010b,除模 式的選定改為1 外,其餘設 定與模式0相同。
8254可程式規劃計時/計數器(續) 8254工作模式 模式2:脈波產生器 CW=14H=00010100b,表示 模式設定為2,模式2設定完 成後 。
8254可程式規劃計時/計數器(續) 8254工作模式 模式3:方波產生器 CW=16H=00010110b模式設 定為3,模式3與模式2相似點 乃是其輸出波型之週期亦是 CLK時脈信號之N倍,且計數 工作連續反覆執行,與模式2 相異之處是模式3輸出波型 為方波。
8254可程式規劃計時/計數器(續) 8254工作模式 模式4:軟體觸發選擇 CW=18H=00011000b模式設 定為4,模式4與模式2有些許 相似處,當計數至00時(模式 2為01), OUT輸出一低電位 之脈衝信號,然而模式4僅執 行一次之計數工作.
8254可程式規劃計時/計數器(續) 8254工作模式 模式4:軟體觸發選擇 CW=18H=00011000b模式設 定為4,模式4與模式2有些許 相似處,當計數至00時(模式 2為01), OUT輸出一低電位 之脈衝信號,然而模式4僅執 行一次之計數工作.
8254可程式規劃計時/計數器(續) 8254工作模式 模式5:硬體觸發選擇 CW=1AH=00011010b,模式 設定為5,模式5可看成是模 式1與模式4之組合,計數至 01時OUT輸出一低電位之脈 衝信號。
8254可程式規劃計時/計數器(續) 8254回讀控制 1. 以外部硬體電路控制 藉由外部電路控制GATE在低位,計 數器即可暫時停止計數,CPU即可讀 取計數器之數值。 2. 寫入計數器鎖住命令 如表7-2,當D5,D4 (RW1,RW0)設定 為00時可將計數器數值鎖住,以利 CPU正確讀取,D7,D6 (SC1,SC0)兩 個位元則用來選擇計數器,D3-D0設 定為0即可。當計數器鎖住命令寫入 後,所選定計數器之數值即保持不 變,直到CPU將資料讀取後才繼續 工作。
8254可程式規劃計時/計數器(續) 8254回讀控制 Example 7-2 : 讀取#0計數器之資料 outportb(控制暫存器住址,0x00);寫入控制字碼 value=inportb(#0計數器位址) & 0x00FF;先讀低次位元 value1=inportb(#0計數器位址)<<8;再讀高次位元 value=value+value1; 補 0
8254可程式規劃計時/計數器(續) 8254回讀控制 3. 下達回讀指令
8254可程式規劃計時/計數器(續) 8254回讀控制 3. 下達回讀指令 D4=0表示欲將計數器之狀態鎖住,所得計數器之狀態包含OUT之 準位,計數值是否允許讀取,讀寫次序設定,模式設定,定位設 定等五項 。
8254可程式規劃計時/計數器(續) 8254回讀控制 Example 7-3 : 以回讀指令讀取#0計數器之計數值 outprotb (控制暫存器住址,0x00D2) ; 將回讀命令 D2H=11010010b寫入8254鎖住#0計數器的計數值 value=inportb(#0計數器住址) & 0X00FF ; 先讀低次位元 value1=inportb(#0計數器住址)<<8 ;再讀高次位元 value=value+value1
8254可程式規劃計時/計數器(續) 8254回讀控制 Example 7-4 : 讀取#2計數器之狀態 outportb(控制暫存器位址,0x00E8) ; 將回讀命令 E8H=11001000b寫入8254,鎖住#2計數器的狀態 status=inportb(#2計數器位址) ; 設status之內容為 36H=00110110b,對照圖7-11,則知#2計數器之 OUT為 低電位,計數值已寫入#2中且允許被讀 取,資料讀寫次序為先低後高(16位元),模式設 定為3,進位系統為16進位。
8254可程式規劃計時/計數器(續) 8254回讀控制 Example 7-5:同時讀取#1計數器之計數值與狀態 outportb(控制暫存器位址,0x00C4);將回讀命令C4H=11000100b寫 入8254,鎖住#1計數器之計數值與狀態 status=inport(#1計數器位址) ; 第一次讀取之資料為計數器之狀態 值 value=inport(#1計數器位址)&0x00FF ; 先讀取低次位元之計數值 value1=inport(#1計數器位址)<<8 ; 再讀高位元計數值 value=value+value1 ; 當計數器之計數值為與狀態被回讀命令同時 鎖住時,第一筆讀回之資料為狀態資料。
內容大綱(我們在哪裡?) 8254簡介 8254可程式規劃計時/計數器 8254內部構造 、8254接腳 、8254控制字碼、 8254工作模式 、8254回讀控制 脈波寬度調變輸出控制(PWM) 直流馬達速度控制實習
脈波寬度調變輸出控制(PWM) 所謂脈波寬度調變(Pulse Width Modulation,PWM)乃是指將輸出 信號之基本週期(Base Cycle)固定,藉由調整基本週期內工作週期 (Working Cycle)之大小來控制輸出功率。 PWM常取代DAC(數位類比轉換器)用於功率輸出控制,直流馬達 與交流馬達之速度控制乃是最常見的應用。
脈波寬度調變輸出控制(PWM) (續) PWM輸出控制電路 #0計數器用來產生基本週期,並於每個基本週期結束時送出一脈衝 信號至#1之GATE接腳,接著#1計數器依寫入之計數值(工作週期)執 行計數工作,#1之輸出信號即是PWM輸出信號。
脈波寬度調變輸出控制(PWM) (續) PWM輸出控制電路 則#0計數器需設定在模式2下工作(參考圖7-6)寫入之計數值為基 本週期,每次計數結束後由OUT輸出一脈衝信號,#1計數器則設定 在模式1下工作(參考圖7-5),模式1之計數工作由GATE之脈衝信 號來控制,來自OUT0之脈衝信號正好做為#1之計數控制信號。由 於模式1在計數時輸出為低電位,計數結束時則OUT變為高電位, 圖為再接上一個反向器將其輸出信號反向。
脈波寬度調變輸出控制(PWM) (續) PWM輸出控制程式設計 欲產生25%之PWM輸出信號,則可以下列程式配合圖7-13之電路來 完成。 outportb(控制暫存器位址,0x0034) ; #0設定為模式2 outportb(控制暫存器位址,0x0072) ; #1設定為模式1 outportb(#0計數器位址,0x0800) ; 將基本週期800H寫入#0 計數器 outportb(#1計數器位址,0x0200) ; 將工作週期200H寫入#1計數器
內容大綱(我們在哪裡?) 8254簡介 8254可程式規劃計時/計數器 8254內部構造 、8254接腳 、8254控制字碼、 8254工作模式 、8254回讀控制 脈波寬度調變輸出控制(PWM) 直流馬達速度控制實習
直流馬達速度控制實習 Exercise 7-1 (1)完成如圖7-15之直流馬達速 度控制硬體電路。 (2)完成如圖7-13之PWM輸出 控制電路。 (3)完成Exercise 3-8之直流馬達 速度控制程式設計。 (4)整合前三項之結果完成直流馬達 速度控制系統,使用者僅需將 PWM輸出功率百分比鍵入,馬達 即可一要求之轉速運轉。
直流馬達正反轉速度控制 Exercise 7-2 (1) 延續Exercise7-1完成如圖7-16所示之直流馬達正反轉速度控制 體電路。 式設計。 (3) 整合前二項結果完成直流馬達正反轉速度控制系統。
直流馬達正反轉速度控制