微机实验报告7 定时/计数器应用实验

     

班级  软件工程16-1  学号  3162052051116  姓名  张识虔  同组实验者              

实验名称             定时/计数器应用实验                     日期 2018 11 11

一、实验目的:

1. 掌握8254的工作方式及应用编程。

 2. 掌握8254典型应用电路的接法。

二、实验环境:

PC机一台,TD-PITD实验装置一套,示波器一台。

 

三、实验内容:

 

  1. 计数应用实验。编写程序,应用8254的计数功能,使用单次脉冲模拟计数, 使每当按动‘KK1+5次后,产生一次计数中断,并在屏幕上显示一个字符‘5’。

 

 2. 定时应用实验。编程程序,应用8254的定时功能,产生一个1Hz的方波。

3.3.4 实验原理

 

8254Intel公司生产的可编程间隔定时器。是8253的改进型,比8253具有更 有优良性能。8254具有以下基本功能。

1 3个独立的16位计数器。

 2 每个计数器可按二进制或十进制(BCD)计数。

3 每个计数器可编程工作于6种不同的工作方式。

4 8254每个计数器允许的最高计数频率为10MHz82532MHz)。

 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:硬件触发选通方式。

 

 

3-3-1  8254 实验电路原理图

3-3-2  8254 的内部接口和引脚

 

8254 的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字; 另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标 识位来区分。控制字格式如表 3-3-13-3-23-3-3 所示。

 

3-3-1  8254 的方式控制字格式

 

3-3-2  8254 读出控制字格式

 

3-3-3  8254 状态字格式

 

3.3.5 实验步骤

1. 计数应用实验

编写程序,将 8254 的计数器 0 设置为方式 3,计数值为十进制数 4,用单次 脉冲 KK1+作为 CLK0 时钟,OUT0 连接 INTR,每当 KK1+按动 5 次后产生中 断请求,在屏幕上显示字符“5”。实验步骤如下:

1 实验接线图如图 3-3-3 所示,按图连接实验线路图。

2 根据实验内容,编写实验程序,编译、链接。

3 运行程序,按动 KK1+产生单次脉冲,观察实验现象。

4 改变计数值,验证 8254 的计数功能。

 

3-3-3  8254 计数应用实验接线图

 

;T8254-1.asm

;查看端口资源分配情况,记录实验系统I/O端口始地址



INTR_IVADD     EQU   003CH        ;INTR对应的中断矢量地址



IOY0           EQU   0C000H        ;片选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

 

 

      

2. 定时应用实验 编写程序,将8254的计数器2设置为方式3,用信号源1.8432MHz作为CLK1 时钟,计数初值为 100,相对于 CLK1 进行 100 分频。在 OUT1 输出频率为 18.432MHz 的时钟。将 OUT1 连接到计数器 0 CLK0,设置计数器 0 工作在方 3,计数初值为 18432,相当是进行 18432 分频。则在 OUT0 得到 1Hz 的输出。

 1 实验接线图如图 3-3-4 所示,按图连接实验线路图。

2 根据实验内容,编写实验程序,编译、链接。

3 运行实验程序,8254 OUT1 会输出 1s 的方波,用示波器观察 OUT0 输出的波形。

 

3-3-4  8254 定时应用实验接线图

 

;T8254-2.asm

;8254定时应用实验  输出1Hz



;查看端口资源分配情况,记录实验系统I/O端口始地址



;****************根据查看端口资源修改下列符号值*******************

IOY0           EQU   0C000H         ;片选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

 

四、心得体会:

 

 计数应用实验  很多TD-PITD实验装置都存在问题  代码都是完全正确的  但是就是无法实现  当按动‘KK1+5次后,产生一次计数中断,并在屏幕上显示一个字符‘5    只有开关电源的时候 屏幕上才会出现很多个5   而且个数不一定 都说随机的   后来来了个女老师 解释了一下 8254 芯片的缘故 老化了  当按了5 屏幕上还不能及时出现5 这个数字 会有延迟 延迟时间也说不定 只有开关机后才可能看到

 

定时应用实验 因为实验室没有示波器  我们只能连接 开关及LED显示单元 如果D0灯能够正常闪烁  就说明实验成功  一闪一灭表示 高低电平

 

猜你喜欢

转载自blog.csdn.net/qq_41398448/article/details/84567774