武汉理工大学毕业设计(论文)
3 芯片基本读写的实现
3.1 引言
本设计主要用到三个芯片,即单片机8051和两个I/O口扩展芯片8255A。它们之间只有完美无误地进行通信,才可以保证更高程序思想的实现。本章就以此为目的,详细探讨8255A芯片的内部协议,内部寄存器的数据结构,操作特点等等。最后是芯片的初始化函数。
3.2 单片机对芯片8255A的基本读写
与一般其他的芯片类似,对8255A芯片的操作,一般也即对其内部寄存器的操作。其内部寄存器分为两类,一类为命令寄存器,另一类为数据寄存器。由于8255A的功能为将一组单片机I/O口扩展为三组I/O口,那么肯定要有三组数据寄存器,分别对应着它的三组I/O口,即PA口,PB口与PC口,那么8255A芯片便有四个寄存器,可以用两位的地址线进行寻址(即管脚A0与A1)。其读寄存器的流程图3-1。
开始使能片选选择寄存器地址读信号为低准备数据读信号为高片选无效P0置高电平开始使能片选选择寄存器地址写信号为低准备数据写信号为高片选无效P0置高电平
图3-1 读写寄存器流程图
其过程为:开始选中该芯片(低电平有效),而后设置好所要读写的寄存器的地址,也即设置好A0与A1的数值组合,若为读寄存器,则让单片机读引脚P3.7为低电平,反之若为写寄存器,则让单片机写引脚P3.6为低电平,然后把要读或者写的数据放到数据
16
武汉理工大学毕业设计(论文)
口P0口上(需要注意的是,当单片机读寄存器时,对于其自身来说,是输入数据,故此时需先让P0口值为高电平0xff为下一步的输入做准备),一段短短的稳定时间后再让读引脚或者写引脚为高电平,则在由低到高的跳变中,数据得到了转移。然后再片选无效,以防以后的数据传输产生相互干扰。最后数据口P0置为0xff,为方便下次可能的输入做准备。
3.3 芯片8255A的初始化
3.3.1 芯片8255A的逻辑构造
该芯片的逻辑构造如图3-2所示,
图3-2 8255A逻辑构造图
1、三个并行输入/输出端口(端口A、端口B、端口C)
8255A有A、B、C三个并行输入/输出端口(简称为A口、B口、C口),其功能全部由程序设定,每个端口都有自己的特点。A口、B口通常作为独立的I/O端口使用,C口也可以作为一般的I/O端口使用,但当A口、B口作为应答式的I/O口使用时,C口分别用来为A口、B口提供应答控制信号。
2、读/写控制逻辑
读/写控制逻辑用于管理数据、控制字或状态字的传送,其控制信号有以下几种: (1) (2)
片选信号,低电平有效允许8255A与CPU交换信息。
读信号,低电平有效允许CPU从8255A端口中读取数据或状态信息。
17
武汉理工大学毕业设计(论文)
(3) ,写信号,低电平有效允许CPU将数据、控制字写入到8255A中。
(4) RESET,复位信号,高电平有效。清除8255A所有控制寄存器内容,并将各端口置成输入方式。
(5) A1、A0,8255A片内端口寻址地址。 3、A组和B组控制电路
A组和B组控制电路接受读/写控制逻辑的信号和CPU送入的控制字,然后决定各端口的功能。A组控制电路控制A口和C口的高4位(PC7~PC4);B组控制电路控制B口和C口的低4位(PC3~PC0)。还可根据控制字的要求对C口的某位实现置0或置1的操作。
4、数据总线缓冲器
数据总线缓冲器是一个双向三态的8位缓冲器,可与系统的数据总线直接相连,实现CPU和8255A之间的信息传送。
8255A芯片内部有四个寄存器,即命令寄存器、PA口寄存器、PB口寄存器、PC口寄存器。其中,向命令中写入数据可以控制芯片各扩展口的工作方式。向后三者寄存器中写入数据,芯片会自动将其取出,并以高低电平的形式分布于各相应管脚。并且,三组扩展口在作为输出时,均具有锁存功能。
由于有四组口,故相应的应该有两位地址来对其寻址。芯片上的A0、A1即为此而设计,当A0 A1分别为0 0,1 0,0 1,1 1时,寻址为PA,PB,PC口寄存器以及命令(控制)寄存器。具体的端口选择与操作功能如表3-1所示[17]。
表3-1 8255A端口选择及操作功能表
A1 A0 0 0 1 0 0 1 1 × 1 × 0 1 0 0 1 0 1 × 1 × 0 0 0 1 1 1 1 × 0 1 1 1 1 0 0 0 0 × 1 1 0 0 0 0 0 0 0 1 0 0 端口及操作功能 端口A→数据总线 端口B→数据总线 端口C→数据总线 数据总线→端口A 数据总线→端口B 数据总线→端口C 数据总线→控制寄存器 未选中8255A,数据总线→三态 非法状态(不能读控制寄存器) 数据总线→三态 输出操作(写) 输入操作(读) 18
武汉理工大学毕业设计(论文)
3.3.2 芯片8255A的工作方式
该芯片具有三种可选的工作方式,分别便于不同情况时供使用者以更为方便的选择。现对其工作方式做一简要介绍如下[18]~[19]:
1、方式0—基本输入输出方式
方式0称为基本输入输出方式,该方式下可将3个数据端口划分为4个独立的部分:A口和B口作为两个8位端口,C口的高4位和低4位可以用作两个4位端口(也可以作为一个8位端口),各个端口都可以独立用作输入或输出。方式0使用在无条件传送和查询式传送两种场合。
2、方式1—选通输入输出方式
方式1是一种选通输入输出方式。在这种工作方式下,端口A、端口B和端口C被分为两个组。端口A和端口B用作数据的输入/输出,端口C的一些引脚信号被规定为端口A、B的联络信号,这些联络信号和C口的各引脚保持固定的对应关系,不能用程序改变。
3、方式2—双向输入输出方式
方式2只适用于端口A,是双向的输入输出传输方式。在方式2,外设可以在A口的8位数据线上分时向8255A发送数据或从8255A接收数据,但不能同时进行。该方式需占用端口C的5位作为联络信号。端口A工作于方式2时,端口B可选方式0或方式1。
方式1和方式2联络信号见表3-2,其中下标A和B分别表示A口和B口的联络线。
表3-2 8255C口联络信号
C口位线 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 方式1 输入 INTRB IBUFB STBB INTRA STBA IBUFA 输出 INTRB OBFB ACKB INTRA ACKA OBFA 输入 INTRA STBA IBUFA ACKA 方式2 输出 INTRA OBFA
表3-2中,用于输入操作的联络信号有: STB :选通信号,输入,低电平有效; IBUF:输入缓冲器满信号,输出,高电平有效;
19
武汉理工大学毕业设计(论文)
INTR:中断请求信号,输出,高电平有效; 用于数据输出操作的联络信号有:
ACK:外设设备响应信号,输入,低电平有效; OBF :输出缓冲器满信号,输出,低电平有效; INTR:中断请求信号,输出,高电平有效; 联络信号用于查询方式或中断方式输入或输出。
3.3.3 芯片8255A的初始化
由以上的分析可知,对芯片8255A的初始化,实质上即是规定好它每个扩展口是作为什么方式使用,即是输入还是输出,并且工作于何种方式。
图3-3 8255A工作方式控制字格式
根据本设计的需求可知,用于键盘输入的8255A芯片接口工作方式为PA口工作在输入,PB口工作在输出方式。而用于楼层呼叫显示的8255A芯片要用到三组扩展口PA、PB和PC,并且他们均是用于控制二极管的亮灭,可见是作为输出使用的;并且他们只要求作为最基本的输出,即工作于方式0便可。上述要求均需通过芯片的方式控制字来加以限定。结合图3-3我们可以得到用于键盘输入的8255A芯片控制字的数值为0x90(二进制为1001 0000),用于楼层呼叫显示的8255A芯片控制字的数值为0x80(二进制为10000000)。最后,再把这一命令控制字发送到82C55的命令寄存器即可,命令寄存器对应的地址为A0=1,A1=1。
20