微机系统的信息交换有并行通信和串行通信两种方式。并行通信是以微机的字长为传输单位;适合于外部设备与微机之间进行近距离、大量和快速的信息交换。7.1并行通信与串行通信串行通信是一位一位通过同一信号线进行数据传送;适合于远距离、慢速数据传送。21.并行通信(1)•两个设备之间有多个数据位同时传输–以字节或字校验┇接收方发送方3并行通信(2)•并行方式主要用于近距离通信。–如计算机内的总线结构•特点:–传输速度快,处理简单;–适合近距离传送;–所传送信息无固定格式要求。42.串行通信(1)•数据一位一位通过同一通信线进行传输。–先由发送设备将几位并行数据经并--串转换硬件转换成串行方式,再逐位传输到接收设备,并在接收端将数据从串行方式重新转换成并行方式。┇接收方发送方7651021765430┇5串行通信(2)——几个概念•数据传送方式–双工,半双工,单工•通信方式–同步通信•通信时,发送方和接收方的时钟频率和相位保持一致。每两个字符间的时间间隔固定。–异步通信•每两个字符间的时间间隔不固定。•数据校验异步通信方式简单,成本低,但效率较同步方式低8255A是Intel86系列微处理机的配套并行接口芯片,它可为86系列CPU与外部设备之间提供并行输入/输出通道。实现并行通信的接口称之为并行接口。7.3可编程并行接口芯片8255A并行输入/输出端口A、B、C:8255A芯片具有24个可编程输入输出引脚,分成3个8位端口。7.3.18255A的基本功能和内部结构一、8255A的内部结构和引脚信号1.8255A内部结构A组控制部件数据总线缓冲器读/写控制部件B组控制部件RESETRDA0A1A组端口A8位A组A组端口C(高4位)B组端口C(低4位)8位B组端口BPA7~PA0PC7~PC4PC3~PC0PB7~PB0双向D7~D0WRCS图7.18255A内部结构8255A包括四大部分:数据总线缓冲器、读写控制部件、A组和B组控制部件、端口A、B、C。(1)并行输入/输出端口A、B、C端口A和B:输入/输出都具有数据锁存能力。端口C:输出数据能锁存,输入数据不能锁存。端口C:可分成两个4位端口,分别定义为输入或输出端口,还可作为控制、状态端口,配合端口A和端口B工作。(2)A组和B组控制部件A组A口:PA0~PA7C口的高4位:PC4~PC7B组B口:PB0~PB7C口的低4位:PC0~PC3A组、B组的控制寄存器,接收来自数据总线的控制字,确定各端口的工作状态和工作方式。(3)数据总线缓冲器三态双向8位缓冲器,是8255A与CPU之间的数据接口。传送输入数据、输出数据、控制命令字。(4)读/写控制部件接收来自CPU地址总线信号和控制信号,并发出命令到两个控制组(A组和B组)。CS:片选信号,接CPU高位地址的译码输出WR:写信号,WR有效,CPU向8255A写入控制字或数据信息。RD:读信号,RD有效,CPU读8255A的数据或状态;RESET:复位信号。RESET有效时,8255A内所有寄存器内容清0,将各端口设为输入状态。A1~A0:端口选择信号当A1A0=00时选择端口A当A1A0=01时选择端口B当A1A0=10时选择端口C当A1A0=11时选择控制端口2.8255A的引脚8255A采用40线双列直插封装,引脚图如图所示。图7.28255A引脚定义432140371834......27D7D0A0A1CSRDRESETVCCGND986535368255APPI数据总线控制线电源线通道A通道B通道CCPU接口外设接口...PA7PA0...PB7PB0...PC7PC0WR251415161713121110表7.18255A的读写操作控制8255A有两个控制字:即工作方式控制字和对C口置位/复位控制字。1.控制字(1)工作方式控制字:控制字和各位的含义如图所示。7.3.28255A的控制字及其工作方式D7D6D5D4D3D2D1D0B组端口C(PC3~PC0)1=输入,0=输出端口B1=输入,0=输出方式选择0=方式0,1=方式1A组端口C(PC7~PC4)1=输入,0=输出端口A1=输入,0=输出方式选择00=端口A方式0,01=端口A方式1,1=端口A方式2方式设置标志1=有效图7.38255A工作方式控制字格式(2)端口C的置位/复位控制字控制字的格式如图所示。图7.48255A置位/复位控制字格式D7D6D5D4D3D2D1D0位的置位/复位1=置位,0=复位位选择D3D2D1通道C位按位置位/复位控制标志0=有效000PC0001PC1010PC2011PC3100PC4101PC5110PC6111PC7不使用设置为000关于控制字要说明几点:(1)设置方式控制字时,A口、B口作为整体设置,而C口要分成上、下两部分分别设置。三个端口的工作方式由一个控制字规定。(2)C口按位置位/复位控制字不是送到C口地址,而是送到控制寄存器地址;且一个控制字只能使C口一位置位或复位。(3)方式控制字和按位置位/复位控制字均写入同一个控制寄存器地址,二者通过最高位D7来区别。D7=1为方式控制字,D7=0为按位置位/复位控制字。(1)方式0——基本输入/输出方式方式0中,24条I/O线可以全部用作传送数据,不设置应答信号线,常用于无条件传送,输出有锁存,输入只有缓冲能力而无锁存功能。方式0控制字具体格式如图7.5所示2.工作方式图7.58255A工作方式0控制字格式控制字中D4D3D1D0这4位的不同取值对应方式0的16种不同的工作状态,如表7.2所示。方式0中,端口C的两个4位端口可分别定义为输入或输出端口。CPU与3个端口之间通过IN和OUT指令交换数据。表7.2方式0的工作状态组合序号控制字D7,…,D0A组B组端口A端口C高4位(PC7~PC4)端口B端口C低4位(PC3~PC0)110000000输出输出输出输出210000001输出输出输出输入310000010输出输出输入输出410000011输出输出输入输入510001000输出输入输出输出610001001输出输入输出输入710001010输出输入输入输出810001011输出输入输入输入910010000输入输出输出输出1010010001输入输出输出输入1110010010输入输出输入输出1210010011输入输出输入输入1310011000输入输入输出输出1410011001输入输入输出输入1510011010输入输入输入输出1610011011输入输入输入输入(2)工作方式1——选通式输入/输出方式①方式1选通输入方式1操作使端口A或端口B作为锁存输入设备工作。端口C提供选通控制信号,或当端口A/B为选通输入端口时的握手信号。下图示出8255A方式1选通输入时的控制字和内部结构图。图7.6工作方式1输入控制字格式(a)端口A方式1输入(b)端口B方式1输入图7.7方式1输入端口状态IBF:输入缓冲器满信号,向外设输出,高电平有效。STB:选通信号。由外设输入,低电平有效。INTR:中断请求信号,高电平有效。INTE:中断允许信号,它是通过端口PC4(端口A)或PC2(端口B)的位来编程的内部位。②方式1选通输出当端口A或端口B为方式1输出时,各指定PC的3条线作为8255A与外设及CPU之间应答信号。下图为方式1选通输出操作的控制字和内部结构图。图7.8方式1输出控制字格式图7.9方式1输出端口状态INTRAPC3PC6PC7PA7~0方式1输出端口AAOBFPC4,5I/OINTEA2AACKWR方式1输出端口BINTRBPC0PC2PC1INTEBBOBFBACKPB7~0WR(a)端口A方式1输出(b)端口B方式1输出OBF:输出缓冲器满信号。向外设输出,低电平有效。ACK:外设应答信号。由外设输入,低电平有效。INTE:中断允许信号。INTR:中断请求信号。高电平有效。(3)工作方式2——双向选通输入/输出方式方式2只允许A口采用,此时端口A变为双向,允许数据在同一组8条线上发送和接收。下图示出方式2操作控制字和内部结构图。图7.10端口A方式2控制字图7.11端口A工作在方式2的端口状态OBFA:输出缓冲器满信号,向外设输出,低电平有效。ACKA:应答信号,由外设输入,低电平有效。STBA:数据选通输入信号。由外设输入,低电平有效。IBFA:输入缓冲器满信号,向外设输出,高电平有效。INTE:中断允许信号(INTE1和INTE2)。高电平有效。INTRA:中断请求信号,高电平有效。8255A中端口A工作于方式2时,允许端口B工作于方式0或方式1,完成输入/输出功能。4种组合状态及其工作方式控制字格式如表7.3。表7.3方式2的组合状态与控制字格式最简单的键盘如图7.14(a)所示,其中每个键对应I/O端口的一位。7.4.18255A与键盘接口一、键盘的工作原理7.48255A的应用实例缺点:占用的I/O端口太多,适用于只有几个键的小键盘中。矩阵结构键盘如图7.14(b),这个矩阵分为3行3列,如果键5按下,则第1行和第2列线接通而形成通路。如果第1行线接低电平,则键5的闭合,会使第2列线也输出低电平。图7.14键盘的结构二、键的识别(1)行扫描法图7.15是一个8行8列组成的键盘。行扫描法识别按键的原理:先使第0行接低电平,其余行为高电平,通过检查列线电位判断第0行是否有键闭合。即在第0行接低电平时,看是否有哪条列线变成低电平。图7.15键盘接口电路如果所有列线均为高电平,则说明第0行无键按下。此后,再将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,便退出扫描,通过组合行线和列线编码即可识别按键。实际应用中,先快速检查键盘中是否有键按下,然后再确定按键的具体位置。键盘扫描程序的第一步:判断是否有键被按下。使输出端口各位全为0,然后从输入端口读取数据,如果读得的数据不是FFH,则说明必有列线处于低电平,从而可断定有键被按下。此时,为了消除键的抖动,调用延时程序。如果延时后读得的数据是FFH,则程序在循环中等待。这段程序如下:KEY1:MOVAL,00HMOVDX,ROWPORT;ROWPORT为行线端口;地址OUTDX,AL;使所有行线为低MOVDX,COLPORT;COLPORT为列线端口地;址INAL,DX;读取列值CMPAL,0FFH;判定是否有列线为低电平JZKEY1;没有,无闭合键,则循环等待CALLDELAY;有,则延迟20ms清除抖动键盘扫描程序的第二步:逐行扫描以确定按键位置。将计数器值设置为行数。扫描初值11111110使第0行为低电平,其它行为高。输出扫描初值后,马上读取列线的值,看是否有列线处于低电平。若无,则将扫描初值循环左移一位,变为11111101,同时,计数值减1,如此下去,直到计数值为0,或找到按键所在行时止,程序段如下:MOVAH,0FEH;扫描初值送AHMOVCX,8;行数送CXKEY2:MOVAL,AHMOVDX,ROWPORTOUTDX,AL;输出行值(扫描值)MOVDX,COLPORTINAL,DX;读进列值CMPAL,0FFH;判断有无接地线JNZKEY3;有,则转下一步处理ROLAH,1;无,则修改扫描值;准备下一行扫描LOOPKEY2;计数一次,未扫完8行,则继续循环JMPKEY1;所有行都没有键按下,则返回继;续检测KEY3:…;此时,AL=列值,AH=行值,进行后;续处理将行线接一个数据端口,先让它工作在输出方式;将列线也接到一个数据端口,先让它工作在输入方式。CPU通过输出端口往各行线上送低电平,然后读入列线值。如果此时有某键被按下,则程序再对两个端口进行方式设置,使接行线的端口改为输入方式,接列线的端口改为输出方式。并将刚才读得的列值从列线所接端口输出,再读取行线的输入值,那么,闭合键所在的行线值必定为0。(2)行反转法当一个键被按下时,必定可以读得一对唯一的行值和列值。为了查找键代码,键盘程序设计