1、微机原理与接口技术,作者:徐建平 成贵学,第8章微型计算机常用接口和接口芯片,计算机接口是实现计算机与外部设备之间信息交换的桥梁,在微机系统的设计和应用过程中起着极其重要的作用。本章从应用角度出发,首先介绍计算机接口的相关知识,然后重点讲述典型微型计算机接口芯片8255A、8251A和8253A的外部引脚、内部结构、工作方式及编程方式。,【本章内容提要】,了解计算机接口的功能和结构掌握并行接口技术和串行接口技术的相关知识,以及RS-232C串行接口标准掌握可编程并行接口芯片8255A的结构、工作方式和编程方式掌握可编程串行接口芯片8251A的结构和编程方式掌握可编程定时器/计数器接口芯片825
2、3A的结构、工作方式和编程方式,8.1 微型计算机接口概述,计算机接口是主机与外部设备的连接部件,是CPU与外部设备进行信息交换的桥梁。任何外部设备都必须通过接口电路与系统总线相连。,8.1.1 接口的功能与结构,接口的种类很多,有专门用于输入设备的输入接口,有专门用于连接输出设备的输出接口,也有用于连接通信设备的通信接口,等等,如图8-1所示。,1接口的功能,一般来说,接口都具有以下几方面的功能。,(1)数据缓冲功能,CPU的速度很高,而外设的速度相对较慢,为了解决CPU与外设速度不匹配的问题,接口中一般都设置数据寄存器或锁存器,将数据在输入/输出接口中缓存起来,从而起到缓冲、隔离和锁存的作
3、用,避免因速度不一致而丢失数据。,(2)设备选择功能,微机系统中一般连有多种外设,每种外设也可能有多台,而CPU在同一时间只能选择一个接口进行数据传送,因此,只有被选中的设备才能与CPU进行数据交换。,(3)信息转换功能,由于计算机直接处理的信号形式和数据格式等与外设使用的可能不相同,接口可以在它们之间进行相互转换。例如数字量与模拟量的转换、串行数据与并行数据格式的转换等。,(4)I/O端口寻址功能,外设的接口电路中可能包含有若干个可供CPU直接访问的寄存器或功能电路,称为端口,例如数据端口、状态端口等。每个端口都对应一个端口地址,只有被选中的端口才能与CPU进行信息交换。接口电路通过对端口地
4、址进行译码,从而找到相应的端口。,(5)与CPU和外设进行联络,CPU与外设进行数据传送时,接口电路:一方面接收和执行CPU送来的命令,实施对外设的控制和管理;另一方面将外设的状态信号或应答信号等工作状况反映给CPU。,(6)中断管理功能,在接口中可设置中断控制器,专门处理有关中断事务,使CPU与外设并行工作,以提高CPU的利用率。,(7)可编程功能,现在的接口芯片基本上都是可编程的,这样不需要改变硬件,只需修改相应的程序就可以改变接口的工作方式,大大增加了接口的灵活性和可扩充性。,2接口的结构,接口电路的内部通常是由数据寄存器、状态寄存器和控制寄存器构成的,如图8-2所示。,数据寄存器:可以
5、读出可以写入,用来存放CPU与外设之间进行交换的数据信息。状态寄存器:只能读出不能写入,用来存放外设当前的工作状态信息。控制寄存器:只能写入不能读出,用来存放CPU向外设发送的控制命令信息。,可编程接口概述 一个简单的具有输入功能和输出功能的可编程接口电路如下图:它包括一个输入接口,其组成主要是八位的三态门;一个输出接口,其组成主要是八位的锁存器;另外还有八位的多路转换开关及控制这个开关的寄存器FF。,8.1.2 并行接口技术,按照与外部设备之间数据传输形式的不同,接口可以分为并行接口和串行接口两类。并行接口中有多条数据线,并且数据线的长度必须相同,每次可同时在两个设备之间并行传输多位数据。并
6、行传输方式主要用于实现CPU与并行外设之间的近距离通信。计算机内的总线结构、并行打印机、LED显示器等都是采用并行传输方式。,并行接口一般具有以下几个特点:, 在并行接口中,数据通道的宽度就是传输的位数。微型计算机中最常见的数据通道的宽度为8位,当采用并行接口与外设交换数据时,8位数据是同时传输的,称为8位并行接口。例如打印机的接口有8条数据线,每次可同时传送一个字符的ASCII码。数据通道的宽度也可以为16位、32位或更高。, 并行接口中除了有数据通道以外,还应有握手联络信号,以实现接口和外设之间的联络。 并行数据的传送格式不固定。 并行通信的优点是传输速度快、处理简单;但是,当距离较远时,
7、成本会大大增加。,8.1.3 串行接口技术,计算机与外部信息交换方式有两种:一种是并行通信。并行通信时,数据各位同时传送。另一种是串行通信。串行通信时,数据和控制信息是一位接一位串行地传送下去。这样,虽然速度会慢一些,但传送距离比并行通信长,硬件电路也相应简单些。,1串行接口的特点,串行接口中一般只需要一条数据线,在串行通信传输时,数据一位一位按一定顺序进行传送,经过8个时间单位才能传送一个字节的数据。如果是双向串行接口,需要两条数据线,每个方向使用一条,如图8-4所示。,串行通信的硬件条件,在硬件上,串行通信系统的核心部件是移位寄存器在发端要有一个并入串出移位寄存器,在收端要有一个串入并出移
8、位寄存器。,在实际传送过程中,发送端按固定的时间间隔依次向数据线发送高低不同的电平,接收端按照与发送端相同的时间间隔识别出相应的数据信息,并通过相应的联络线以保证数据传输的可靠性。,串行通信的同步为了可靠的串行通信,同步信号起到至关重要的作用。在理想情况下,同步信号应该在数据信号线上出现有效数据期间的中心点有效,因为这时数据线上的数据是最稳定的。,但在典型的串行通信系统中,是不存在同步信号线的!如何实现串行通信的中数据传送的同步呢?系统从软件和硬件两方面采取了后面提到的措施:设置波特率、设置数据的传送格式、设置波特率因子。,串行通信的优点是通信线路简单,且只需一对数据线,可以是电话线,这样大大
9、降低了成本,特别适用于远距离通信。串行通信的抗干扰能力十分强。但是,串行通信的传送速度慢,若并行通信所需时间为T,则串行通信的时间至少为NT(其中N为位数)。,现在的台式PC机一般至少有两个RS232串行口COM1和COM2,通常COM1使用的是9针D形连接器,而COM2使用的是老式的DB25针连接器。,2数据传送速率,串行通信中反映数据传送速率主要有数据传输率和波特率两个指标。,(1)数据传输率,数据传输率是指单位时间内传输二进制代码的有效位数,其单位为bit/s或bps(位/秒)。数据传输率越高,要求传输通道的频带越宽。例如,在某串行通信中,每秒可以传送600个字符,每传送一个字符需要8位
10、,则数据传输率为: 600字符/秒8位/字符4800位/秒。,(2)波特率,波特率是指单位时间内信号电平变化的次数,它反映的是数据信号对载波的调制速率。常用的标准波特率为110、300、600、1200、1800、2400、4800、9600和19200。其中,如果数据未进行压缩,由于传送数据时除传送数据信息外,还需传送校验位等信息,故波特率要高于数据传输率;如果数据进行了压缩,则数据传输率要高于波特率。,3数据传送方式,串行通信中,数据通常是在两个设备之间进行传送,按照数据传送方式的不同而不同串行通信有单工、半双工和全双工三种传送方式。,(1)单工方式,仅使用一条数据线,数据只能沿一个固定的
11、方向传送,这种数据传送方式为单工方式,如图8-5(a)所示。例如计算机与打印机之间只能是计算机向打印机传送数据,故为单工传送方式。,(2)半双工方式,可以使用一条或两条数据线,通信双方既可发送数据又可接收数据,但不能同时收发数据,这种数据传送方式为半双工方式,如图8-5(b)所示。在这种方式下,同一时刻只能由一方发送数据,另一方接收数据,并通过收/发开关进行方向转换。,(3)全双工方式,通信双方在同一时刻既可以发送数据又可以接收数据,使用两条数据线进行传输,这种数据传送方式为全双工方式,如图8-5(c)所示。在这种方式下,无需转换方向,数据能同时在两个方向上进行传送。,4通信控制方式,按照收发
12、双方同步的方式,串行通信可分为异步通信和同步通信两类。,(1)异步通信,异步通信是指,数据以字符为单位按照约定的波特率进行传送,通信双方不需要专门的同步信号,分别用各自的时钟信号来控制发送和接收。,异步通信中数据的格式如图8-6所示,包括以下4个部分:起始位:字符开始的标志,占用一位,发送端开始传送数据时,在要发送的字符前加上低电平。数据位:位数可以是58位,字符编码为7位。奇偶校验位:用来校验所传送数据的正确性。如果是奇校验传输,使数据位和校验位中1的个数为奇数个;如果是偶校验传输,使数据位和校验位中1的个数为偶数个。停止位:字符结束的标志,位数可以是1位、1.5位或2位,发送端在要发送的字
13、符后加上高电平。,这四部分将构成一个数据帧,它被作为异步通信传送数据时的基本单位。每一个字符以起始位和停止位作为字符开始和结束的标志。传送时,各个字符可以连续传送,也可以随机传送。在一个字符的停止位之后,立即发送下一个字符的起始位,开始一个新字符的传输,称为连续的串行数据传送;一个字符的停止位之后维持数据线的空闲状态,称为断续的串行数据传送。,波特率因子在异步通信方式进行通信时,发送端需要用时钟来决定每1位对应的时间长度,接收端也需要用一个时钟来测定每1位的时间长度前一个时钟叫发送时钟,后一个时钟叫接收时钟。这两个时钟的频率可以是波特率的数倍,一般取16倍、32倍或64倍。这个倍数就称为波特率
14、因子。,(2)同步通信,在同步通信方式中,去掉异步通信时每个字符的起始位和停止位,在数据块之前加上同步字符,如下图所示。这样,在发送数据信号的同时发送一个时钟信号,使发送端和接收端在约定的波特率下保持同步。,5误码率和差错控制,在进行远距离通信时,由于线路本身特性的影响导致的随机噪声、信号衰减或畸变以及各种外界因素,都会造成信号在传输过程中失真,即接收端接收到的二进制数与发送端实际发送的二进制数不一致。,在数据通信过程中,一般用误码率(Pe)来衡量信道数据传输的质量。所谓误码率是指,二进制数据在传输过程中出现差错的概率,计算公式为: Pe发生差错的位数传输的总位数,串行接口的基本结构主要是异步
15、接收/发送器(UART)它不仅包括并行数据和串行数据之间的相互转换,还有检测串行通信在传送过程中可能发生错误的逻辑部件。,6、异步接收/发送器(UART),TBE为发送数据缓冲寄存器空标志位,由于模拟信号的传输比数字信号传输更为有效,因而可将数字信号调制成模拟信号进行传输;接收时用解调器把接收的模拟信号再转换成数字信号。,7、信号的调制和解调,8.1.4 RS-232C串行接口标准,RS(Recommended Standard)-232C是目前最常用的一种串行接口标准,由美国电子工业协会EIA和国际电报电话咨询委员会CCITT联合制定。RS-232C中的信号电平与通常并行接口中使用的TTL电
16、平是不同的:规定5V15V为逻辑“1”,5V15V为逻辑“0”。,设有一个微机化仪器,其内部的8086 CPU要通过8255A实现与PC的串行通信。设数据的传输格式为1个起始位,8个数据位,1个停止位。要求传送波特率为1200,8255A的地址分布为88H8EH,C口的第0位作为发送数据线TxD,C口的第4位线作为接收数据线RxD。,【例子】,每一位所占用的时间。 Td= ls/1200 = 1000ms /1200 = 0.833ms 假设程序库中己有两个重要的延时程序:一个是delay1,其功能是延时0.833ms;另一个是delay2,其功能是延时0.417ms,即大约为delay 1延
17、时时间的一半。 相应软件分3个程序段: 8255A的初始化,串行发送程序段和串行接收程序段。,8255A初始化-根据上述要求,C口的低4位为输出,高4位为输入。A口、B口未用,设为方式0的输入方式。 8255INIT PROC FAR;8255初始化程序段MOV AL, 10011010B;8255A方式控制字 OUT 8EH, AL MOV AL, 00000001B OUT 8EH, ALRET 8255INIT ENDP,送数据程序段-其功能是把DL中的数据按照传输的格式发送出去。具体过程如下: (1)发送起始位; (2)通过寄存器DL右移发送数据位,过程如下:令i=0。 发送DL中的第
18、i位。 i+1i。 重复上两步8次。(3)发送停止位。 (4)结束。,SIO_SEND PROC FAR;把DL中的数据通过PC0发送 PUSH AX ;保护现场 PUSH CX PUSH DX PUSHF CALL SEND0 ;送起始位(发送数据0) MOV CX,8;循环送8位 SIO_SEND3:SHR DL,1;第i位进CF标志 JC SIO_SEND1;判断第i位是否为1 CALL SEND0 ;第i位为0,则发送数据0 JMP SIO_SEND2 SIO_SENDl: CALL SEND1;第i位为1则发送数据1SIO_SEND2: LOOP SIO_SEND3 ;循环8次,CA
19、LL SEND1;送停止位(发送数据1)POPF ;恢复现场 POP DX POP CX POP AX RET ;返回SIO_SEND ENDP,SEND0 PROC FAR MOV AL,00000000B ;发送数据0 OUT 8EH,AL ;复位PC0, PC0=0CALL DELAY1 ;延时0.833MS RET ;返回SEND0 ENDP SEND1 PROC FAR ;发送数据1 MOV AL,00000001B ;置位PC0,PC0=1 OUT 8EH,ALCALL DELAY1 RET SEND1 ENDP,接收数据程序段 其功能是把接收的数据存入寄存器DL中。这段程序比发送
20、程序要稍微复杂些,它包括检测发送端是否有数据发送过来以及如何实现在数据有效期间的中点对接收信号线进行采样。,具体算法如下: (1)检测RxD线上是否是低电平:否,则重复本步骤;是,则执行下一步。 (2)延时0.417ms对数据再采样,检测是否是低电平:否,则重复上一步;是,则认为是起始位,执行下一步。 (3)通过寄存器DL移位采集数据。 (4)判断最后1位是否是停止位(即逻辑1 )。若是,表示正确接收数据,置CF有效。 注意,步骤(1)、(2)的功能就是启动一次接收数据过程,同时使CPU在数据位的中心点进行采样。,;如果正确接收,CF=1,数据放在DL中 SIO_REV PROC FAR PU
21、SH AX PUSH CX PUSH DX SIO_REV1: IN AL,8CH TEST AL,00010000BJNZ SIO_REV1 CALL DELAY2;延时0.417毫秒 IN AL,8CH;在数据中心点再取样 TEST AL,00010000B ;再一次确认是否是起始位 JNZ SIO_REV1;不是起始位,转移 MOV CX,8;置循环次数,开始采集8位数据 SIO_REV2: CALL DELAY1;延时0.833毫秒 IN AL,8CH;采样TEST AL,00010000B ;判断数据位是否是0,CLC ;CF清0 JZ SIO_REV3;数据位为0,CF=0STC
22、;数据位为1, CF=1 SIO_REV3: RCR DL,1;把CF右移到寄存器DL LOOP SIO_REV2;重复采集8次 CALL DELAY1;延时0.833毫秒 IN AL,8CH;取停止数据位 TEST AL,00010000B CLC JZ SIO_REV4 ;数据位为0,CF=0,数据不正确STC ;数据位为1,CF=1,数据正确SIO_REV4: POP DX;恢复现场 POP CX POP AX RET ;返回SIO_REV ENDP,8.2 可编程并行接口芯片8255A,8255A是Intel公司生产的一种高性能可编程输入/输出并行接口芯片,可以通过编程的方法来设定各种
23、功能。由于它通用性强,使用灵活,可以方便地连接在Intel系列的微处理器系统中,所以应用较为普遍。,8.2.1 8255A的引脚及功能,8255A是40引脚的双列直插式芯片,其引脚如图8-10所示。下面分别介绍各个引脚的功能。,D7D0:三态、双向数据线,与CPU数据总线相连,用于传送数据。CS:片选信号,由CPU输入,低电平有效。该信号有效时,表示8255A被选中,允许与CPU交换信息。RD:读信号,输入,用于控制数据流的读出,低电平有效。该信号有效时,表示允许CPU从8255A端口中读取数据或状态信息。WR:写信号,输入,用于控制数据的写入。该信号有效时,表示允许CPU向8255A中写入数
24、据。,A1和A0:端口选择信号,输入信号。8255A有3个独立的8位并行I/O端口A、B、C和一个控制寄存器,具有数据控制和锁存功能,利用该信号可以寻址各端口,如下表所示。,RESET:复位信号,输入信号,高电平有效。当该信号有效时,8255A复位,所有控制寄存器内容被清零,所有端口被置为输入方式。PA7PA0:端口A的输入/输出信号。PB7PB0:端口B的输入/输出信号。PC7PC0:端口C的输入/输出信号。,8.2.2 8255A的内部结构,8255A的内部结构如图8-11所示,它由以下四部分组成:,输入/输出端口:3个8位的并行端口A、B、C,其中,端口A和端口B分别有一个8位数据输出锁
25、存/缓冲器和一个8位数据输入锁存器,端口C有一个8位数据输出锁存/缓冲器和一个8位数据输入缓冲器。端口C被分成高4位和低4位,可作为基本输入/输出端口、状态或控制信息传送端口,分别与端口A和端口B配合工作,控制寄存器:包括A组控制电路和B组控制电路,用于控制接收来自CPU的控制命令,控制端口A、B、C的工作方式。其中,A组控制电路用来控制端口A和端口C的高4位(PC7PC4),B组控制电路用来控制端口B和端口C的低4位(PC3PC0)。,数据总线缓冲器:三态、双向、8位寄存器,用于与系统数据总线相连是8255A与CPU进行信息传送的通道,可用来传送数据、控制命令和状态信息。,读/写控制逻辑:包
26、括读出信号RD、写入信号WR、片选信号CS和端口选择信号A1、A0用于控制8255A内部寄存器的读/写操作,如表8-4所示。,+,8.2.3 8255A的工作方式,1方式0,方式0是8255A的基本输入/输出方式,其特点是无需设置联络信号,8255A就可以直接与外设进行简单的无条件数据传送。方式0适用于无条件数据传送或查询式数据传送。在这种方式下,3个端口都可以设置为输入/输出端口,但不能同时既作为输入又作为输出。其中,端口A和B为8位端口,输入、输出均有锁存能力;端口C可分为两个4位端口(高4位和低4位),仅对输出有锁存能力。,例1:8255A工作在方式0,8255A的A口和B口工作在方式0
27、,A口为输入端口,接有四个开关。B口为输出端,接有一个七段发光二极管,连接电路如图所示。试编一程序要求七段发光二班管显示开关所拨通的数字。,电路,LED数码管,段码表,mov al,90h;设置8255方式字mov dx,ctrl_portout dx , almov dx,a_portin al,dx;取键盘信息and al,0fh;屏蔽高4位mov bx,offset tab1;取段码表首地址xlat;查表得段码mov dx,b_port;输出显示out dx,almov cx, 0600hadd2:loop add2,2方式1,方式1是一种选通式输入/输出工作方式,其特点是与外设传送数据
28、时,需要设置联络信号。在这种方式下,端口C的部分位用作选通控制信号,控制端口A和B的数据输入输出。,8255A在方式1时的输入信号,A口的选通信号,当其有效时,外设把数据打入A口的输入缓冲器,A口的输入缓冲器“满”信号,当其有效时表示A口的输入缓冲器已暂存一个有效数据。,A口的中断请求信号。当其有效时,8255A的A口向CPU申请中断,要求CPU从A口取数,中断允许信号。,方式1的输入状态字 STB (Strobe 选通,闸门);IBF (Input Buffer Full); INTR (Interrupt Request); INTE (Interrupt Enable);,STB:选通信
29、号,由外设输入,低电平有效。当该信号有效时,将外设输入的数据锁存到端口A或B的输入锁存器中。对于端口A来说,由端口C的PC4来接收STB信号;对于端口B来说,由端口C的PC2来接收STB信号。,IBF:输入缓冲器满信号,向外设输出,是对STB的响应信号,高电平有效。当该信号有效时,表示由外设输入的数据已送到该端口的输入锁存器中。,INTR:中断请求信号,向CPU输出,用于请求以中断方式传送数据,高电平有效。,INTE:中断允许信号。由于INTE没有外部引出端,但可通过软件对C口置1或清0实现对中断的控制。若PC41,则端口A的中断允许信号INTE1;若PC40,则端口A的INTE0。如果PC2
30、1,则端口B的中断允许信号INTE1;若PC20,则端口B的INTE0。当INTE为1时,表示允许中断;为0时,表示禁止中断。,例2:8255A的A口和B口分别工作在方式1和方式0;A口为输入端口,接有8个开关;B口为输出端,接有8个发光二极管;连接电路如图所示。现要求用方式1把改变后的键信息输入到CPU并通过B口显示。,例题2电路图,这个系统的工作过程如下:1、用户通过改变K0K7,产生新的键信息;2、按下开关K,产生选通信号,数据进入A口的缓冲器。此步骤实际上告诉CPU,8255的A口来了一个新数据;3、IBFA有效使LED点亮。这里含有两个信息:一个是8255A通知CPU其A口来了一个新
31、数据;另一个是告诉用户CPU尚未取走这个数据,用户不得再送其他数据;4、CPU取走这个数据,LED熄灭;5、转步骤1。,设8255的I/O地址分布为88H8EH,相应的程序段如下:mov al,10111001b;设置A口为方式1的输入,Out 8eh,alloop1:in al,8ch;取C口的状态线test al, 00100000b;测试IBFA信息,即PC5jz loop1;等待用户设定新的键值,PC5=0转loop1mov cx,0ffffh;延时,LED灯亮(相对于步骤3)loop2:loop loop2in al,88h;取数。LED灯灭(相对于步骤4)out 8Ah,al;更新
32、B口的显示jmp loop1;重复,8255A在方式1时的输出信号,外设回答信号。由外设发出。当其有效时,表示外设已接收数据。,A口的输出缓冲器“满”信号,当其有效时表示A口的输出缓冲器已暂存一个有效数据。,A口的中断请求信号。当其有效时,8255A的A口向CPU申请中断,要求CPU送数给A口,中断允许信号。,OBF:输出缓冲器满信号,向外设输出,低电平有效。此信号有效时,表示CPU已将数据写入数据端口。PC7用作从端口A输出的OBF信号;PC1用作从端口B输出的OBF信号。,ACK:应答信号,由外设输入,是对OBF的响应信号,低电平有效。此信号有效时,表示外设已接收到由8255A输出的数据。
33、,INTR:中断请求信号,输出信号,用于请求以中断方式传送数据,高电平有效。,INTE:中断允许信号。这里也是通过软件操作改变C口的值来设置INTE。具体来讲,若PC61,则端口A的中断允许信号INTE1;若PC60,则端口A的INTE0。如果PC21,则端口B的中断允许信号INTE1;若PC20,则端口B的INTE0。当INTE为1时,表示允许中断;为0时,表示禁止中断。,例3:8255A的A口工作在方式1的输出,接有8个发光二极管现要求把内存中的10个数,通过A口发送给发光二极管以二进制的形式供用户抄录。,例题3电路图,这个系统的工作过程如下:,1、CPU把内存中的一个数据写入A口;2、L
34、ED灯亮,告诉用户LED显示的是新数据;3、用户抄录数据;4、用户按下开关K,发ACK信号,告诉CPU数据已取走;5、转第一步。,mov cx, 10;送10个数mov bx, offset xx;数组指针送bxMOV AL, 10101001BOUT 8EH, ALloop1: mov al, bx;取数out 88h, al;送数到A口loop2:in al, 8ch;取C口状态线and al, 80h;测试OBFA,即PC7jz loop2 ;即OBFA=0时转loop2;用户尚未抄录数据,检测;等待,;此时LED灯亮(对应步骤2)call delay ;用户已抄录数据,LED灯灭(对应
35、步 骤4)inc bx;准备送下一个数 loop loop1;循环10次,3方式2,方式2是一种双向输入/输出工作方式,即同一端口的信号线既可以输入又可以输出。8255A只允许端口A工作于方式2下,此时端口A作为双向数据端口,既可以发送数据又可以接收数据。,外设回答信号。由外设发出。当其有效时,表示外设已接收数据。,A口的输出缓冲器“满”信号,当其有效时表示A口的输出缓冲器已暂存一个有效数据。,A口的中断请求信号。当其有效时,8255A的A口向CPU申请中断,要求CPU访问A口,中断允许信号。,中断允许信号。,A口的输入缓冲器“满”信号,当其有效时表示A口的输入缓冲器已暂存一个有效数据,A口的
36、选通信号,当其有效时,外设把数据打入A口的输入缓冲器,8.2.4 8255A的编程方式,在初始化编程时,8255A的A、B、C三个端口的工作方式可以通过向控制端口写入控制字和状态字来设定的。其中,控制字用于设置三个端口的工作方式,状态字用于对端口C进行位操作。,1控制字的格式,8255A的控制字的格式如图8-21所示。,2状态字的格式,8255A的状态字的格式如图8-22所示。,【例8-1】,编写8255A的初始化程序:设8255A的端口地址为FF80HFF83H,其中端口A工作于方式0,输出数据;端口B工作于方式1,输入数据;端口C中的PC0设置为高电平输出,PC5设置为低电平输出。,初始化
37、程序如下:,MOV DX, 0FF83H ;控制寄存器端口地址为FF83HMOV AL, 10000110B ;设置端口A和端口B的工作方式OUT DX, AL ;将控制字写入控制端口MOV AL, 00000001B;PC0设置为高电平输出OUT DX, AL ;将控制字写入控制端口MOV AL, 00001010B;PC5设置为低电平输出OUT DX, AL ;将控制字写入控制端口,实训8-1 并行打印机接口设计,将8255A的A口连接到一个并行打印机工作在方式1,数据输出采用查询方式设8255A的端口地址为300H303H将内存输出缓冲区BUFFER中的100H个字节数据送打印机输出,D
38、SEG SEGMENT BUFFER DB 100H DUP(?)DSEG ENDSCSEG SEGMENT ASSUM CS: CSEG, DS: DSEGSTART: MOV AX, DATA MOV DS, AX,MOV AL,0A8H;端口A工作于方式1,输出,PC4输入MOV DX,303H;将控制端口地址送入DXOUT DX,AL ;将控制字写入控制端口MOV CX,100H;将传送字节数送入CX MOV SI,OFFSET BUFFER;将数据缓冲区首地址送入SI,LOP:MOV DX, 302H;将端口C地址送入DX IN AL, DX;读端口C,查询BUSY信号 AND AL
39、, 10H;保留PC4状态,判断BUSY=1? JNZ LOP;若BUSY=1,则打印机处于忙状态 MOV AL, SI;若BUSY=0,则打印机空闲,可以输出数据 MOV DX, 300H;将端口A地址送入DX OUT DX, AL;输出数据 INC SI ;修改数据缓冲区地址 LOOP LOP;若数据未传送完毕,继续传送,常用的显示称为动态显示,它采用扫描显示技术,可以使硬件开销降低很多。对于一个8位数据显示,它就需要两个输出端口就可以了。其电路如图所示。在两个输出端口中,一个称为段信号通道,它用来输出要显示数据的段码;另一个称为位信号通道,用来决定当前要显示数据的位置。,2、人机交互接口
40、动态显示,动态显示电路图,显示系统的具体工作步骤如下:,a、设要显示的初始位码i0;b、送第i位的段信号;c、送第i位的位信号;d、延时;e、i1if、如果i小于8,转bg、8位数据显示结束。,程序如下:a_port equ 80h;定义8255A的四个端口b_port equ 82hc_port equ 84hctrl_port equ 86hdatasegment ;定义数据段 tab1db 3FH,06H,5BH,4FH, ;定义段码表 dispbuff db 2,0,1,0,0,5,1,8 ; 定义显示缓冲区dataends code segmentmov al, 10000001b
41、out ctrl_port, alloop1: call display jmp loop1,DISPLAY PROC MOV BX, OFFSET TAB1MOV SI, OFFSET DISBUFF+7MOV CX, 8MOV AH, 01DISP1: MOV AL, SIXLATOUT A_PORT, AL MOV AL, AHOUT B_PORT, ALCALL DELAY5MSSHL AH, 1DEC SILOOP DISP1 RETDISPLAY END,如下图所示为矩阵式键盘电路,其特点是由按键组成一个矩阵矩阵的行线和列线分别作为两个传输方向相反的I/O接口信号线,比如行线作为输
42、入接口信号线,列线作为输出接口信号线,或反之。,3、人机交互接口键盘扫描,键盘扫描电路图,如果这个矩阵很大呢?,在翻转法中,行列线交换输入、输出,两步就可获取键位置信息。可见这种方法要比扫描法效率高。,翻转法程序流程如下: (1)设定行为输出,列为输入。 (2)行输出为0,输入列信号j。 (3)检查列信号是否全为1,若是,无键按下,转步骤(2) ;如果不全为1,表明有键按下,执行下步。 (4)延时10ms,消除抖动。 (5)逐列检测,找出为0的列信号j。(6)设定列为输出,行为输入。 (7)列输出为0,输入行信号i。 (8)检查行信号是否全为1,若是,表明按键有错,转错误处理;如果不全为1,表
43、明有键按下,执行下步。 (9)逐行检测,找出为0的行信号i。(10)用下式计算键号key _num=4i + j,基于翻转法的键盘输入信息的程序段如下: ;定义8255A的4个端口地址 MOV AL,10001000B OUT CTRL_PORT, AL MOV AL,0OUT C_PORT,AL NO_KEY: IN AL,C_PORT AND AL,0F0H CMP AL,0F0H JZ NO_KEY CALL DELAY10MS,IN AL, C_PORT SHR AL,1 ;把列信号信息移到低4位 SHR AL,1 SHR AL,1 SHR AL,1 MOV DL,0 ;置初始列变量D
44、L为0 MOV CX,4 LOOP1: SHR AL,1 ;该循环为步骤(5) JNC LOOP2 ; CF=0转loop2INC DL LOOP LOOP1,LOOP2: MOV AL, 10000001B ;步骤(6) OUT CTRL_PORT, AL MOV AL, 0 ;步骤(7) OUT C_PORT,AL IN AL,C_PORT AND AL,0FH CMP AL, 0FH ;步骤(8) JZ ERROR ;键盘有错,转错误处理程序 MOV DH,0 ;置初始行变量DH为0 MOV CX,4 LOOP3: SHR AL,1 ;该循环为步骤(9) JNC LOOP4 INC DH
45、 LOOP LOOP3 LOOP4: SHL DH, 1 ;步骤CIO) SHL DH, 1 ADD DH,DL ;DH为键号,8.3 可编程串行接口芯片8251A,8251A是一种可编程的通用串行通信接口芯片,用于CPU与外部设备之间进行串行通信。它具有双缓冲结构的发送器和接收器,可通过编程选择同步方式或异步方式传送,具有奇偶、溢出和帧错误等检测电路。,在同步方式下,传送字符可定义为58位,波特率可选择为064kb/s,可自动检测同步字符,从而实现同步;在异步方式下,传送字符可定义为58位波特率可选择为019.2kb/s,时钟频率为通信波特率的1倍、16倍或64倍,可自动产生起始位和停止位。,8.3.1 8251A的引脚及功能,8251A的引脚信号线包括两类,分别是与CPU接口的信号线和与外设或调制解调器接口的信号线,如图8-25所示,各引脚的功能如下。,D7D0:8位三态、双向数据线,与系统数据总线相连,用于传送数据、控制信息和状态信息。RD:读信号,低电平有效。该信号有效时,CPU从8251A读取数据或状态信息。WR:写信号,低电平有效。该信号有效时,CPU向8251A写入数据或控制信息。CS:片选信号,低电平有效。该信号有效时,表示8251A芯片被选中,通常由CPU的地址信号经译码后得到。,