8255A初始化编程、端口地址的计算
2011-06-07 19:04阅读:
8255A的A,B,C三个端口的工作方式是在初始化编程时,通过向8255A的控制端口写入控制字来设定的。
8255A由编程写入的控制字有两个:方式控制字和置位/复位控制字。方式控制字用于设置端口A, B,
C的工作方式和数据传送方向;置位/复位控制字用于设置C口的PC7~PC0中某一条口线PCi(i=0~7)的电平。两个控制字公用一个端口地址,由控制字的最高位作为区分这两个控制字的标志位。
(1)方式控制字的格式
8255A工作方式控制字的格式如图7.11所示。

图7。11 8255A工作方式控制字的格式
D0:设置PC3~PC0的数据传送方向。D0=1为输入;D0=0为输出。
D1:设置B口的数据传送方向。D1=1为输入;D1=0为输出.
D2:设置B口的工作方式。D2=1为方式1;D2=0为方式0。
D3:设置PC7~PC4的数据传送方向。D3=1为输入;D3=0为输出。
D4:设置A口的数据传送方向。D4=1为输入;D4=0为输出。
D6D5:设置A口的工作方式。D6D5=00为方式0,D6D5=01为方式1,D6D5=10或11为方式2。
D7:方式控制字的标志位,恒为1。
例如,将8255A的A口设定为工作方式0输入,B口设定为工作方式1输出,C口没有定义,工作方式控制字为10010100B。
(2)C口置位/复位控制字的格式
8255A C口置位/复位控制字的格式如图7.12所示。
8255A C口置位/复位控制字用于设置C口某一位口线PC |
i(
i=0~7)输出为高电平(置位)或低电平(复位),对各端口的工作方式没有影响。
D3~D1:8种状态组合000~111对应表示PC0~PC7。
D0:用来设定指定口线PC
i为高电平还是低电平。当D0=1时,指定口线PC
i输出高电平;当D0=0时,指定口线PC
i输出低电平。

图7.12 8255A C口置位/复位控制字的格式
D6~D4没有定义,状态可以任意,通常设置为0。D7位作为标志位,恒为0。例如,若把PC2口线输出状态设置为高电平,则置位/复位控制字为00000101B。
(3)8255A初始化编程
8255A的初始化编程比较简单,只需要将工作方式控制字写入控制端口即可。另外,C口置位/复位控制字的写入只是对C口指定位输出状态起作用,对A口和B口的工作方式没有影响,因此只有需要在初始化时指定C口某一位的输出电平时,才写入C口置位/复位控制字。
【例7.1】
设8255A的A口工作在方式0,数据输出,B口工作在方式1,数据输入,编写初始化程序(设8255A的端口地址为FF80H~FF83H)。
初始化程序如下:
MOV DX, 0FF83H ; 控制寄存器端口地址为FF83H
MOV AL, 10000110B ; A口方式0, 数据输出, B口方式1, 数据输入
OUT DX, AL
; 将控制字写入控制端
【例7.2】
将8255A的C口中PC0设置为高电平输出,PC5设置为低电平输出,编写初始化程序(设8255A的端口地址为FF80H~FF83H)。
初始化程序如下:
MOV DX, 0FF83H ; 控制端口的地址为FF83H
MOV AL, 00000001B ; PC0设置为高电平输出
OUT DX, AL ; 将控制字写入控制端口
MOV AL, 00001010B ; PC5设置为低电平输出
OUT DX, AL ; 将控制字写入控制端口
原创]关于8255的端口地址的计算
2007-06-03 12:17
书上就丢下这样一句话:
8255的片选信号CS及口地址选择线A0、A1分别由8031的P0.7和P0.0、P0.1经地址锁存后提供。故8255的A、B、C口及控制口地址分别为FF7CH、FF7DH、FF7EH、FF7FH。
再上网找,看到很多人的提问都被那些'大虾' 丢下一句话,'看书去',汗...
经过两天的摸索,终于有点发现了,请看下面的资料:
资料1:
图2是采用74HC2244芯片进行输入接口扩展的原理电路,图3是读P0口的时序。由图3可以看出,当P2.7和RD同为低电平时,74HC2244才能将输入端的数据送到单片机的P0口。其中,P2.7决定了74HC244的地址,0000H-7FFFH(共32K)地址都可以访问这个单元,这就是用线选法所带来的副作用。通常可选择其中的最高地址作为这个芯片的地址来写程序,如这个芯片的地址是7FFFH。但这仅仅是一种习惯,并不是规定,当然也完全可以用0000H作为这个芯片的地址。当确定了地址之后,其接口的输入操作程序如下:
资料2:
由于MCS-51单片机的外部RAM和I/O口是统一编址的,因此,可以把单片机外部64K字节RAM空间的一部分作为扩展外围I/O口的地址空间。这样,单片机就可以像访问外部RAM存储器单元那样访问外部的P0口接口芯片
所以,8255的扩展端口地址不是唯一的,在0000H~FFFFH,除了cs,A0,A1这三个位固定外,其他可以任意,
如cs占用p2.7,A1占用P0.1,A0占用P0.0,那么可用的端口地址是:
A口:(cs=P2.7=0,A1A0=P0.1P0.0=00)0000H~7FFCH
B口:(cs=P2.7=0,A1A0=P0.1P0.0=01)0001H~7FFDH
C口:(cs=P2.7=0,A1A0=P0.1P0.0=10)0002H~7FFEH
控制口:(cs=P2.7=0,A1A0=P0.1P0.0=11)0003H~7FFFH,
通常可选择其中的最高地址作为这个芯片的地址来写程序
|