第九章 并口扩展
文章目录
前言
单片机只有4个端口P0~P3,为了充分利用这些端口,就需要扩展端口,使得能够接更多的外部设备。这些用于扩展端口的芯片称为可编程I/O接口芯片,单片机最常用的芯片是8255A和8155,这里我们介绍8255A芯片的应用。
一、8225A芯片
内部结构
数据端口A 、B 、C
A口,B口,C口均为8位I/O数据口
8 位数据输出/ 输入缓冲, 锁存器, C 口无输入锁存。
A组控制和B组控制
这二组控制电路:
① 接收芯片内部总线上的控制字。
② 接收来自读/ 写控制逻辑电路的读/ 写命令。
这二组控制电路输出去控制:
A 组: A 口和 C 口高 4 位;
B 组: B 口和 C 口低 4 位。
读写控制逻辑电路
管理:8255A 的数据传输过程。
接收:CS、A1、A0、RESET、WR、RD信号
发送:控制命令
数据总线缓冲器
它是一个双向三芯的8位数据缓冲器,8255A通过它与系统数据总线相连
外部引脚及功能
数据线(8条):D0~D7,用于传送CPU与8255A之间的数据。
控制线和寻址线(6条):
RESET:复位信号,输入高电平有效;
RD,WR:读/写信号,低电平有效;
CS:片选线,低电平有效;
A0,A1:地址输入线,分别用于选择A,B,C口和控制寄存器;
I/O口线(24条):PA0~7,PB0~7,PC0~7;
电源线(2条):VCC和GND。
地址表
控制字
有2个控制字,方式控制和C口置/复位控制,以D7作为标志:
D7=1:方式控制;
D7=0:C口置/复位控制。
方式控制字
A组:
1)D7=1;
2)D6、D5方式选择:
0 | 0 | 方式 | 0 |
0 | 1 | 方式 | 1 |
1 | x | 方式 | 2 |
3)D4:A口,1输入,0输出;
4)D3:上C口,1输入,0输出;A组
B组
5)D2:方式选择;
6)D1:B口,1输入,0输出;
7)D0:C口,1输入,0输出;B组
C口置/复位控制字
1)D7=0;
2)D6D5D4:不用;
3)D3D2D1:C口位选择;
-
0 0 0 BIT0 · · · · 1 2 1 BIT7
4)D0:置位,0复位1置位
工作方式
1)方式0:基本输入/输出方式。A口,B口,C口高4位及低4位,不需选通
CPU向8255A无条件传送,并在各端口锁存和缓冲。
2)方式1:选通输入/输出方式。
A口,B口作为传送I/O数据,C口作为握手联络线。
3)方式2:双向传送。
仅适用于A口;
C口高5位作为A口联络信号,低3位可工作在方式0,方式1。
二、程序设计和仿真
1.proteus仿真
2.程序
#include <reg52.h>//单片机头文件
#include <absacc.h>//扩展地址解析头文件
#define PAC XBYTE[0x7FFF]//控制地址定义
#define PA XBYTE[0x7CFF]//A口地址定义
#define PB XBYTE[0x7DFF]//B口地址定义
sbit RST=P1^0;//复位引脚定义
sbit RD1=P3^7;//读引脚定义
sbit RW=P3^6;//写引脚定义
void delay(void)//延时子程序
{
int m,n;
for(m=0;m<50;m++)
for(n=0;n<50;n++);
}
void main(void)
{
unsigned char n;//数据存储变量
RST=1;//复位置1
RST=0;//复位置0
PAC=0x82;//设控制字
while(1)
{
n=PB;//从B口读数据
delay();//延时
PA=n;//在A口输出数据
delay();//延时
}
}
总结
使用单片机本身的I/O (Input/Output)口,可以实现一些简单的数据输入/输出传送。但是对于复杂的I/O操作,必须有接口电路的协调与控制才能进行。所以I/O扩展的主要内容是接口问题。