电路连接使用PROTEUS的示例模板中的译码电路,芯片选择引脚连接到译码器74154IO4,数据线连接到系统的低8位数据线ADOAD7,编程将8253计数器0设定为方式3,输入频率为100kHz的数字时钟信号,要求产生5~22ms的方波信号:计数器1设定在方式3,输入同计数器0,要求产生500ms的方波信号,输出信号连接到LED灯,控制IED灯闪烁,设计硬件电路和程序实现以上功能,用虚拟示波器观察产生的波形。
有个挺基础的8086系统设计,想请教一下
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 月下独码 Java领域新星创作者 2024-10-22 19:40关注
本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢
以下是解决此8086系统设计问题的步骤:
一、硬件电路设计
- 8086微处理器
- 8086是整个系统的核心,它负责控制其他芯片的操作并处理数据。
- 连接其数据总线(低8位
ADO - AD7
用于与8253通信)、地址总线以及控制信号。
- 8253计数器芯片
- 连接方式
- 数据线:将8253的数据线
D0 - D7
连接到8086系统的低8位数据线ADO - AD7
,以便数据传输。 - 地址线:通过译码电路连接到合适的地址,这里芯片选择引脚连接到译码器74154的
IO4
,以确定8253在系统中的地址。 - 时钟信号:输入频率为100kHz的数字时钟信号到8253的
CLK0
和CLK1
引脚(用于计数器0和计数器1)。 - 对于计数器0,将其输出
OUT0
连接到示波器用于观察波形,并且根据后续程序设置,产生5 - 22ms的方波信号。 - 对于计数器1,将其输出
OUT1
连接到LED灯,产生500ms的方波信号来控制LED闪烁。
- 数据线:将8253的数据线
- 连接方式
- 74154译码器
- 用于对8086的地址进行译码,以便选择8253芯片。它的
IO4
引脚连接到8253的芯片选择引脚,根据8086的地址信号产生合适的片选信号。
- 用于对8086的地址进行译码,以便选择8253芯片。它的
二、程序设计
8253初始化编程(假设8253的端口地址为
PORT0
和PORT1
,这里是通过译码电路得到的实际地址)- 计数器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
- 首先,需要向8253的控制字寄存器写入控制字。对于计数器0,方式3(方波发生器模式)的控制字格式为:
- 计数器1初始化
- 对于计数器1,同样先写控制字。方式3的控制字格式为
1011xxxxB
,假设为二进制计数且其他设置相同,控制字也是10110000B
(十六进制为B0H
)。MOV AL, 0B0H OUT PORT0, AL
- 计算计数初值。已知输入时钟频率
f = 100kHz
,要产生的方波周期T = 500ms
。根据公式计数初值N = f*T
,N=(100000Hz)* (500*10 - 3s)=50000
。 - 写入计数初值(假设先写低字节,后写高字节):
MOV AX, 50000 OUT PORT1, AL MOV AL, AH OUT PORT1, AL
- 对于计数器1,同样先写控制字。方式3的控制字格式为
- 计数器0初始化
控制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
- 可以通过不断检测计数器1输出的方波信号来控制LED的亮灭。假设通过输入输出端口(如8255芯片等,这里未详细设计其连接)来控制LED,并且可以读取计数器1的输出状态。
请注意,以上程序只是一个基本的框架,在实际的8086系统设计中,还需要考虑更多的细节,如系统的初始化、中断处理(如果需要)、地址译码的具体实现等。并且在PROTEUS中进行仿真时,需要正确设置各个元件的参数和连接关系,以确保系统能够正常工作并观察到正确的波形。
解决 无用评论 打赏 举报 - 8086微处理器
问题事件
- 创建了问题 10月22日
悬赏问题
- ¥15 fluke高精度万用表8845A型号测交流电压一直跳动,且去掉输入后显示不归零
- ¥15 不同模型怎么用同一个shader
- ¥15 安卓启动没有ais proxy与v4l2的log打印
- ¥15 go怎么读取mdb文件里面的数据
- ¥60 Matlab联合CRUISE仿真编译dll文件报错
- ¥15 脱敏项目合作,ner需求合作
- ¥15 脱敏项目合作,ner需求合作
- ¥30 Matlab打开默认名称带有/的光谱数据
- ¥15 res.rows如何取值使用
- ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发