实验6_8254定时器计数器应用实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六8253/4定时器/计数器应用实验
实验目的
(1) 掌握8254的工作方式及应用编程(参考教材)
(2) 掌握8254的典型应用电路的接法
(3) 学习8254在PC系统中的典型应用方法
实验设备 PC机一台,TD-PIT-B实验装置一套。
实验内容及说明
1)计数应用实验。2)定时应用实验。3)电子发声实验
注意:在断电情况,连接好实验线路,检查无误后,通电进行实验。实验完毕,先断电,再拆线,并将导线整理好。
1. 计数应用实验:
编写程序,将8254的计数器0设置为方式3,计数值为十进制5,用微动开关KK1-作为CLK0时钟,OUT0连接IRQ,每当KK1-按动5次后产生中断请求,在屏幕上显示字符“M”。8254计数应用参考连接线图如图6-1。
总线接口
+5V
KK1--
IRQ 图6-1 8254计数应用实验参考接线图
;; 计数应用实验
;;filename :
;; ----PCI卡分配的第3个I/O空间MY8254_COUNT0 EQU 0E440H
MY8254_COUNT1 EQU 0E441H
MY8254_COUNT2 EQU 0E442H
MY8254_MODE EQU 0E443H
;;--PCI卡分配的第1个I/O空间INTCSR_BYTE0 EQU 0DC38H INTCSR_BYTE1 EQU 0DC39H
INTCSR_BYTE2 EQU 0DC3AH
INTCSR_BYTE3 EQU 0DC3BH
IMB4_BYTE3 EQU 0DC1FH
DATA SEGMENT
CSBAK DW
IPBAK DW
MKBAK DB
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: CLI
MOV AX,DATA
MOV DS,AX
MOV DX,INTCSR_BYTE0
;; 设置pci卡
MOV AL,00H
OUT DX,AL
MOV DX,INTCSR_BYTE1
MOV AL,1FH
OUT DX,AL
MOV DX,INTCSR_BYTE2
MOV AL,3FH
OUT DX,AL
MOV DX,INTCSR_BYTE3
MOV AL,00H
OUT DX,AL
MOV AX,0000H
MOV ES,AX
;---------------------------------------------------MOV DI, 01C4H
; irq 9 , INT 71h, 01c4= 71h*4
;--------------------------------------------------- MOV AX,ES:[DI]
MOV IPBAK,AX ;IP
MOV AX,OFFSET MYINT
CLD
STOSW
MOV AX,ES:[DI] ;CS
MOV CSBAK,AX
MOV AX,SEG MYINT
STOSW
IN AL,0A1H
MOV MKBAK,AL
;---------------------------------------------------
AND AL,0fdh ; irq9
;---------------------------------------------------
OUT 0A1H,AL
STI
MOV DX,MY8254_MODE
;CLK=KK1- 定时应用实验
编写程序,将8254的计数器0设置为方式2,用信号源10kHz作为CLK0时钟,计数值为十进制0(即最大计数值10000),OUT0连接IRQ,这样每计时1s后产生中断请求,制作一个秒表显示,每计时60秒自动归零。8254定时应用实验参考连线图:
总线接口
+5V
10KHZ
(接信号源)
IRQ
图6-2 8254定时应用实验参考接线图
; 8254定时应用实验
;filename :
;; PCI卡分配的第3个I/O空间MY8254_COUNT0 EQU 0E440H MY8254_COUNT1 EQU 0E441H MY8254_COUNT2 EQU 0E442H MY8254_MODE EQU 0E443H
;; PCI卡分配的第1个I/O空间INTCSR_BYTE0 EQU 0DC38H INTCSR_BYTE1 EQU 0DC39H INTCSR_BYTE2 EQU 0DC3AH INTCSR_BYTE3 EQU 0DC3BH
IMB4_BYTE3 EQU 0DC1FH
DATA SEGMENT
CSBAK DW
IPBAK DW
MKBAK DB
SEC1 DB 30H ; 显示秒的个位SEC0 DB 31H ; 显示秒的十位DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: CLI
MOV AX,DATA
MOV DS,AX
MOV DX,INTCSR_BYTE0
MOV AL,00H
OUT DX,AL
MOV DX,INTCSR_BYTE1
MOV AL,1FH
OUT DX,AL
MOV DX,INTCSR_BYTE2
MOV AL,3FH
OUT DX,AL
MOV DX,INTCSR_BYTE3
MOV AL,00H
OUT DX,AL
MOV AX,0000H
MOV ES,AX
;---------------------------------------------------
MOV DI, 01C4H
; irq 9 , INT 71h, 01c4= 71h*4
;---------------------------------------------------
MOV AX,ES:[DI]
MOV IPBAK,AX ;IP
MOV AX,OFFSET MYINT
CLD
STOSW
MOV AX,ES:[DI] ;CS
MOV CSBAK,AX
MOV AX,SEG MYINT
STOSW
IN AL,0A1H
MOV MKBAK,AL
;---------------------------------------------------
AND AL,0fdh ; irq9
;---------------------------------------------------
OUT 0A1H,AL
MOV AX,0E30H
; 显示00回车,注意没有换行,同在一行显示
INT 10H
MOV AX,0E30H
INT 10H
MOV AX,0E0DH
INT 10H
MOV DX,MY8254_MODE
; CLK=10K
MOV AL, 35H
; 0011, 0101B 计数器0,读写低/高位方式2 ;十进制计数方式
OUT DX, AL
MOV DX,MY8254_COUNT0
; 写入计数值10000
MOV AL,0
OUT DX,AL
OUT DX,AL
STI
A1: NOP
CALL BREAK
JMP A1
MYINT: PUSH DS
PUSH AX
PUSH DX
MOV AX,DATA
MOV DS,AX
MOV DX,IMB4_BYTE3
;; 清PCI卡中断标志
IN AL,DX
MOV DX,INTCSR_BYTE2
MOV AL,3FH
OUT DX,AL
;---------------------------------------------------