第11章可編程定時器計數器_第1頁
第11章可編程定時器計數器_第2頁
第11章可編程定時器計數器_第3頁
第11章可編程定時器計數器_第4頁
第11章可編程定時器計數器_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第11章可編程定時器/計數器11.1概述11.2可編程定時/計數器825311.1概述實現定時方法主要有三種:軟件定時、不可編程的硬件定時、可編程硬件定時。定時或計數的工作實質均體現為對脈沖信號的計數。如果計數的對象是標準的內部時鐘信號,由于其周期恒定,故計數值就恒定地對應于一定的時間,這一過程即為定時。如果計數的對象是與外部過程相對應的脈沖信號(周期可以不相等),則此時即為計數。11.2可編程定時/計數器825311.2.1

8253的主要性能11.2.2

8253的內部結構及外部引腳11.2.3

8253的工作方式及波形 11.2.4

8253的編程 11.2.5

8253的應用 一、8253的主要性能主要性能:1.3個16位(每個可分為兩個8位)減法計數器/通道;2.2種計數制式:二進制計數或BCD碼計數;3.最大計數值為65536;4.6種不同的方式工作。5.計數速率高達2MHZ。二、8253的外部引腳D0~D7:數據線。CS#:片選信號,低電平有效。

RD#:讀控制信號,低電平有效。WR#:寫控制信號,低電平有效。A0、A1:地址線,用于選擇3個計數器中的一個及選擇控制字寄存器。二、8253的外部引腳(續(xù))OUT0~2:計數器0#、1#、2#的輸出端。GATE0~2:計數器0#、1#、2#的門控制脈沖輸入端,由外部設備送入門控脈沖。CLK0~2:計數器0#、1#、2#的時鐘輸入端。三、8253的內部結構三、8253的內部結構(續(xù))8253的內部結構:3個結構相同的16位計數器;

1個8位控制字寄存器。計數器內部結構:計數初值寄存器CR;計數執(zhí)行部件CE;輸出鎖存器OL;都是16位寄存器,也可作8位寄存器使用。計數器內部結構計數器工作過程通過程序給計數初值寄存器CR送入初始值;初始值被送入計數執(zhí)行部件CE進行減1計數;輸出鎖存器OL用來鎖存CE的內容,可由CPU進行讀出操作。

8253內部的3個計數器和1個控制字寄存器,可通過地址線A0、A1,讀寫控制線RD#、WR#與片選CS#進行尋址,并實現相應的操作。8253讀寫控制邏輯表四、8253的工作方式方式0-中斷信號發(fā)生器方式1-可編程單穩(wěn)負脈沖信號發(fā)生器方式2-分頻器方式3-方波信號發(fā)生器方式4-軟件觸發(fā)的選通脈沖信號發(fā)生器方式5-硬件觸發(fā)的選通脈沖信號發(fā)生器方式0-中斷信號發(fā)生器寫控制字:設定工作方式后,OUT端變?yōu)榈碗娖?寫初值:8位/16位(分2次)初值;開始計數:計數值裝入執(zhí)行部件,每個CLK下降沿,減1計數;計數結束:減到0時,計數過程結束,OUT端變?yōu)楦唠娖?。此輸出信號可作為計數結束的中斷請求信號;GATE作為計數控制信號:計數過程中,GATE=1:允許計數;GATE=0:暫停計數;重新計數:計數過程中,可隨時寫入新的計數值;如果初值為8位,則寫完初值后,按新的初值重新開始計數;如果新的初值為16位,則寫入第一個字節(jié)時,立即中止計數,寫入第二個字節(jié)后,按新的初值重新開始計數;計數結束后,OUT端保持高電平,直至賦新的初值。方式0時序波形圖(一)方式0時序波形圖(二)寫入8253的計數初值只是寫入了CR,之后到來的第一個CLK輸入脈沖(由低電平變高,再由高變低)才將初值送到CE減1計數器。從第二個CLK信號的下降沿才真正開始減1計數。方式1-可編程單穩(wěn)負脈沖信號發(fā)生器寫控制字:設定工作方式后,OUT端變?yōu)楦唠娖剑粚懗踔担?位/16位(分2次)初值;開始計數:GATE上升沿控制計數開始。GATE上升沿的下一個時鐘周期OUT變?yōu)榈碗娖?,每個CLK下降沿,減1計數;計數結束:減到0時,計數過程結束,OUT端變?yōu)楦唠娖健4朔绞娇梢暂敵鲆粋€寬度(計數初值*Tclk)可調的單拍負脈沖,可作為設備的選通信號。重設初值:計數過程中,重新寫入初值,對當前計數過程不會產生影響;重新觸發(fā):計數過程中,GATE上升沿的下一個時鐘脈沖計數器將從初始值重新作減1計數,此時OUT端低電平保持不變,從而加寬了輸出的負脈沖寬度。重新計數:計數結束后,GATE上升沿控制新一輪計數。方式1時序波形圖(一)

方式1時序波形圖(二)

方式2-分頻器寫控制字:設定工作方式后,OUT端變?yōu)楦唠娖?;寫初值?位/16位(分2次)初值;開始計數:計數值裝入執(zhí)行部件,每個CLK下降沿減1計數;計數結束:當計數器減到1時,OUT端輸出將變?yōu)榈碗娖?;再經過一個時鐘周期,計數值減到0后,OUT又恢復為高電平。在此方式下,計數器具有自動裝入計數初值的功能,即計數器的計數過程會自動重復工作。從而產生一個n分頻(n是寫入計數器的初值)的連續(xù)的不對稱的脈沖信號,可以作為脈沖信號發(fā)生器。重設初值:計數過程中重新寫入初值不影響當前計數過程;計數過程控制:GATE=1:允許計數;GATE=0:停止計數,并強迫OUT輸出高電平;GATE上升沿:下一個時鐘周期,計數器恢復初值重新開始作減1計數。方式2時序波形圖方式3-方波信號發(fā)生器

方式3與方式2類似,不同的是輸出的波形為方波或者為近似對稱的矩形波。

當計數值n為偶數:每當計數值減到n/2時,OUT端由高電平變?yōu)榈碗娖?,并一直保持計數?,一旦計數為0時OUT端又由低變高并重新給計數器裝入初值。

當計數值n為奇數:輸出分頻波高電平寬度為(n+1)/2計數脈沖周期,低電平寬度為(n-1)/2計數脈沖周期。方式3時序波形圖(一)

方式3時序波形圖(二)

方式4-軟件觸發(fā)的選通脈沖信號發(fā)生器寫控制字:設定工作方式后,OUT端變?yōu)楦唠娖剑粚懗踔担?位/16位(分2次)初值;開始計數:計數值裝入執(zhí)行部件,每個CLK下降沿減1計數;計數結束:減到0時,輸出寬度為1個Tclk的負脈沖。該負脈沖可以作為選通信號。計數過程控制:GATE=1允許計數;GATE=0停止計數;重設初值:該方式是一次有效,即不重新寫入計數值,就只產生一個選通脈沖。如果在計數時又寫入新的計數值,則在下一個時鐘周期時將把此計數值寫入計數器執(zhí)行部件,使計數器按此新的計數值重新計數。方式4時序波形圖(一)

方式4時序波形圖(二)

方式5-硬件觸發(fā)的選通脈沖信號發(fā)生器

此方式與方式4類似,不同的是:方式4靠軟件觸發(fā),而方式5是利用引腳GATE來觸發(fā)。

GATE上升沿觸發(fā):下一時鐘周期,計數器開始作減1計數。任何時刻,當GATE觸發(fā)脈沖上升沿到來時,將把計數初值重新送入計數器,然后重新開始計數過程。五、8253的編程寫入方式控制字寫入計數值讀取計數值8253的編程—寫入方式控制字8253的編程—寫入計數值

若規(guī)定只寫低8位,則只寫1次,且寫入的為計數初值的低8位,高8位自動為0。若規(guī)定只寫高8位,則只寫1次,且寫入的為計數初值的高8位,低8位自動為0。若規(guī)定寫兩次,則先寫入的為計數初值的低8位,再寫入的為計數初值的高8位。

選擇二進制時計數值范圍:0000H~FFFFH0000H是最大值,代表65536

選擇十進制(BCD碼)計數值范圍:0000~99990000代表最大值100001、當采用8位二進制計數時:

在8253初始化編程的傳送指令“MOVAL,n”中,n可以寫成任何進制數(二進制、十進制或十六進制)的形式。2、當采用16位二進制計數時:

方法一:先把計算得到的十進制計數初值n轉換成十六進制數(即16位二進制),然后分兩次寫入8253的指定端口。方法二:先把該十進制計數初值n直接傳送給AX,然后分兩次寫入8253指定端口,即:

MOVAX,nOUTPORT,AL ;先寫低8位(PORT為端口號)

MOVAL,AHOUTPORT,AL ;后寫高8位8253的編程—寫入計數值注意事項3、當采用十進制(BCD碼)計數時:

例如n=50,則應按如下方式寫入:

MOVAL,50HOUTPORT,AL

如果n=1250,則需分兩次寫入,即:

MOVAL,50HOUTPORT,AL;先寫低8位

MOVAL,12HOUTPORT,AL;后寫高8位也可按如下方法兩次寫入:

MOVAX,1250HOUTPORT,AL;先寫低8位

MOVAL,AHOUTPORT,AL;后寫高8位將十進制計數初值n加上后綴H,以便在相應的傳送指令執(zhí)行后能夠在AL(或AX)中得到十進制數n的BCD碼表示形式。8253的編程—寫入計數值注意事項(續(xù))【例11.1】已知8253的端口地址為40H~43H,用8253的計數器0,每隔2ms輸出一個負脈沖,設CLK0為2MHz,完成軟件設計。

解:

1、計算計數初值N:

8253的編程舉例2、確定控制字:根據題意,選擇計數器0,工作方式2。(1)二進制計數,計數初值為4000(0FA0H),既寫高字節(jié),又寫低字節(jié)。控制字為:00110100B=34H(2)BCD碼計數,計數初值為4000H,低字節(jié)為0,可只寫高字節(jié)??刂谱譃椋?0100101B=25H3、確定各端口地址計數器0,計數器1,計數器2,控制端口的地址分別為40H、41H、42H和43H。

8253的編程舉例(續(xù)1)4、程序:(1)采用二進制計數: MOVAL,34H ;控制字 OUT43H,AL ;寫到控制端口

MOVAX,4000;把4000自動分離出低8位和高8位 OUT40H,AL ;先送低8位到計數器0

MOVAL,AH ;把高8位給AL

OUT40H,AL ;再送高8位到計數器0(2)采用BCD碼計數: MOVAL,25H ;控制字 OUT43H,AL ;寫到控制端口

MOVAL,40H ;只需寫高字節(jié),低字節(jié)自動為0 OUT40H,AL ;寫高8位到計數器08253的編程舉例(續(xù)2)8253的編程—讀取計數值

對8位數據線,讀取16位計數值需分兩次。計數在不斷進行,應該將當前計數值先行鎖存,然后讀取。

【例11.2】設某系統(tǒng)中8253的端口地址為0B0~0B3H,讀取計數器1當前的計數值(設計數值為16位),并存入BX寄存器的程序如下:

解: MOVAL,01000000B ;發(fā)鎖存命令 OUT0B3H,AL ;寫入控制端口 INAL,0B1H ;讀低8位 MOVBL,AL ;存入BL中 INAL,0B1H ;讀高8位 MOVBH,AL ;存入BH中六、8253的應用

在IBMPC/XT機中,8253是CPU外圍支持電路之一,為系統(tǒng)電子鐘提供時間基準,為動態(tài)RAM刷新提供定時信號以及作為揚聲器的聲源等功能。

CLK0~CLK2由8284時鐘發(fā)生器輸出的外部時鐘PCLK(2.38MHz)經過2分頻獲得,其頻率為1.19MHz。

8253的3個計數器端口地址為:40H、41H、42H;控制寄存器端口地址為43H。PC機中的8253為系統(tǒng)電子鐘提供時間基準,即向系統(tǒng)日歷時鐘提供定時中斷。其輸出端OUT0作為系統(tǒng)的中斷源接到中斷控制器8259A的中斷請求端IRQ0。選用方式3工作,以產生周期性的方波信號。為此,對計數器0編程時應設置的控制字為36H。計數器初值預置為0(即最大值65536),因此OUT0輸出方波的時鐘頻率為:1.19MHz/65536=18.21Hz。每間隔55ms產生一次0級中斷(每秒出現18.2次)。GATE0接+5V,允許計數。PC機中的8253—計數器0

為動態(tài)RAM刷新提供定時信號,即向DMA控制器定時發(fā)動態(tài)存儲器刷新請求。選用方式2工作,相當于一個分頻器??刂谱譃?4H.

計數器初始值為18。OUT1輸出的分頻脈沖頻率為:1.19MHz/18=66.1KHz。相當于周期為15.1μs。這樣,計數器1每隔15.1μs經由U21產生一個動態(tài)RAM刷新的請求信號DRQ0,以完成對動態(tài)RAM的刷新。

GATE1接+5V,允許計數。

PC機中的8253—計數器1系統(tǒng)揚聲器的聲源,其輸出信號送往揚聲器。根據OUT2端輸出信號的頻率來控制揚聲器的音調。揚聲器發(fā)聲的長短取決于OUT2信號延續(xù)時間的長短,通過門控信號GATE2控制。GATE2是在并行接口芯片8255A的PB0的。

方式3工作,控制字為B6H。

初值置533H(即1331)。OUT2輸出方波頻率為:1.19MHz/1331=894Hz。PC機中的8253—計數器28253的3個計數器的預置程序如下:PR0:MOVAL,36H ;選擇計數器0,寫雙字節(jié)計數值, ;方式3,二進制計數

OUT43H,AL ;寫控制字

MOVAL,0 ;預置計數值65536 OUT40H,AL ;先送低字節(jié)計數值

OUT40H,AL ;后送高字節(jié)計數值PR1: MOVAL,54H ;選擇計數器1,讀/寫低字節(jié)計數 ;值,方式2,二進制計數

OUT43H,AL MOVAL,12H ;預置計數器初值18 OUT41H,ALPR2: MOVAL,0B6H ;選擇計數器2,讀/寫雙字節(jié)計數 ;值,方式3,二進制計數

OUT43H,AL MOVAX,533H ;送分頻數1331 OUT42H,AL ;先送低字節(jié)

MOVAL,AH OUT42H,AL ;后送高字節(jié)【例11.3】某8086系統(tǒng)中有一片8253芯片,端口地址為500H、502H、504H、506H,各通道均接6MHz的時鐘信號,要求在計數器0輸出一個最大寬度的負脈沖,計數器1輸出一個方波信號,周期為10s,計數器2輸出一個定時中斷信號,定時時間為0.2ms,寫出其初始化程序。

8253的應用舉例1

分析:計數器0、1、2的地址分別為500H、502H、504H,控制端口的地址為506H。計數器0工作在方式1,必須采用二進制,計數器值為0(65536)。

計數器1工作在方式3,計數值為

60,只寫低字節(jié),采用二進制或BCD碼計數都可以。

計數器2工作在方式0,計數值為1200,采用二進制或BCD碼計數都可以。8253的應用舉例1(續(xù)一)計數器0:MOVDX,506HMOVAL,00110010BOUTDX,ALMOVDX,500HMOVAL,0OUTDX,ALOUTDX,AL計數器2:MOVDX,506HMOVAL,10110000BOUTDX,ALMOVDX,504HMOVAX,1200OUTDX,ALMOVAL,AHOUTDX,AL計數器1:MOVDX,506HMOVAL,01010111BOUTDX,ALMOVDX,502HMOVAL,60HOUTDX,AL8253的應用舉例1(續(xù)二)【例11.4】某8088系統(tǒng)中有一片8253芯片,端口地址為150H~153H,計數器0的輸出作為計數器1的計數脈沖,利用計數器1控制發(fā)光二極管,使發(fā)光二極管持續(xù)閃爍,亮2秒,滅2秒,利用其計數器2完成對外部事件計數,計滿200次向CPU發(fā)出中斷申請,試編寫8253的初始化程序,硬件電路如圖11.12所示。8253的應用舉例2計數器0:計數初值N=2MHz/1KHz=2000,設采用二進制計數,操作類型為11(2000=07D0H,高低字節(jié)都不為0),方波為方式3。

初始化程序如下:

MOVAL,00110110B ;通道0的控制字MOVDX,153H ;控制端口的地址OUTDX,AL ;寫控制字到控制端口MOVAX,2000;讓計數初值2000自動分離出高低字節(jié)MOVDX,150H ;通道0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論