8254定時/計數器應用實驗
實驗目的
1. 掌握8254的工作方式及應用編程。
2. 掌握8254典型應用電路的接法。
3.3.2 實驗設備
PC機一臺,TD-PITD實驗裝置一套
實驗內容
1. 計數應用實驗。編寫程序,應用8254的計數功能,使用單次脈衝模擬計數,使每當按動‘KK1+’5次後,產生一次計數中斷,並在屏幕上顯示一個字符‘5’。
實驗原理
8254是Intel公司生產的可編程間隔定時器。是8253的改進型,比8253具有更有優良性能。8254具有以下基本功能。
(1) 有3個獨立的16位計數器。
(2) 每個計數器可按二進制或十進制(BCD)計數。
(3) 每個計數器可編程工作於6種不同的工作方式。
(4) 8254每個計數器允許的最高計數頻率爲10MHz(8253爲2MHz)。
(5) 8254有讀回命令(8253沒有),除了可以讀出當前計數單元的內容外,還可以讀出寄存器的內容。
(6) 計數脈衝可以是有規律的時鐘信號,也可以是隨機信號。計數初值公式:n=fCLKi/fOUTi、其中fCLKi是輸入時鐘脈衝的頻率,fOUTi是輸出波形的頻率。
8254實驗單元電路圖如圖3-3-1所示,8254的內部結構框圖和引腳圖如圖3-3-2所示,它是由與CPU的接口、內部控制電路和三個計數器組成。8254的工作方式如下述:
(1) 方式0:計數到0結束輸出正躍變信號方式。
(2) 方式1:硬件可重觸發單穩方式。
(3) 方式2:頻率發生器方式。
(4) 方式3:方波發生器。
(5) 方式4:軟件觸發選通方式。
(6) 方式5:硬件觸發選通方式。
實驗步驟
計數應用實驗
編寫程序,將8254的計數器0設置爲方式3,計數值爲十進制數4,用單次脈衝KK1+作爲CLK0時鐘,OUT0連接INTR,每當KK1+按動5次後產生中斷請求,在屏幕上顯示字符“5”。實驗步驟如下:
(1) 實驗接線圖如圖3-3-3所示,按圖連接實驗線路圖。
(2) 根據實驗內容,編寫實驗程序,編譯、鏈接。
(3) 運行程序,按動KK1+產生單次脈衝,觀察實驗現象。
(4) 改變計數值,驗證8254的計數功能。
實驗清單
;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+1FH*2 ;8254計數器1端口地址
MY8254_COUNT2 EQU IOY0+2FH*2 ;8254計數器2端口地址
MY8254_MODE EQU IOY0+3FH*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