• 实验5 8254定时/计数器应用实验【微机原理】【实验】


    前言

    以下内容源自微机原理实验指导书
    仅供学习交流使用
    请您阅读文章声明,默认同意该声明

    推荐

    8254定时/计数器应用实验

    3.1 8254定时/计数器应用实验

    3.1.1实验目的

    1、掌报8254的工作方式及应用编程;
    2、掌据8254的典型应用电路接法;
    3、学习8254在PC系统中的典型应用方法。

    3.1.2实验内容

    1、通讨定验简担很的单次脉冲单元,按动微动开关向计数器依次发出单脉冲,观察每来一个脉冲时计新当前计数值的变化情况。
    2、定时应用定验。编写程序,应用8254的定时功能,产生一个1s的方波,并用本装置的示波器功能观察。

    3.1.3实验原理

    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是输出波形的频率。
    图3-1-1是8254的内部结构框图和引脚图,它是由与CPU的接口、内部控制电路和三个计数器组成。8255的工作方式如下述:
    (1)方式0:计数到0结束输出正跃变信号方式
    (2)方式1:硬件可重触发单稳方式。
    (3)方式2:频率发生器方式,
    (4)方式3:方波发生器
    (5)方式4:软件触发选通方式
    (6)方式5:硬件触发选通方式。

    请添加图片描述

    图3-1-18254的内部接口和引脚

    8254的控制字有两个:一个用来设置计数器的工作方式,称为方式控制字;另一个用来设置读回命令,称为读回控制字。这两个控制字共用一个地址,由标识位来区分。方式控制字格式如表3-1-1所示。读回控制字格式如表3-1-2所示。当读回控制字的D4位为0时,由该读回控制字D1-D2位指定的计数器的状态寄存器内容将锁存到状态寄存器中。状态字格式如表3-1-3所示。

    在这里插入图片描述
    8254实验电路原理图如下图所示。

    在这里插入图片描述

    3.1.4实验说明及步骤

    1、计数应用实验
    图3-1-2为参考连线图。OUT0可以连接到一个LED,以观察其输出的高低电平值。将计数器0设置为方式0,计数初值N可自行决定,按动单次脉冲单形(位于实验台底都中间)的微动开关产生单次脉冲送CLK。编写程序在屏幕上显示计数器0的当前计数值。
    实验步骤如下所述:
    (1)按实验内容编写程序,实现8254对KK1+按键次数的响应

    -------------理论知识------------
    1、确认端口地址

    IO基地址0600H
    XR1---A0
    XR2---A1
    地址范围600H~603H
    0#计数器端口地址:0600H
    1#计数器端口地址:0602H
    2#计数器端口地址:0604H
    控制寄存器端口地址:0606H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、确定工作方式与计数初值

    计数器0工作于方式0,计数结束产生中断方式
    读
    写
    
    
    • 1
    • 2
    • 3
    • 4

    3、确定控制字

    写
    00 11 000 0
    读
    00 00 000 0
    
    • 1
    • 2
    • 3
    • 4

    4、初始化程序

    A EQU 0600H
    B EQU 0602H
    C EQU 0604H
    S EQU 0606H
    ;N=9;计数初值
    CODE SEGMENT
    	ASSUME CS:CODE
    START:
    ;初始化计数器0程序
    	MOV  AL,00110000B
    	MOV DX,S
    	OUT  DX,AL             ;送控制字
    	MOV DX,A					
    	MOV  AL,09H						;9 =0000 1001
    	OUT  DX,AL             ;送低8位			
    	MOV  AL,00H						;9 =0000 0000
    	OUT  DX,AL             ;送高8位
    ;读取计数器0当前的计数值到CX中
    	MOV  AL,00000000B
    	MOV DX,S
    	OUT  DX,AL             ;送控制字
    	MOV DX,A				
    	IN  AL,DX             ;读低8位			
    	MOV  CL,AL							
    	IN  AL,DX             ;送高8位
    	MOV CH,AL
    CODE ENDS
    	END START
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    -------------理论知识------------

    -------------具体实践------------

    8254定时/计数器应用实验

    
    ;IOY0           EQU   0A000H        ;片选IOY0对应的端口始地址
    IOY0           EQU   0600H        ;片选IOY0对应的端口始地址
    
    • 1
    • 2
    • 3
    ;T8254-1.asm
     
    ;查看端口资源分配情况,记录实验系统I/O端口始地址
     
    INTR_IVADD     EQU   003CH        ;INTR对应的中断矢量地址
     
    IOY0           EQU   0600H        ;片选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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105

    -------------具体实践------------

    (2)设计实验线路图,完成线路连接。
    (3)打开实验箱电板,运行程序,按动KK1+微动开关,观察开关按动后屏幕显示的计数值和LED灯的变化

    在这里插入图片描述

    2、定时应用实验
    将8254的计数器0和计数器1都设置为方式3,用信号源1MHz作为CLKO时钟,OUTO为被形输出 1ms方波,再通过CLK1输入,OUT1输出1s方波。
    在这里插入图片描述
    实验步骤:

    (1)接线图如图3-1-3所示,
    (2)根据实验内容,编写实验程序,经编译、链接无提后装入系统
    -------------理论知识------------
    1、确认端口地址

    IO基地址0600H
    XR1---A0
    XR2---A1
    地址范围600H~603H
    0#计数器端口地址:6C0H
    1#计数器端口地址:6C2H
    2#计数器端口地址:6C4H
    控制寄存器端口地址:6C6H
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、确定工作方式与计数初值

    计数器0工作于方式3,方波发生器
    计数初值=输入频率/输出频率
       1000=1M /1000   
    
            
    计数器1设置为方式3,方波发生器
    计数初值=输入频率/输出频率
    	1   =1000    /1000   
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3、确定控制字

    00 11 011 0
    01 11 011 0
    
    • 1
    • 2

    4、初始化程序

    A EQU 06C0H
    B EQU 06C2H
    C EQU 06C4H
    S EQU 06C6H
    CODE SEGMENT
    	ASSUME CS:CODE
    START:
    ;初始化计数器0
    	MOV  AL,00110110B
    	MOV DX,S
    	OUT  DX,AL             ;送控制字
    	MOV DX,A
    	MOV  AL,03E8H						;1000 =0000 03e8
    	OUT  DX,AL             ;送低8位			
    	MOV  AL,0H							;1000 =0000 0000
    	OUT  DX,AL             ;送高8位
    ;初始化计数器1
    	MOV  AL,01110110B
    	MOV DX,S
    	OUT  DX,AL             ;送控制字
    	MOV DX,B
    	MOV  AL,03E8H						;1000 =0000 03e8
    	OUT  DX,AL             ;送低8位			
    	MOV  AL,0H							;1000 =0000 0000
    	OUT  DX,AL             ;送高8位
    CODE ENDS
    	END START
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    -------------理论知识------------

    -------------具体实践------------

    8254定时/计数器应用实验

    ;IOY0           EQU   0A000H        ;片选IOY0对应的端口始地址
    IOY0           EQU   0600H        ;片选IOY0对应的端口始地址
    
    • 1
    • 2
    ;T8254-2.asm
    ;8254定时应用实验  输出1Hz
     
    ;查看端口资源分配情况,记录实验系统I/O端口始地址
     
    ;****************根据查看端口资源修改下列符号值*******************
    IOY0           EQU   0600H         ;片选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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

    -------------具体实践------------

    (3)单击【RUN】按钮,运行实验程序,8254的OUTI会输出1的方波,可用软件自带的示被器功能进行观察。
    (4)用示波器观察波形的方法:单击虚拟仪器菜单中的【示波器】按钮或直接单击工具栏的按【】钮,在新弹出的示波器界而上单击【】按钮运行示波器,就可以观测出OUT1输出的波形。
    本实验现象结果如图3-1-4所示,
    在这里插入图片描述

    3.1.5实验提示

    1.实验箱上我们的I/0基地址为0600H,CS接IOY0信号线。
    2.在实验1计数应用实验中,初值不易过大(<10)。
    3.将OUT0接LED灯,可观察计数运行情况。LED灯低电平有效,所以计数应用实验计数期间灯灭,计数结束灯亮。

    最后

    请您阅读文章声明,默认同意该声明
    打赏通道
    请添加图片描述

  • 相关阅读:
    密钥密码学(三)
    子比主题v7.4绕授权接口源码
    锂热电池检测设备 你一定没见过这种检测方式!
    C++STL——string类
    1.2继承性
    Serverless之Knative部署应用实例;
    Selenium启动chrome,页面显示与隐藏事件
    “300万”只是新起点,比亚迪将开启下一个 “黄金周期”
    淘宝/天猫获取卖出的商品订单列表 API
    2022年10月29日 20点 程序爱生活 纳指和恒指可能会小破前高,然后有概率继续破新低,但是破完就需要考虑一次较大级别反弹的概率了! 第一次不再完全看空!
  • 原文地址:https://blog.csdn.net/qq_51625007/article/details/125399911