1、可编程并口8255A,8255A是一种典型的通用选通并行接口芯片。 其内部有三个独立的8位数据口,即A口、B口、C口。 有三种工作方式方式0-基本输入/输出方式方式1-选通输入/输出方式方式2-双向传送方式,8255A外部引脚,8255A内部结构图,8255A内部结构, 主要由数据总线缓冲器、读写控制逻辑、A、B、C三个双向I/O端口及有关控制电路组成。 数据总线缓冲器三态双向8位缓冲,用于收发数据总线上的数据 读/写控制逻辑包括RD、WR、CS、A0、A1。控制总线的开放、关闭和数据的传送方向。,8255A的编程控制字,8255A共有两个控制字:方式选择控制字;对端口C按位置位复位控制字。这
2、两个控制字共用一个地址号。即当地址线A1A0都为1时就是访问控制字寄存器的片内地址。而用控制字的D7位来区分是方式设定控制字,还是对C端口的按位置位复位命令。当D7位为1,是方式控制字;若D7位为0,是对端口C按位置位复位的命令。,8255A方式选择控制字,例1:要把A口指定为1方式,输入,C口上半部定为输出;B口指定为0方式,输出,C口下半部定为输入,则工作方式命令代码是:10110001B或B1H。,例1:要把A口指定为1方式,输入,C口上半部定为输出;B口指定为0方式,输出,C口下半部定为输入,则工作方式命令代码是:10110001B或B1H。若将此命令代码写到8255A的命令寄存器,即
3、实现了对8255A工作方式及端口功能的指定,或者说完成了对8255A的初始化。初始化的程序段为:MOV DX,303H ;8255A命令口地址MOV AL,OB1H ;初始化命令OUT DX,AL ;送到命令口,8255A C口置位/复位控制字,端口C的每一位都可以通过向控制寄存器写入置位复位控制字,而使它每一位置位(输输出为1)或复位(即输出为0)。 端口C的任意一位,都可以用一条输出指令访问控制寄存器,使其置位或复位。按位置位复位指令只影响指定位,而不改变其它位的状态。,例2:若要把C口的PC2引脚置成高电平输出,则命令字应该为00000101B或05H。将该命令的代码写入8255A的命令
4、寄存器,就会使得从PC口的PC2引脚输出高电平,其程序段为: MOV DX,303H ;8255A命令口地址 MOV AL,05H ;使PC2l的命令字 OUT DX, AL ;送到命令口,如果要使引脚PC2输出低电位,则程序段为: MOV DX,303H;8255A命令口地址。 MOV AL,04H;使PC20的命令 OUT DX,AL ;送到命令口,利用C口的按位控制特性还可以产生正、负脉冲或方波输出,对外设进行控制。例3:利用8255的PC7产生负脉冲,作打印机接口电路的数据选通信号,其程序段为:MOV DX,303H ;8255A命令口MOV AL,00001110B ;置PC70OU
5、T DX, ALNOP ;维持低电平NOPMOV AL,00001111B ;置PC7=1OUT DX,AL,例4:利用8255A的PC6,产生方波,经滤波和功放后,送到喇叭,使产生不同频率的声音,其程序段为:OUTSPK PROCMOV DX,303H ;8255A命令口MOV AL,00001101;置PC6lOUT DX, ALCALL DELAY1 ;PC6输出高电乎维持的时间MOV AL,00001100B ;置PC60OUT DX, AL ;CALL DELAY1 ;PC6输出低电平维持的时间若改变DELAY1的延时时间,即可改变喇叭发声的频率。,例:对B口的PB1和PB0同时置位
6、复位(产生方波)mov dx, 301h ;Port B 端口地址为301h lp:in al, dxor al, 03hout dx, al ;PB1PB0=11call delayand al, 0fchout dx, al ;PB1PB0=00call delayjmp lp,关于两个命令的讨论,方式命令是对8255A的3个端口的工作方式及功能进行指定,即进行初始化,初始工作要在使用8255A之前做。也就是说,凡是用到8255A,就一定要先初始化按位置位复位命令只是对PC口的输出进行控制,使用它并不破坏已经建立的3种工作方式,而是对它们实现动态控制的一种支持。它可放在初始化程序以后的任何
7、地方。,两个命令的最高位(D7)都分配作了特征位,之所以要设置特征位,是为了识别两个不同的命令。在命令代码中设置特征位(标志位)是解决多个命令写入同一个命令口时如何进行识别而经常采用的方法之一。由于8255A两个命令的特征位不同。D7=1时,为工作方式命令;D70时,为按位置位/复位命令。,按位置位复位的命令代码只能写入命令口。 这个问题经常有人弄错。因为表面看起来,按位置位复位命令是对C口进行操作,所以,也就认为可以把按位置位/复位的命令代码写到C口(数据口)。这是错误的想法,因为按位置位/复位是一个命令,它就要按命令的定义格式来处理每一位,如果把它写入C口,就会按C口的数据定义格式来处理。
8、这两种定义完全不同的格式是不能互换的,所以,它只能写到命令口,按命令定义来处理。,A口和B口另一个有趣的使用方法,A口、B口也可以按位输出高/低电平,但是,它与前面的按位置位复位命令有本质的差别,并且实现的方法也不同。C口按位输出是以命令的形式送到命令寄存器去执行的,而A口、B口的按位输出是以送数据到A口、B口来实现的。,A口、B口按位输出高/低电平,其具体作法是:若要使某一位置高电平,则先对端口进行读操作,将读入的原输出值,“或”上一个字节,字节中使该位为l、其他位为0,然后再送到同一端口,即可使该位置位。若要使某一位置低电平,则先读入1个字节,再将它“与”上一个字节,字节中使该位为0,其他
9、位为1,然后再送到同一端口,即可实现对该位的复位而不影响其他位的状况。当然,能够这样作的条件是8255A的输出有锁存能力,若定义数据口为输出而对其执行IN指令时,所读到的内容就是上次输出时锁存的数据,而不是读入外设送来的数据。,例5:若要使PA7位输出高低电平,则用下列程序段:使PA7输出高电平MOV DX,300;PA数据口地址IN AL, DX;读入A口原输出内容MOV AH, AL; 保存原输出内容OR AL,80H ;使PA7=1OUT DX, AL ;输出PA7MOV AL,AH;恢复原输出内容OUT DX,AL,使PA7输出低电平MOV DX,300; A口地址IN AL,DX ;
10、读入端口原输出值。MOV AH,AL ;保存原输出位AND AL,7FH ;使PA7=0 OUT DX, AL;输出PA7MOV AL,AH;恢复原输出值OUT DX,AL用这种方法不仅可实现使单独一位输出高低电平,还可以使几位同时输出高/低电平。,例6:使B口的PB1和PB0同时置位复位,其程序如下:MOV DX,301H;PB数据口地址IN AL,DX: 读入原输出值MOV AH, AL;保存原输出值OR AL,03H;使PB1 PB011OUT DX,AL ;同时输出PB1PB0AND AL,OFCH ;使PB1PB0=00OUT DX,AL ;同时输出PB1PB0,1、 方式0及其应用
11、,0方式特点,0方式是一种基本输入/输出工作方式。通常不用联络信号,或不使用固定的联络信号,因此,所谓基本I/O方式是指查询方式传送,也包括无条件传送。这种方式不能采用中断方式和CPU交换数据。输出锁存,输入有三态缓冲能力而无锁存功能。,在0方式下,彼此独立的两个8位和两个4位并行口,共24根IO线全部由用户支配,都能被指定作为输入或者作为输出用,共有16种不同的使用组态。要特别强调的是,在0方式下,只能把C口的高4位为一组或低4位为一组同时输入或输出,不能再把4位中一部分作输入另一部分作输出,即4位一起行动。,在0方式下不设置专用联络信号线,需要联络时,可由用户任意指定C口中的哪根线完成某种
12、联络功能,这与后面要讨论的在1方式、2方式下设置固定的专用联络信号线不同。由于无固定的专用联络信号,因此也就在端口与IO设备之间无固定的时序关系,由用户根据数据传送的要求决定输入输出的操作过程。0方式也没有设置固定的状态字。,是单向I/O,一次初始化只能指定端口(PA、PB和PC)作输入或作输出,不能指定端口同时既作输入又作输出。 端口的输入、输出配置有16种使用组合A口:8位,输入,输出B口:8位,输入,输出C口:低4位,输入,输出C口:高4位,输入,输出,打印机接口设计1 用8255A构成的打印机接口,CPU用查询方式将缓冲区中的字符送去打印。打印机接口数据传送时序如下:,设定A口为输出,
13、C口用作握手信号,PC7为输出,PC2为输入。根据被控对象的要求,这里使用了一对联络信号线,即STB和BUSY,并选定8255A的PC7和PC2两个引脚分别作这两个联络线使用。但是,并不是非选PC7和PC2不可,而是完全可以选C口的其他引脚来做联络线使用,即联络信号线不是固定的,这是0方式的特点。,程序流图,汇编程序,mov dx, 303h mov al, 10000001b out dx, al mov al, 00001111b out dx, al ;PC7=1 mov si, offset buf mov cx, 0ffh ;打印字符数 lp: dec dx in al, dx an
14、d al, 04h jnz lp; 等待busy信号 mov dx, 300h,mov al, si out dx, al mov dx, 303h mov al, 00001110b out dx, al ;PC7=0 nop nop mov al, 00001111b out dx, al ;PC7=1 inc si dec cx jnz lp .,2、 方式1及其应用,8255A方式1(输入),方式1的特点,称为选通输入/输出方式 A口、B口用作数据传送口,可输入或输出 使用C口中的若干线作专用的握手信号 输出具有锁存功能,输入具有缓冲功能和锁存功能,方式1输入,STB (外部设备发来)
15、低电平将数据锁存在输入缓冲器(IN BUFFER) IBF输入缓冲器满 INTR (由8255A发给8259A)中断请求信号 INTE A或B (A口与B口内的中断允许控制位)中断请求允许位。INTEA对应PC4位,INTEB对应PC2位。即:对INTEA/B的置位、复位是通过对PC4/2的置位、复位来完成的。,8255A方式1输入时序,方式1输出,OBF输出缓冲器满,表示CPU已把数据写入8255A中。 ACK低电平通知8255已将数据从端口A或端口B取走 INTR中断请求信号 INTE A或B中断请求允许位。 INTEA对应PC6位,INTEB对应PC2位。即:对INTEA/B的置位、复位
16、是通过对PC6/2的置位、复位来完成的。,8255A方式1(输出),8255A输出时序,8255A方式1状态字 状态字是在8255A输入/输出过程中由内部产生,从C口读取的。,说明 在输入方式下,PC2、PC4的取值是由程序设定,与外部引脚STBB、STBA无关 在输出方式下,PC2、PC6的取值是由程序设定,与外部引脚ACKB、ACKA无关,举例:两台微机间通过8255并口传送1k字节数据,两CPU均采用查询方式。发送方工作在方式1,接收方工作在方式0。,3、 方式2及其应用,8255A方式2,方式2的特点,称为双向选通输入/输出方式 A口在某一时刻可输入数据,在另一时刻可输出数据 可采用中断方式或查询方式传送数据 此时,B口只能工作在方式1或方式0 使用C口中的若干线作专用的握手信号。是方式1下输入、输出的握手线的组合。 不同点是:当ACK为低电平时,才使端口A的三态输出缓冲器送出数据,8255A方式2时序,8255A方式2状态字,说明 输入、输出的先后顺序是任意的 输出过程一定是WR信号在前、ACK信号在后 输入过程一定是STB信号在前、RD信号在后,8255A应用,