• 实验七:定时/计数器8253、8254


    已知8253的两个计数器CLK0=1MHZ,CLK1=1KHZ,现系统要求8253的OUT1产生0.1s的定时方波信号。
    (1):应如何实现?
    (2):说明两个计数器的工作方式并计算计数初值
    (3):编写初始化程序(8253的端口地址80H-83H,均采用二进制计数)

    在这里插入图片描述
    在这里插入图片描述



    CLK0(通道0)

    输入信号:1MHz
    输出信号:1KHz
    分频系数:1MHz/1KHz=1000

    工作方式:方式2(分频器方式)或方式3(方波发生器

           D7、D6通道0,所以是00

           D5、D4既写计数器低8位,又写计数器高8位,所以是11

           D3、D2、D1工作方式的选择:如果是方式2,则为010.如果是方式3,则为011。
           D0二进制计数:0。



    方式2:

    D7D6D5D4D3D2D1D0
    00110100

    方式3:

    D7D6D5D4D3D2D1D0
    00110110

    通道0的初始化:
                        1、写控制字
                        2、计数初值

    控制字:0011 0100B=34H

    MOV AL,34H
    OUT 83H,AL	;将控制字写入控制端口进行初始化
    
    MOV AX,1000	;将计数初值放入AX,然后out到80H端口
    OUT 80H,AL	;将低八位out出去
    
    MOV AL,AH
    OUT 80H,AL	;将高八位out出去
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    控制字:0011 0110B=36H

    MOV AL,36H
    OUT 83H,AL	;将控制字写入控制端口进行初始化
    
    MOV AX,1000	;将计数初值放入AX,然后out到80H端口
    OUT 80H,AL	;将低八位out出去
    
    MOV AL,AH
    OUT 80H,AL	;将高八位out出去
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9












    CLK1(通道1)
    输出信号:10Hz
    输入信号:1KHz
    分频系数:1MHz/1KHz=1000
    T=0.1s,f=10Hz
    由题可知:OUT1产生0.1s的定时方波信号所以,选择方式3(方波发生器)。



           D7、D6通道1,所以是01

           D5、D4既写计数器低8位,又写计数器高8位,所以是11

           D3、D2、D1工作方式的选择:方式3,为011。

           D0二进制计数:0。

    D7D6D5D4D3D2D1D0
    01110110

    通道1的初始化:
                        1、写控制字
                        2、计数初值

    控制字:0111 0110B=76H

    MOV AL,76H	;将控制字写入控制端口进行初始化
    OUT 83H,AL	
    
    MOV AX,100	;把它的低八位通过81端口写出去,通道1的端口地址是81H。
    OUT 81H,AL
    
    MOV AL,AH
    OUT 81H,AL	;把AH中的高8位放回到AL里边,一样的办法送到81H端口去
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8












    实验目的

    练习定时计数器8254的使用。尤其是方式2、方式3分频器的使用。
    练习分频系数比较大的处理方法。

    实验内容

    要求:使用8254产生频率为1Hz的信号,驱动发光二极管亮灭闪烁。
    已知:8254控制寄存器地址:283H
             计数器通道0地址:280H
             计数器通道1地址:281H

    分析:

    CLK0连接时钟1MHz,要使输出信号为1Hz,需要100 0000分频,而计数寄存器最多为16位的值,也就是最多65536分频,做不到106分频这么多。所以使用两个计数通道接续分频

    首先:
    通道0方式2初值可以取1000,产生1KHz的方波信号
    然后:
    将1KHz的输出接入通道1的CLK1端,再使用初值1000,产生分频后的输出就是1Hz。

    在这里插入图片描述
    硬件电路连接:

    8254的CS----------- 280H
          CLK0--------- 1MHz
          GATE0-------- +5v
          OUT0--------- CLK1
          GATE1-------- +5v
          OUT1--------- L0

    在这里插入图片描述


    在这里插入图片描述

    报告要求

    1、写出8253的几个控制字及其意义。
    在这里插入图片描述
    2、介绍8253的方式2和方式3的使用原理。通过图来表示,并加以说明。


    3、写出该实验中分频结果的计算步骤。
    分频系数:1MHz/1KHz=1000Hz,1KHz/1000Hz=1Hz。
    4、写出程序并适当加注释。

    data segment
        pkey db "press any key...$"
    ends
    
    stack segment
        dw   128  dup(0)
    ends
    
    code segment
    	ASSUME CS:code,DS:data
    start:
     CLK0:
    	MOV AL,34H		   ;将控制字34H写入283H这个控制端口
    	MOV DX,283h
    	OUT DX,AL          
    
    	MOV AX,1000		   ;将计数初值放入AX,out到280H这个端口
    	MOV DX,280H		   
    	OUT DX,AL		   ;计数初值先写低八位后写高八位
    	
    	MOV AL,AH         ;把AH中的高8位放回到AL里边
    	OUT DX,AL
    CLK1:
    	MOV AL,76H		  ;将控制字76H写入283H这个控制端口
    	MOV DX,283H
    	OUT DX,AL
    
    	MOV AX,1000		  ;将计数初值放入AX,out到281H这个端口
    	MOV DX,281H
    	OUT DX,AL		  ;计数初值先写低八位后写高八位
    	
    	MOV AL,AH		  ;把AH中的高8位放回到AL里边
    	OUT DX,AL
    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
  • 相关阅读:
    Flink Java 之 Savepoints
    文心一言 vs. GPT-4: 全面比较
    BiLSTM算法(一)
    Git | git的简单使用教程
    字节跳动五面都过了,结果被刷了,问了hr原因竟说是...
    刷题之路 2022 8.5
    Spring Boot 集成 Redis
    OpenHarmony,奏响中国基础软件的“光辉岁月”
    软件设计师2018上午题基础知识(易错整理)
    壁炉装饰:突破传统的创新趋势
  • 原文地址:https://blog.csdn.net/CSDN_e_1/article/details/128145743