Arduino与Proteus仿真实例-8255A可编程IO驱动仿真

8255A可编程IO驱动仿真

1、8255A介绍

8255A 是一种通用可编程 I/O 设备,旨在根据需要在某些条件下将数据从 I/O 传输到中断 I/O。 它几乎可以与任何微处理器一起使用。

它由三个 8 位双向 I/O 端口(24 I/O 线)组成,可根据需要进行配置。

1)8255A 端口

8255A 有 3 个端口,即PORTAPORTBPORTC

  • PortA 包含一个 8 位输出锁存器/缓冲器和一个 8 位输入缓冲器。
  • PortB 类似于端口 A。
  • PortC通过控制字可以分为两部分,即PORT C下层(PC0-PC3)和PORT C上层(PC7-PC4)。

这三个端口又分为两组,即A组包括PORTA和上PORTC。B组包括PORTB和下PORTC。这两组可以编程为三种不同的模式,即第一种模式称为模式 0,第二种模式命名为模式1,第三种模式命名为模式2。

2)操作模式

8255A 具有三种不同的工作模式

  • 模式0 在此模式下,端口 A 和 B 用作两个 8 位端口,端口 C 用作两个 4 位端口。 每个端口都可以编程为输入模式或输出模式,其中输出被锁存而输入不被锁存。 端口没有中断能力。
  • 模式1在此模式下,端口 A 和 B 用作 8 位 I/O 端口。 它们可以配置为输入或输出端口。 每个端口使用来自端口 C 的三条线作为握手信号。 输入和输出被锁存。
  • 模式2在此模式下,端口 A 可以配置为双向端口,端口 B 可以配置为模式 0 或模式 1。端口 A 使用来自端口 C 的五个信号作为数据传输的握手信号。 来自端口 C 的其余三个信号既可用作简单的 I/O,也可用作端口 B 的握手。

3)8255A的特性

8255A的突出特性如下:

  • 它由 3 个 8 位 IO 端口组成,即 PA、PB 和 PC。
  • 地址/数据总线必须从外部解复用。
  • TTL 兼容的。
  • 具有改进的直流驱动能力。

4)8255A结构

在这里插入图片描述

2、仿真电路原理图

在这里插入图片描述

3、仿真代码实现

本次实例使用了开源库:

并对该库的pio8255.h做了如下更改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef PIO8255\_H
#define PIO8255\_H

#include <Arduino.h>

class PIO8255
{
public:
PIO8255(int d0 = 2,int d1 = 3,int d2 = 4,int d3 = 5,int d4 = 6,int d5 = 7,int d6 = 8,int d7 = 9,int cs = 13,int rd = 10,int wr = 11,int res = 12,int a0 = A0,int a1 = A1);
void init();
void set\_port(char port, byte data);
void set\_pin(char port, int pin, boolean highlow);

private:
int _d0,_d1,_d2,_d3,_d4,_d5,_d6,_d7,_cs,_rd,_wr,_res,_a0,_a1;
int out_data[8];
byte porta,portb,portc;
};




#endif

演示代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <pio8255.h>
PIO8255 mcont;

void setup() {
mcont.init();
}

void loop(){
//Walk the leds forward
for (byte mask = B10000000; mask>0; mask >>= 1) {
mcont.set\_port('B', mask);
delay(100);
}
//And walk back
for (byte mask = B00000001; mask>0; mask <<= 1) {
mcont.set\_port('B', mask);
delay(100);
}
}

3、仿真结果

在这里插入图片描述

文章来源: https://iotsmart.blog.csdn.net/article/details/121077962