8255A的A,B,C三个端口的工作方式是在初始化编程时,通过向8255A的控制端口写入控制字来设定的。 8255A由编程写入的控制字有两个:方式控制字和置位/复位控制字。方式控制字用于设置端口A, B,C的工作方式和数据传送方向;置位/复位控制字用于设置C口的PC7~PC0中某一条口线PCi(i=0~7)的电平。两个控制字公用一个端口地址,由控制字的最高位作为区分这两个控制字的标志位。 (1)方式控制字的格式 8255A工作方式控制字的格式如图7.11所示。 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所示。 8255AC口置位/复位控制字用于设置C口某一位口线PCi(i=0~7)输出为高电平(置位)或低电平(复位),对各端口的工作方式没有影响。 D3~D1:8种状态组合000~111对应表示PC0~PC7。 D0:用来设定指定口线PCi为高电平还是低电平。当D0=1时,指定口线PCi输出高电平;当D0=0时,指定口线PCi输出低电平。 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)。 初始化程序如下: 【例7.2】将8255A的C口中PC0设置为高电平输出,PC5设置为低电平输出,编写初始化程序(设8255A的端口地址为FF80H~FF83H)。 MOV DX, 0FF83H ; 控制端口的地址为FF83H |
原创]关于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, 通常可选择其中的最高地址作为这个芯片的地址来写程序 |