微型计算机原理与应用------输入输出和接口技术主讲人:马永红微型计算机原理与应用----可编程并行接口8255主讲人:马永红•与系统的连接BG2AG2ABC74LS138&≥10YD7D0~PA0RESET8255PA7PB7PB0PC0PC7~~~WRRDA1A0CS&8088系统BUSA7IOWA11A9A8A10A13A12A4A2A3A6A5A15A14D7D0~IORRESETIORA1A0IOW8255与系统的连接8255相当于三个独立的8位简单接口。各端口既可设置为输入口,也可设置为输出口,但不能同时实现输入及输出。C端口即可以是一个8位的简单接口,也可以分为两个独立的4位端口。设置为输出口时有锁存能力,设置为输入口时无锁存能力。属于无条件传输方式PPT+表述1、工作方式0――查询方式交换数据INAL,PORT;PORT是端口号输入输入缓冲器译码器数据DBAB外设8nIO/MRD①外设将数据送到8255输入缓冲器中;②CPU给出有效的8255地址;③CPU发读命令,将8255A输入缓冲器中数据读入CPU的AL寄存器中。PPT8255A的工作方式——方式0(输出方式)OUTPORT,AL输出锁存器译码器数据DBAB外设8nIO/MWRPPT2020/1/117教材实例:例1★将8255C端口的8根I/O线接8只发光二极管的正极(八个负极均接地),编写使这8只发光二极管依次亮、灭的程序。设8255的端口地址为380H~383H。8255方式0应用举例12020/1/118程序框图控制字寄存器的端口地址送间址寄存器写入方式选择字PC=10向PC口送数据写入置位字点亮一只发光二极管延时让发光二极管发光向PC口送第二个数据熄灭发光二极管11号功能调用检测有无键入有键入吗?NYPC=10PC=0PC1=102020/1/119stacksegmentstackstackdw32dup(0)stackendscodesegmentbeginprocfarassumess:stack,cs:codepushdssubax,axpushaxMOVDX,383H;383H为控制字寄存器的端口地址MOVAL,80HOUTDX,AL;写入方式选择字参考程序2020/1/1110MOVDX,382H;C端口的端口地址送DXMOVAL,1;C端口的输出值AGAIN:OUTDX,AL;给C口送数据,点亮一只二极管LOOP$;延时LOOP$;延时PUSHAXMOVAH,11;11号功能调用:检查键盘有无输入INT21H;无:0送AL;有:-1送ALINCAL;有键入,AL=-1,AL增1,AL=0POPAXJZBACKROLAL,1;通过循环移位指令改变C端口的输出值,灭第一盏灯点第二盏灯JMPAGAIN;给端口送数据BACK:ret2020/1/1111beginendpcodeendsendbegin方式0也可作为查询式输入或输出的接口电路,此时端口A和B分别可作为一个数据端口,而取端口C的某些位作为这两个数据端口的控制和状态信息。2020/1/11128255方式0应用举例2例2在某工业系统中,要不断检测8个开关K7~K0的通断状态,并随时在LED7~LED0上显示出来(开关合,LED亮;开关断,LED灭)。2020/1/1113端口地址的分配:如图,地址线A2A1是可以变化的,其他都是固定的。端口A地址:90H(A2A1=00)端口B地址:92H(A2A1=01)端口C地址:94H(A2A1=10)控制字寄存器地址:96H(A2A1=11)A1A0注意连接线上的信号方向!2020/1/1114控制程序:MOVAL,10010000B;分析控制字OUT96H,AL;写入8255控制字L1:INAL,90H;收K7~K0的通断状态OUT92H,AL;输出收到的数据到PB口,CALLDELAY;延时,保持灯亮JMPL1;转移到L1,继续测定。延时程序先不用管2020/1/1115例3检测8个开关K7~K0的通断状态,将闭合的开关个数,在LED7~LED0上显示出来。例3的分析接收A口上开关的状态到AL中检查AL中有几个位是“0”用换码指令将“0”的个数转换成对应的字型码将字型码从B口输出2020/1/11167段数码管及字形码接法:共阴极与共阳极字形码与字形字形码由PB口提供。PB口的字形码从哪儿来?每个字形对应一组编码—字形码。2020/1/1117参考程序MOVAL,10010000BOUT96H,AL;置8255方式控制字L0:INAL,90H;收开关状态MOVDL,00H;将来存放1的个数L1:ANDAL,ALJZEXT1SHLAL,1JCL2INCDLL2:JMPL1;未查完,继续查EXT1:LEABX,TABLE;TABLE中方的是0-7的字形码MOVAL,DLXLAT;将DL中的“0”的个数转换成字型码MOVDX,92HOUTDX,AL;将字型码从B口输出CALLDELAY;延时JMPL0检查1的个数码转变并输出显示A口输入B口输出,方式02020/1/11188255综合练习方式0应用举例4要求:掌握芯片之间连接相应端口地址会分析。看懂图上的芯片之间的联系编写控制程序。要求:将IN7上的模拟量转换成数字量,存入BUF单元分析:•A口做数据输入端口•B口没有使用C口高4位是输入口,低4位是输出口均采用方式0进行控制。2020/1/1119分析顺序:CPU与8255连线CPU与译码器间的连线,读懂8255的端口地址8255与外设连接C口低4位是输出用ADC0809的工作原理:1、用C、B、A三个端子选择模拟量的输入(IN0---IN7)端:000-----IN0、001----IN1、……、110----IN6、111----IN7(每次只能转换1路,所以要先选择)2、ALE有效时,CBA上信号存入ADC内的地址锁存器中CBA上面的数据随时都有,什么时候是选择模拟量通道的那个信号呢,ALE有效的时候,CBA上的数据被锁存,这个信号才是输出端选择信号。3、START端有正脉冲,启动AD转换注:ALE和START接到同一个引脚上。4、转换结束时,EOC为“1”转换时间:64个外部时钟周期5、ADC的数据输出锁存器后接有缓冲器,缓冲器靠OE=“1”选中。如果OE不打开,锁存器与CPU间就不联通。6、转换好的数据从D7----D0端传给CPU2020/1/11208255的端口地址分析A7A6A5A4A3A2A1A0100010XXA口:88H、B口:89H、C口:8AH、控制字口:8BH工作方式控制字MOVAL,10011000BOUT8BH,AL选择IN7并启动A/D转换MOVAL,00000111B;PC2PC1PC0;此时不启动转换,PC3=0OUT8AH,AL;选择IN7MOVAL,00001111BOUT8AH,ALMOVAL,00000111B;START引脚上0-1-0有一个脉冲OUT8AH,AL;启动A/D转换,蓝色111决定了端口2020/1/1121检查A/D转换是否结束?并打开输出缓冲器L1:INAL,8AH;检查PC4TESTAL,00010000BJZL1;AD转换没有结束转L1;AD转换结束处理(打开输出缓冲器靠硬件连线解决)接收转换好的数据INAL,88HMOVBUF,AL2020/1/11228255的方式1----选通输入方式端口A和端口B仍作为数据的输入、输出口;端口C的某些位作为端口A和端口B的选通控制信号,配合AB口使用。A口、B口在作为输入和输出时的选通信号源自不同的引脚。表中的输入输出时是针对8255而言。在这种工作方式下,数据的输入输出操作要在选通信号控制下完成。和外设商量着来2020/1/1123外部设备8255A方式1(输入)情况下四个联络信号及工作过程111外设产生数据数据出现在外部数据总线外设发选通信号数据进入8255A的A口1通知外设缓冲区已满,表示已经接受数据1向C口写P4位置1,开放中断向CPU发中断请求信号CPU发读信号注意:此工作是8255A初始化时完成的!!!PPTPC口的哪一位做选通信号和口有关和输出输入有关,比如同为输入A口用PC4,B口用PC22020/1/1124STB#(Strobe闸门)——选通输入信号,低电平有效。它是外设供给的输入信号,当其有效时将外设来的数据送入8255的输入锁存器。A组对应(接到)PC4;B组对应PC2。IBF(inputbufferfull)——输入锁存器满,高电平有效。这是一个8255输给外设的联络信号。当其有效时,通知外设输入的数据已写入缓冲器,此时不能送下一个数据。CPU用IN指令取走数据后,此信号被清除。A组对应PC5;B组对应PC1。如果外设不需要这个信号你可以悬空不用。这两个信号(引脚)是8255与外设间的联络引脚2020/1/1125INTR(interruptrequest)——中断请求信号,高电平有效。是由8255A输出的一个信号。用于向CPU请求中断,让CPU读走输入锁存器中的数据。A组对应PC3;B组对应PC0。向CPU发出中断请求有一个前提条件,INTE必须是1.INTE(interruptenable)——端口中断允许信号,可由用户通过对PC4位置位来实现。如果你想让CPU已中断的方式处理输入的数据,那么设INTE=1,允许发出INTR请求。该信号没有外接引脚,INTE状态通过C口置位复位控制字来设置。如图和CPU联络的引脚C口置位复位控制字来设置2020/1/1126注意:INTE的状态可利用C口的位控方式来设置:输入:A口的INTE:写入PC4B口的INTE:写入PC2输出:A口的INTE:写入PC6B口的INTE:写入PC2例如:方式1输入允许A口中断,则应按如下方法设置INTEA。MOVDX,控制寄存器地址MOVAL,0xxx1001B;1=允许中断,0=禁止中断OUTDX,AL2020/1/11278255A方式1输入工作过程小结:①需要事先设置开放内部中断;②外设产生数据,发选通信号,将数据送入8255A;③一方面将输入缓冲区满信号激活,通知外设不再送入数据;一方面与内部INTE信号联合作用产生INTR信号,通知CPU外设送来数据等待处理;④CPU响应后,发出读信号,取走数据。注意:STB只持续一个时钟周期,IBF在CPU读取数据后才变成无效,是最晚改变的一个信号。2020/1/1128选通输入时序1)8255与外设间的数据“INPUTDATA”上线2)稍后STB变为低电平3)再稍后8255缓冲器满IBF变为高电平4)此时8255锁存器将数据锁存,STB变为高电平5)INTR给出中断请求信号6)响应后,将8255锁存器中内容通过D7-D0传送给CPU2020/1/1129与输入方式比较,输出方式的联络信号的定义有所改变。使用B口时与输入一样使用PC2PC1PC0但是引脚上的定义有所不同。8255A方式1工作过程(输出)2020/1/11308255A方式1工作过程(输出)CPU发写信号1111向C口写PC4位置1,开放中断1CPU产生数据后,输出到数据总线数据进入8255A通知外部设备取走数据外部设备取走数据外设取走数据后的应答信号高电平告诉外设数据缓冲区为空0PPT2020/1/1131OBF*(outputbufferfull)——输出缓冲器满信号,8255A输出给外设的一个控制信号,当其有效时,表示CPU已把数据输出给指定的端口,外设可以取走ACK*(Acknowledge)——响应确认信号。是一个外设的响应信号,指示CPU输给8255A的数据已由外设接受。INTR——中断请求信号,高有效。当输出设备已接受了CPU输