在单片机系统中主要有两类数据传送操作,一类是单片机和存储器之间的数据读写操作;另一类则是单片机和其它设备之间的数据输入/输出(i/o)操作。单片机和存储器之间的连接十分简单,主要包括地址线、数据线、读写选通信号。
单片机与控制对象或外部设备之间的数据传送却十分复杂,存在速度不匹配,电平不一致,信号需要转换等问题。使用扩展的i/o接口电路可以较好实现速度协调、输出数据锁存、输入数据缓冲、数据转换等。
一、简单i/o口的扩展
由于单片机的p0口经常用作数据线或低8位地址线;p2口用作高8位地址线,p3口的第2功能更为重要,所以只有p1口能用作真正的数据i/o口来使用,但是,在很多场合,仅使用p1口来作为数据i/o口是不够的,这是就需要扩展i/o口。
当所需扩展的外部1/o口数量不多时,可以使用常规的逻辑电路、锁存器进行扩展。这一类的外围芯片一般价格较低而且种类较多,常用的如:74ls377、74ls245、74ls373、74ls244、74ls273、74ls577、74ls573。
1、输入接口扩展
图1是利用74ls244进行简单输入接口扩展的连接图。
图1 74ls244系统扩展图
从图中可以看出,当p2.5和同时为低电平时,74ls244才能将输入端的数据送到8051的p0口,其中p2.5决定了74ls244的地址为:xx0xxxxxxxxxxxxxb。通常,我们选择的地址是dfffh,则接口的输入操作程序如下:
mov dptr,#0dfffh
movx a,@dptr
2、输出接口扩展
图2是利用74ls377进行简单输出接口扩展的连接图。
图中利用p2.6(即a14)和a0对2块74ls377芯片进行选择。当p2.6=1、a0=0时选中74ls377(1);当p2.6=1、a0=l时选中74ls377(2)。假设未用的地址线为“1”,则74ls377(1)的地址为0fffeh,74ls377(2)的地址为0ffffh。
74ls377(1)输出数据的操作指令如下:
mov dptr,#0fffeh
mov a,#data
movx @dptr,a
图2 74ls377系统扩展图
二、可编程并行i/o接口芯片8255a
intel8255a是一种可编程通用并行接口芯片,可适用于多种微处理器的8位并行输入/输出接口芯片。它具有两个8位(a口和b口)和两个4位(c口高/低4位)并行i/o端口,能适应cpu与i/o接口之间的多种数据传送方式的要求,芯片内部主要由控制寄存器、状态寄存器、数据寄存器组成,能独立编程,有3种工作方式。使用8255a可实现多种数据传送方式的要求。
1.8255a的结构
8255a由三部分组成,结构如图3所示。
图3 8255a内部结构图
2.8255a与mcs-51系列单片机的连接
图4 8255与单片机连接图
3.8255a的控制字
图5 8255的工作方式控制字
8255a还有一个c口置/复位控制字,用来设置c口某位的状态,而不影响其他位。如图6。
图6 8255c口置位复位控制字
4.8255a三种工作方式的功能及应用举例
三种基本的工作方式:
(1)方式0:基本输入/输出方式
方式0不使用联络信号,也不使用中断,a口和b口可定义为输入或输出口,c口分成两个部分(高4位和低4位),c口的两个部分也可分别定义为输入或输出。在方式0时,所有口输出均有锁存,输入只有缓冲,而无锁存,c口还具有按位将其各位清0或置1的功能。
利用8255a作为无条件输出接口,可以实现报警电路的设计,如图7所示。
图7 报警接口电路图
(2)方式1:选通输入/输出方式
a口借用c口的一些信号线作控制和状态线,形成a组;b口借用c口的一些信号线用作控制和状态线,组成b组。在方式1下,a口和b口的输入输出均带有锁存。
利用8255a用作查询输入接口,可以实现外部输入装置与cpu的连接,如图8所示。
图8 输入装置与cpu接口示意图
(3)方式2:双向输入/输出工作方式
方式2是a组独有的工作方式。外设既能在a口的8条引线上发送数据,又能接收数据。此方式也是借用c口的5条信号线作控制和状态线,a口的输入和输出均带有锁存。方式2下的联络信号线定义如图9所示。
图9 方式2下的联络信号线定义