8×55是Intel公司生产的一种通用的可编程并行I/O接口电路芯片。这类可编程接口电路的最大特点是工作方式的确定和改变要由程序完成,能实现复杂的控制功能。
8155芯片含有256×8位静态RAM,两个可编程的8位I/O接口,一个可编程的6位I/O接口,一个可编程的14位定时/计数器,8155芯片具有地址锁存功能。若要求输出连续方波,则设置定时/计数器的最高两位M2 M1=01,在8155的初始化时,假定A口为输出方式,允许中断;B口为输入方式,不允许中断;C口为对A口控制方式(ALT3)。计数器的其他14位装入计数初值。由于8155为减法计数方式,所以计数初值为1000,化为十六进制数为03E8H,则定时/计数器的高8位为43H,低8位为0E8H。命令字的设置见表6-10。
表6-10 8155命令字的设置
因此,命令字的内容为0D9H。假定命令/状态寄存器的地址为0FDF8H,则初始化程序如下:
MOV DPTR,#0FDF8H;命令/状态寄存器地址
MOV A,#0D9H;命令字
MOVX @DPTR,A;装入命令字
MOV DPTR,#0FDFEH;计数器低8位地址
MOV A,#0E8H;低8位计数值
MOVX @DPTR,A;写入计数值低8位
INC DPTR;计数器高8位地址
MOV A,#43H;高8位计数值
MOVX @DPTR,A;写入计数值高8位
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O接口,具有3个通道,是每个接口具有三种工作方式的可编程并行接口芯片(40引脚),见表6-11。8255A可以不需要其他元器件搭配。
表6-11 8255A芯片的引脚说明
8255A芯片的内部结构如图6-18所示。同时必须具有与外设连接的接口A、B、C口。
图6-18 8255A芯片的内部结构图
8255A芯片接口连接部分可分为与CPU连接部分、与外设连接部分、控制器连接部分。8255A芯片与单片机的连接如图6-19所示。
如图6-19所示的8255A芯片3个通道引脚与单片机CPU的连接方式说明如下:
1)数据总线(DB)引脚:单片机的P0.0~P0.7与8255A的D0~D7连接。
2)地址总线(AB)引脚:A0、A1通过74HC373锁存器与单片机的P0.0、P0.1连接。A1A0取00~11值,可选择A、B、C口与控制字寄存器,选择方法如下所示:
A1A0=00:选择A口,A口的8个引脚PA0~PA7与外设连接,用于8位数据的输入与输出。
图6-19 8255A芯片引脚与单片机CPU的连接
A1A0=01:选择B口,B口的8个引脚PB0~PB7与外设连接,用于8位数据的输入与输出。
A1A0=10:选择C口,C口的8个引脚PC0~PC7与外设连接,用于8位数据的输入与输出或通信线。
A1A0=11:选择控制字寄存器。
3)控制总线(CB)引脚:片选信号由P2.5~P2.7经74HC138译码器Y7产生,若要选中8255A,则Y7必须有效,此时P2.7~P2.5=111,由此可推知各口的地址如下:
A口:1110000000000000=E000H;
B口:1110000000000001=E001H;
C口:1110000000000010=E002H;
控制口:1110000000000011=E003H。
8255A有两个控制字:方式选择控制字和C口置/复位控制字。8255A的全部工作状态是通过读/写控制逻辑和工作方式选择来实现的。8255A工作方式选择字共8位,存放在8255A控制字寄存器中。设置工作方式时,必须将标志位D7置1。当用户把相应控制字送到8255A的控制寄存器(A0 A1=11),就决定了PA、PB、PC口的工作方式。A、B组控制电路根据CPU的命令字控制8255A工作方式的电路,A组控制A口及C口的高4位,B组控制B口及C口的低4位。D7=0表示控制字寄存器中存放的是C口置位/复位控制字。D5、D6用于A组的控制,D6D5=00表示A组工作于基本I/O方式0,D6D5=01表示A组工作于应答I/O方式1,D6D5=1x表示A组工作于双向应答I/O方式2(x取0或1)。D4=1表示A口工作于输入方式,D4=0表示A口工作于输出方式。D3=1表示上C口工作于输入方式,D3=0表示上C口工作于输出方式。D1、D2用于B组的控制,D2=0表示B组工作于基本I/O方式0,D2=1表示B组工作于应答I/O方式1,D1=1表示B口工作于输入方式,D1=0表示B口工作于输出方式。D0=1表示下C口工作于输入方式,D0=0表示下C口工作于输出方式。接口方式与A、B、C口分配关系见表6-12。工作方式字应输入控制字寄存器,按图6-19的连接方式,控制寄存器的地址为E003H。
表6-12 接口方式与A、B、C口分配关系
程序设定方式的应用举例如下:设定PA口和PC上为输入方式1,PB口和PC下为输出方式0。
MOV DPTR,#7FFFH;控制口地址
MOV A,#10111000B;0B8H
MOVX @DPTR,A
如图6-19所示的是A、B两组根据CPU写入的“命令字”控制8255A工作方式选择的定义关系。
A组:控制PA口和PC口的上半部(PC7~PC4);B组:控制PB口和PC口的下半部(PC3~PC0)。可根据“命令字”对端口的每一位实现按位“置位”或“复位”。
例6-2:对8255A各口进行如下设置:A口方式0输入,B口方式0输出,C口高位部分为输出、低位部分为输入。设控制字寄存器的地址为03FFH,则其工作方式控制字可设置为
D0=1:C口低半部输入;
D1=0:B口输出;
D2=0:B口方式0;
D3=0:C口高半部输出;
D4=1:A口输入;
D6D5=00:A口方式0;
D7=1:工作方式字标志。
控制字设置为10010001 B,即91H。
初始化程序段如下:
MOV DPTR,#03FFH
MOV A,#91H
MOVX @DPTR,A
可对C口8位中的任一位置“1”或清“0”,用于位控。
读/写控制逻辑操作选择由单片机输出的地址A1、A0及控制信号CS、RD、WR组合控制。选择口的操作状态见表6-13。
表6-13 读/写控制逻辑操作选择
从表6-13中可以看出,8255A和CPU数据总线的接口、CPU和8255A间的命令数据与状态的传输都通过双向三态总线缓冲器传送。D0~D7接CPU的数据总线,A0、A1、为8255A的端口选择信号和片选。
例6-3:单片机向8255A的控制字寄存器写入按位置位/复位控制字07H,则PC3置1;08H写入控制口,则PC4清0。程序段如下:
MOV DPTR,#××××H;控制字寄存器端口地址××××H送DPTR
MOV A,#07H;按位置位/复位控制字07H送A
MOVX @DPTR,A;控制字07H送控制寄存器,把PC3置1
…
MOV DPTR,#××××H;控制字寄存器端口地址送DPTR
MOV A,#08H;方式控制字08H送A
MOVX @DPTR,A;08H送控制字寄存器,PC4清0
外部RAM地址分配如下:
P2 P0
××××××00××××××××→FCFFH,PA口
××××××01××××××××→FDFFH,PB口
××××××10××××××××→FEFFH,PC口
××××××11××××××××→FFFFH,控制口
例6-4:8255A可以直接与MCS-51总线接口相连,如图6-20所示是MCS-51和8255A方式0的接口逻辑图。设PA口接一组指示灯,PB口接一组开关。将MCS-51内部寄存器R2的内容送PA口指示灯显示,将PB口开关状态读入累加器ACC。(www.xing528.com)
图6-20 MCS-51和8255A方式0的接口逻辑图
图6-20中,8255A的RD、WR分别连接MCS-51的RD、WR;8255A的D0~D7接MCS-51的P0口;8255A采用线选法寻址,即MCS-51的P2.7接8255A的CS;MCS-51的最低两位地址线A1、A0连接8255A的端口选择线A1、A0,所以8255A的PA口、PB口、PC口、控制口的地址分配为7FFCH、7FFDH、7FFEH、7FFFH。
解:根据题意,PA口为输出口,输出信息点亮指示灯;PB口为输入口,输入开关状态。由此可写出方式控制字定义,见表6-14。
表6-14 控制字分配
具体程序如下:
MOV DPTR,#7FFFH;写入控制字,控制口地址7FFFH
MOV A,#82H
MOVX @DPTR,A
MOV DPTR,#7FFCH;将R2写入PA口
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#7FFDH;从PB口读入A
MOVX A,@DPTR
例6-5:从口线读入一组开关状态,向端口输出数字量,控制一组指示灯的亮、灭。不需要联络信号,外设的I/O数据可在8255A的各端口得到锁存和缓冲。
基本功能如下:
1)具有两个8位端口(A、B)和两个4位端口(C的上半部分和下半部分)。
2)任一个端口都可以设定为输入或输出,各端口的输入、输出可构成16种组合。
3)数据输出锁存,输入不锁存。
用8255A的PA口作为输出口,PB口作为输入口。将PB口读入的开关信号送PA口外接的8位LED上显示出来。电路图如图6-21所示。
解:端口地址分配如下(仅与P2有关,P0=0FFH):
PA:01111100(7CH)
PB:01111101(7DH)
PC:01111110(7EH)
控制器:01111111(7FH)
控制字定义:方式0,PA、PC输出,PB输入,则控制字定义分配为10000010B(82H)。
图6-21 8255A控制一组指示灯仿真测试图
例6-6:试按图6-21所示的扩展电路写出自8255A的B口输出单片机中R7内容与自8255A的A口输入数据到单片机R3的程序。使用8位地址,8255A的A、B、C口及控制口地址分别为7CH、7DH、7EH、7FH。
解:实现所要求功能的程序如下:
MOV R0,#7FH;R0作地址指针,指向控制口
MOV A,#91H
MOVX @R0,A;方式控制字送控制寄存器
MOV R0,#7DH;R0指向B口
MOV A,R7
MOVX @R0,A;R7的内容输出到B口
DEC R0;使R0指向A口
MOVX A,@R0;从A口输入数据到累加器A
MOV R3,A;把输入数据送存到R3中
例6-7:如图6-22所示,由PA口输出点亮八段数码管,PC口接8个开关用作输入信号。当某开关合上时显示相应的开关号,即K1合显示“1”,K2合显示“2”,依此类推。
解:(1)分析
8255A的4个地址分别为(无关位取1):
PA口:7CFFH
PB口:7DFFH
PC口:7EFFH
图6-22 8255A驱动八段数码管显示
控制字寄存器地址:7FFFH
(2)确定方式控制字
PA口应该工作在方式0且输出,PB口没有用,PC口输入,则方式控制字是10001001B。
(3)应用子程序
EX8255A:MOV DPTR,#7FFFH;8255A初始化
MOV A,#89H
MOVX @DPTR,A
MOV DPTR,#7EFFH;取开关信号
MOVX A,@DPTR
MOV R3,#0;开关号单元清0
MOV R2,#8;8个键
EX8_1:RRC A;移出一位信号
JC EX8_2;判断开关断开跳转
INC R3;键号+1
MOV A,R3;显示值转换显示码
MOV DPTR,#DIRTAB;七段数码管显示段码表首地址
MOVC A,@A+DPTR;查表
MOV DPTR,#7CFFH;送PA口显示
MOVX @DPTR,A
RET
EX8_2: INC R3;键号+1
DJNZ R2,EX8_1;8个键判断完?
RET
DIRTAB:DB 0C0H,0F9H,0A4H,0B0H;定义段码0,1,2,3
DB 99H,92H,82H,0F8H;4,5,6,7
DB 80H,98H,88H,83H;8,9,A,B
DB 0C6H,0A1H,86H,8EH;C,D,E,F
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。