8254定時/計數器應用實驗
阿新 • • 發佈:2019-01-05
- 實驗目的:
1.掌握8254的工作方式及應用程式設計。
2.掌握8254典型應用電路的接法。
二、實驗環境:
PC機一臺,TD-PITD實驗裝置一套,示波器一臺。
三、實驗內容:
- 計數應用實驗。編寫程式,應用8254的計數功能,使用單次脈衝模擬計數,使每當按動‘KK1+’5次後,產生一次計數中斷,並在螢幕上顯示一個字元‘5’。
2.定時應用實驗。程式設計程式,應用8254的定時功能,產生一個1Hz的方波。
實驗步驟
1. 計數應用實驗
編寫程式,將 8254 的計數器 0 設定為方式 3,計數值為十進位制數 4,用單次脈衝 KK1+作為 CLK0 時鐘,OUT0 連線 INTR,每當 KK1+按動 5 次後產生中斷請求,在螢幕上顯示字元“5”。實驗步驟如下:
- 實驗接線圖如圖 3-3-3 所示,按圖連線實驗線路圖。
- 根據實驗內容,編寫實驗程式,編譯、連結
;T8254-1.asm ;檢視埠資源分配情況,記錄實驗系統I/O埠始地址 INTR_IVADD EQU 003CH ;INTR對應的中斷向量地址 IOY0 EQU 0A000H ;片選IOY0對應的埠始地址 MY8254_COUNT0 EQU IOY0+00H*2 ;8254計數器0埠地址 MY8254_COUNT1 EQU IOY0+01H*2 ;8254計數器1埠地址 MY8254_COUNT2 EQU IOY0+02H*2 ;8254計數器2埠地址 MY8254_MODE EQU IOY0+03H*2 ;8254控制暫存器埠地址 STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS DATA SEGMENT CS_BAK DW ? ;儲存INTR原中斷處理程式入口段地址的變數 IP_BAK DW ? ;儲存INTR原中斷處理程式入口偏移地址的變數 IM_BAK DB ? ;儲存INTR原中斷遮蔽字的變數 STR1 DB 'COUNT: $' ;顯示的字串 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX CLI MOV AX,0000H ;替換INTR的中斷向量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,ES:[DI] MOV IP_BAK,AX ;儲存INTR原中斷處理程式入口偏移地址 MOV AX,OFFSET MYISR MOV ES:[DI],AX ;設定當前中斷處理程式入口偏移地址 ADD DI,2 MOV AX,ES:[DI] MOV CS_BAK,AX ;儲存INTR原中斷處理程式入口段地址 MOV AX,SEG MYISR MOV ES:[DI],AX ;設定當前中斷處理程式入口段地址 IN AL,21H MOV IM_BAK,AL ;儲存INTR原中斷遮蔽字 AND AL,7FH OUT 21H,AL STI MOV DX,OFFSET STR1 ;顯示字串 MOV AH,9 INT 21H MOV DX,MY8254_MODE ;初始化8254工作方式 MOV AL,10H ;計數器0,方式0 OUT DX,AL MOV DX,MY8254_COUNT0 ;裝入計數初值 MOV AL,4 OUT DX,AL WAIT1: MOV AH,1 ;判斷是否有按鍵按下 INT 16H JZ WAIT1 ;無按鍵則跳回繼續等待,有則退出 QUIT: CLI MOV AX,0000H ;恢復INTR原中斷向量 MOV ES,AX MOV DI,INTR_IVADD MOV AX,IP_BAK ;恢復INTR原中斷處理程式入口偏移地址 MOV ES:[DI],AX ADD DI,2 MOV AX,CS_BAK ;恢復INTR原中斷處理程式入口段地址 MOV ES:[DI],AX MOV AL,IM_BAK ;恢復INTR原中斷遮蔽暫存器的遮蔽字 OUT 21H,AL STI MOV AX,4C00H ;返回到DOS INT 21H MYISR PROC NEAR ;中斷處理程式MYISR PUSH AX MOV AL,35H MOV AH,0EH INT 10H MOV AL,20H INT 10H MOV DX,MY8254_COUNT0 ;重灌計數初值 MOV AL,4 OUT DX,AL OVER: MOV AL,20H ;向PC機內部8259傳送中斷結束命令 OUT 20H,AL POP AX IRET MYISR ENDP CODE ENDS END START
執行程式,按動 KK1+產生單次脈衝,觀察實驗現象。
改變計數值,驗證 8254 的計數功能。
計數應用實驗接線圖
2. 定時應用實驗
編寫程式,將8254的計數器2設定為方式3,用訊號源1.8432MHz作為CLK1 時鐘,計數初值為 100,相對於 CLK1 進行 100 分頻。在 OUT1 輸出頻率為 18.432MHz 的時鐘。將 OUT1 連線到計數器 0 的 CLK0,設定計數器 0 工作在方
式 3,計數初值為 18432,相當是進行 18432 分頻。則在 OUT0 得到 1Hz 的輸出。
- 實驗接線圖如圖 3-3-4 所示,按圖連線實驗線路圖。
根據實驗內容,編寫實驗程式,編譯、連結。
;T8254-2.asm
;8254定時應用實驗 輸出1Hz
;檢視埠資源分配情況,記錄實驗系統I/O埠始地址
;****************根據檢視埠資源修改下列符號值*******************
IOY0 EQU 0A000H ;片選IOY0對應的埠始地址
;*****************************************************************
MY8254_COUNT0 EQU IOY0+00H*2 ;8254計數器0埠地址
MY8254_COUNT1 EQU IOY0+01H*2 ;8254計數器1埠地址
MY8254_COUNT2 EQU IOY0+02H*2 ;8254計數器2埠地址
MY8254_MODE EQU IOY0+03H*2 ;8254控制暫存器埠地址
STACK1 SEGMENT STACK
DW 256 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,MY8254_MODE ;初始化8254工作方式
MOV AL,76H ;計數器1,方式3
OUT DX,AL
MOV DX,MY8254_COUNT1 ;裝入計數初值
MOV AL,64H ;100分頻
OUT DX,AL
MOV AL,00H
OUT DX,AL
MOV DX,MY8254_MODE ;初始化8254工作方式
MOV AL,36H ;計數器0,方式3
OUT DX,AL
MOV DX,MY8254_COUNT0 ;裝入計數初值
MOV AL,00H ;18432分頻
OUT DX,AL
MOV AL,48H
OUT DX,AL
QUIT: MOV AX,4C00H ;結束程式退出
INT 21H
CODE ENDS
END START
- 執行實驗程式,8254 的 OUT1 會輸出 1s 的方波,用示波器觀察 OUT0 輸出的波形。
定時應用實驗接線圖