1、8086 交通灯的基本原理和构成 8086 交通灯主要由 8086 微处理器、8255A 可编程并行接口芯片、三态输出 的八 D 锁存器、4-16 译码器、模拟交通灯以及逻辑门组成。红、黄、绿灯可接 在 8255A 的接口上,灯的亮、灭
时间: 2023-09-24 22:06:42 浏览: 92
控制由 8255A 的输出端口控制。8086 微处理器通过编程控制 8255A 的输入输出方式,控制交通灯的变化。具体来说,8086 微处理器向 8255A 芯片的输出端口写入不同的控制信号,控制 4-16 译码器的输出状态,从而使得对应红、黄、绿灯的锁存器接收不同的信号,控制交通灯的亮灭。同时,逻辑门的组合也起到了控制交通灯变化的作用。这样,就实现了对交通灯的控制。
相关问题
在protues上使用8086微处理器、8355芯片、8259芯片、8253芯片等实现交通灯控制仿真
好的,这是一个关于使用8086微处理器、8355芯片、8259芯片、8253芯片等实现交通灯控制仿真的问题。在Proteus中进行仿真,需要按照以下步骤进行:
1. 配置8086微处理器:在Proteus中添加8086微处理器,设置其时钟频率,将其连接到电源、外部时钟、地址总线、数据总线和I/O端口。
2. 配置8355芯片:在Proteus中添加8355芯片,将其连接到地址总线、数据总线、I/O端口和中断线。
3. 配置8259芯片:在Proteus中添加8259芯片,将其连接到中断线和I/O端口,并设置其中断向量和中断优先级。
4. 配置8253芯片:在Proteus中添加8253芯片,将其连接到时钟信号和计数器输出,并设置其计数器的工作模式和计数值。
5. 编写程序:使用汇编语言编写程序,对交通灯进行控制,包括红灯、黄灯和绿灯的控制、各种交通状态的判断和处理、中断处理等。
6. 进行仿真:将编写好的程序加载到Proteus中,进行仿真,观察交通灯的控制效果和程序的运行情况。
需要注意的是,在进行仿真时,应该按照实际的硬件连接方式进行仿真,以确保仿真的准确性和可靠性。
利用可编写并行接口芯片 8255A,模拟交通灯控制管理实验,使用C语言编写
好的,以下是一份使用8255A芯片模拟交通灯控制管理的C语言程序:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit WR = P3^5; // WR写入控制信号
sbit RD = P3^6; // RD读取控制信号
sbit CS = P3^7; // CS芯片选择信号
void delay(uint i) // 延时函数
{
while(i--);
}
void init8255() // 8255初始化函数
{
WR = 1; // 先置WR为高电平
RD = 1; // 先置RD为高电平
CS = 0; // 先置CS为低电平,选择8255
P0 = 0x80; // 将P0口置为1000 0000B,表示初始化模式
WR = 0; // 写入模式控制字
delay(10); // 延时
WR = 1; // 停止写入
P0 = 0x00; // 将P0口置为0000 0000B,表示A寄存器值
WR = 0; // 写入A寄存器初始值
delay(10); // 延时
WR = 1; // 停止写入
P0 = 0x00; // 将P0口置为0000 0000B,表示B寄存器值
WR = 0; // 写入B寄存器初始值
delay(10); // 延时
WR = 1; // 停止写入
P0 = 0x00; // 将P0口置为0000 0000B,表示C寄存器值
WR = 0; // 写入C寄存器初始值
delay(10); // 延时
WR = 1; // 停止写入
CS = 1; // 释放8255
}
void main()
{
init8255(); // 调用初始化函数
while(1)
{
P0 = 0x01; // 将P0口置为0000 0001B,表示只有PA口为输出,PB、PC和PD口为输入
P1 = 0x08; // 将P1口置为0000 1000B,表示初始为北南方向绿灯亮
while(1) // 北南方向绿灯亮
{
if(P2 == 0x03) // 如果东西方向有车辆
{
P1 = 0x04; // 切换为北南方向黄灯
delay(3000);
P1 = 0x02; // 切换为东西方向绿灯
delay(5000);
break;
}
else if(P2 == 0x0C) // 如果南北方向有车辆
{
P1 = 0x10; // 切换为东西方向黄灯
delay(3000);
P1 = 0x20; // 切换为南北方向绿灯
delay(5000);
break;
}
else // 如果东西和南北方向都没有车辆
{
P1 = 0x08; // 保持北南方向绿灯
delay(5000);
}
}
while(1) // 东西方向绿灯亮
{
if(P2 == 0x03) // 如果南北方向有车辆
{
P1 = 0x10; // 切换为东西方向黄灯
delay(3000);
P1 = 0x08; // 切换为北南方向绿灯
delay(5000);
break;
}
else if(P2 == 0x0C) // 如果东西方向有车辆
{
P1 = 0x02; // 切换为北南方向黄灯
delay(3000);
P1 = 0x01; // 切换为东西方向绿灯
delay(5000);
break;
}
else // 如果东西和南北方向都没有车辆
{
P1 = 0x02; // 保持东西方向绿灯
delay(5000);
}
}
}
}
```
在这份程序中,我们将PA口设置为输出,PB、PC和PD口设置为输入,用于检测东西和南北方向的车辆情况。初始时,我们将北南方向绿灯亮,向东西方向和南北方向轮流检测车辆情况,当检测到有车辆时切换灯光,没有车辆时继续保持当前灯光。在检测车辆情况时,我们通过读取P2口的值来判断。在切换灯光时,我们通过将P1口的值赋为对应的二进制数来实现。