8255A的工作方式及其初始化编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8255A的工作方式及其初始化编程
【例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 ; 将控制字写入控制端口
8255A应用举例
8255A作为通用的8位并行通信接口芯片,用途非常广泛,可以与8位、16位和32位CPU相连接,构成并行通信系统。下面通过几个例子来讨论8255A在应用系统中的接口设计方法及编程技巧。
【例7.3】8255A连接开关和LED显示器的接口电路设计。要求:8255A的A口连接四个开关K3~K0,设置为方式0输入,B口连接一个共阴极LED显示器,设置为方式0输出,将A口四个开关输入的16种状态0H~0FH送B口输出显示。画出接口电路连接图,并编制汇编语言源程序实现上述功能。
分析:本题是8255A方式0应用的一个实例。根据题意,接口电路如图7.13所示。8255A的D7~D0, , 与CPU的D7~D0, , 对应连接,A0和A1与CPU的地址线A0和A1连接,与译码器输出端连接,A口的PA3~PA0连接四个开关K3~K0,其输入有16种组合状态,即0000~1111(0H~0FH),B口经过74LS07(集电极开路六正向高压驱动器)驱动之后与LED显示器连接,可输出一位十六进制数0~F。
图7.13 8255A LED显示器接口电路
8255A的端口地址由地址线A0, A1和片选信号的逻辑组合确定,若CPU的地址线A2, A3, A4连接译码器(如3-8译码器)的输入,译码器的输出端接至,把未连接的CPU的地址线A15~A5的状态设定为1,则可确定8255A的四个端口地址为FFE0H~FFE3H。如图7.14所示,LED显示器由八个发光二极管组成,其中,七个发光二极管分别对应a, b, c, d, e, f, g七个段,另外一个发光二极管为小数点dp。LED有共阳极和共阴极两种结构,共阳极LED的二极管阳极均接+5V,输入端为低电平时,二极管导通发亮;共阴极LED的二极管阴极均接地,输入端为高电平时,二极管导通发亮。因此,通过七段组合可以显示0~9和A~F所对应的七段显示代码,见表7.2。
图7.14 LED显示器
在本例中采用共阴极LED,当A口输入K3~K0的状态为0011B时,B口对应输出七段显示代码为4FH,则LED显示数字3。
显示程序如下:
DATA SEGMENT
LIST DB 3FH, 06H, 5BH, 4FH, …, 71H; 共阴极七段显示代码表
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DA TA
START: MOV AX, DA TA
MOV DS, AX
MOV AL, 90H ; 控制字A口方式0输入, B口方式0输出
MOV DX, 0FFE3H ; 控制口地址
OUT DX, AL ; 将控制字写入控制端口
L0: MOV DX, 0FFE0H ; A端口地址
IN AL, DX ; 读取A口开关状态
AND AL, 0FH ; 屏蔽A口高4位
MOV BX, OFFSET LIST ; 共阴极七段显示代码表的首地址送给BX
AND AX, 00FFH ; 屏蔽AX的高位字节, 保留A口的开关状态
ADD BX, AX ; 形成显示字符的代码地址
MOV AL, [BX] ; 取出显示代码送给AL
MOV DX, 0FFE1H ; B端口地址
OUT DX, AL ; 显示代码送B口显示
CALL DELAY ; 调显示延时子程序
JMP L0 ; 循环显示
DELAY PROC ; 显示延时子程序
PUSH CX
PUSH AX
MOV CX, 0010H
T1: MOV AX, 0010H
T2: DEC AX
JNZ T2
LOOP T1
POP AX
POP CX
RET ; 子程序返回
CODE ENDS
END START
此程序是循环显示程序,可由Ctrl+C强迫中断。
【例7.4】8255A作为并行打印机的接口。
要求:将8255A的A口连接一个并行打印机,工作在方式1,数据输出,采用查询方式将内存输出缓冲区BUFFER中的100H个字节数据送打印机输出,设计接口电路,编制打印驱动程序。
分析:8255A连接打印机的接口电路如图7.15所示。
由于8255A的A口以方式1工作,因此将8255A的PA7~PA0与打印机的数据线D7~D0连接,PC7作为输出信号与打印机的数据选通信号引脚相连,PC6作为输入信号与打印机的应答信号相连,PC4用来查询打印机的忙信号BUSY的状态。在这里应该注意,当CPU输出数据时,8255A产生一个低电平有效的输出信号,当8255A接收到一个响应信号时,才能恢复为高电平。另一方面,打印机需要一个数据选通信号才能接收数据,而是一个低脉冲信号,因此直接将与相连,将会因为互相等待而产生“死锁”。采