xinggdkyzbrsyqz 2024-10-22 16:09 采纳率: 0%
浏览 3

有个挺基础的8086系统设计,想请教一下

电路连接使用PROTEUS的示例模板中的译码电路,芯片选择引脚连接到译码器74154IO4,数据线连接到系统的低8位数据线ADOAD7,编程将8253计数器0设定为方式3,输入频率为100kHz的数字时钟信号,要求产生5~22ms的方波信号:计数器1设定在方式3,输入同计数器0,要求产生500ms的方波信号,输出信号连接到LED灯,控制IED灯闪烁,设计硬件电路和程序实现以上功能,用虚拟示波器观察产生的波形。

  • 写回答

1条回答 默认 最新

  • 越重天 新星创作者: Java技术领域 2024-10-22 19:40
    关注

    本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢

    以下是解决此8086系统设计问题的步骤:

    一、硬件电路设计

    1. 8086微处理器
      • 8086是整个系统的核心,它负责控制其他芯片的操作并处理数据。
      • 连接其数据总线(低8位ADO - AD7用于与8253通信)、地址总线以及控制信号。
    2. 8253计数器芯片
      • 连接方式
        • 数据线:将8253的数据线D0 - D7连接到8086系统的低8位数据线ADO - AD7,以便数据传输。
        • 地址线:通过译码电路连接到合适的地址,这里芯片选择引脚连接到译码器74154的IO4,以确定8253在系统中的地址。
        • 时钟信号:输入频率为100kHz的数字时钟信号到8253的CLK0CLK1引脚(用于计数器0和计数器1)。
        • 对于计数器0,将其输出OUT0连接到示波器用于观察波形,并且根据后续程序设置,产生5 - 22ms的方波信号。
        • 对于计数器1,将其输出OUT1连接到LED灯,产生500ms的方波信号来控制LED闪烁。
    3. 74154译码器
      • 用于对8086的地址进行译码,以便选择8253芯片。它的IO4引脚连接到8253的芯片选择引脚,根据8086的地址信号产生合适的片选信号。

    二、程序设计

    1. 8253初始化编程(假设8253的端口地址为PORT0PORT1,这里是通过译码电路得到的实际地址)

      • 计数器0初始化
        • 首先,需要向8253的控制字寄存器写入控制字。对于计数器0,方式3(方波发生器模式)的控制字格式为:1011xxxxB,假设使用二进制计数(x部分根据具体需求确定,这里假设为0000),则控制字为10110000B(十六进制为B0H)。
        • 写入控制字到8253的控制字寄存器(假设地址为PORT0):
          MOV AL, 0B0H
          OUT PORT0, AL
          
        • 计算计数初值。已知输入时钟频率f = 100kHz,要产生的方波周期T在5 - 22ms之间。根据公式计数初值N = f*T,当T = 5ms时,N1=(100000Hz)* (5*10 - 3s)=500;当T = 22ms时,N2=(100000Hz)* (22*10 - 3s) = 2200。所以计数初值的范围是500 - 2200。
        • 写入计数初值(假设先写低字节,后写高字节):
          MOV AX, 500 ; 这里以500为例,可以根据需求调整
          OUT PORT0, AL
          MOV AL, AH
          OUT PORT0, AL
          
      • 计数器1初始化
        • 对于计数器1,同样先写控制字。方式3的控制字格式为1011xxxxB,假设为二进制计数且其他设置相同,控制字也是10110000B(十六进制为B0H)。
          MOV AL, 0B0H
          OUT PORT0, AL
          
        • 计算计数初值。已知输入时钟频率f = 100kHz,要产生的方波周期T = 500ms。根据公式计数初值N = f*TN=(100000Hz)* (500*10 - 3s)=50000
        • 写入计数初值(假设先写低字节,后写高字节):
          MOV AX, 50000
          OUT PORT1, AL
          MOV AL, AH
          OUT PORT1, AL
          
    2. 控制LED闪烁的程序(简单示例)

      • 可以通过不断检测计数器1输出的方波信号来控制LED的亮灭。假设通过输入输出端口(如8255芯片等,这里未详细设计其连接)来控制LED,并且可以读取计数器1的输出状态。
        CHECK_LOOP:
        IN AL, PORT_STATUS ; 假设PORT_STATUS是读取计数器1输出状态的端口
        TEST AL, 01H ; 假设OUT1连接到最低位
        JZ LED_OFF
        LED_ON:
        MOV AL, 0FFH ; 假设点亮LED是输出高电平
        OUT PORT_LED, AL
        JMP CHECK_LOOP
        LED_OFF:
        MOV AL, 00H ; 假设熄灭LED是输出低电平
        OUT PORT_LED, AL
        JMP CHECK_LOOP
        

    请注意,以上程序只是一个基本的框架,在实际的8086系统设计中,还需要考虑更多的细节,如系统的初始化、中断处理(如果需要)、地址译码的具体实现等。并且在PROTEUS中进行仿真时,需要正确设置各个元件的参数和连接关系,以确保系统能够正常工作并观察到正确的波形。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月22日