可编程并行接口8255A.ppt
第5章 可编程并行接口8255A5.1 8255A芯片引脚和内部结构 项目1:开关状态显示 5.1.2 知识讲解5.2 8255A控制字 项目2:8255A控制LED灯左循环亮 5.2.2 知识讲解5.3 8255A的工作方式 项目3:用8255A控制LED灯左右循环亮 5.3.2 知识讲解5.4 项目扩展与工程应用 项目4:用8255A控制继电器 项目5:用8255A端口控制步进电机,5.1 8255A芯片引脚和内部结构项目1:开关状态显示1项目要求与目的(1)项目要求:设定8255A的PB口为开关量输入,PC口为开关量输出,编写程序实现能随时将PB口的开关状态通过PC口的发光二极管显示出来。(2)项目目的:了解8255A芯片引脚和内部结构。了解8255A输入/输出实验方法。2项目电路连接与说明(1)项目电路连接:将K0K7用导线连接至8255A的PB0PB7端口,将LED0LED7用导线连至8255A的PC0PC7端口,8255A的片选cs用导线连至地址译码处的200207插孔。(2)项目说明:可编程通用接口芯片8255A有3个8位的并行I/O口,它有三种工作方式。本项目采用8255A工作于方式0,PB口为输入,PC口为输出,输入量为开关量,通过8255A可实时显示在LED灯上。3项目电路原理框图 开关状态显示电路原理框图如图5-1所示。电路由8086CPU芯片、8255A芯片、74LS245驱动芯片、8只开关K0K7和8个发光二极管LED0LED7组成。,4项目程序设计(1)程序流程图 8255A的PB口为开关量输入,PC口为开关量输出,要求能随时将PB口的开关状态通过PC口的发光二极管显示出来的程序流程图如图5-2所示。,图5-2 开关状态显示程序流程图,(2)程序清单开关状态显示程序清单如下所示。CODE SEGMENTASSUME CS:CODE START:MOV DX,203H;8255A控制口地址 MOV AL,82H;控制字10000010B(PC口输出,PB口输入,方式0)OUT DX,AL BG:MOV DX,201H;PB口地址 IN AL,DX;读开关状态 MOV DX,202H;PC口地址 OUT DX,AL;输出开关状态 JMP BG;循环CODE ENDSEND START,5.1.2 知识讲解1.概述 计算机系统的信息交换有两种形式:并行数据传输方式和串行数据传输方式。并行数据传输是以计算机的字长,通常是8位、16位或32位为传输单位,一次传送个字长的数据。并行接口的“并行”含义不是指接口与系统总线一侧的并行数据而言,而是指接口与I/O设备或控制对象一侧的并行数据线。8255A是Intel公司生产的通用可编程并行接口芯片,8255A采用40脚双列直插封装,单一+5V电源,全部输入/输出与TTL电平兼容。用8255A连接外部设备时,通常不需要再附加其他电路,给使用带来很大方便。它有三个输入/输出端口:端口A、端口B、端口C。每个端口都可通过编程设定为输入端口或输出端口,但有各自不同的方式和特点。端口C可作为一个独立的端口使用,但通常是配合端口A和端口B的工作,为这两个端口的输入/输出提供控制联络信号。2.8255A芯片引脚 8255A芯片引脚如图5-3(a)所示,8255A芯片有40根引脚,可分为如下三类。(1)电源与地线2根:Vcc(26脚)、GND(7脚)。(2)与外设相连的共24根,它们如下所示。PA7PA0:端口A数据信号(8根)。PB7PB0:端口B数据信号(8根)。PC7PC0:端口C数据信号(8根)。,(3)与CPU相连的共14根。RESET(35脚):复位信号,高电平有效。当RESET信号有效时,内部所有寄存器都被清零。同时,3个数据端口被自动设置为输入端口。D7D0:三态双向数据线,在8086系统中,采用16位数据总线,8255A的D7D0通常是接在16位数据总线的低8位上。cs(6脚):片选信号,低电平有效。该信号来自译码器的输出,只有当cs有效时,读信号RD和写信WR号才对8255A有效。RD(5脚):读信号,低电平有效。它控制从8255A读出数据或状态信息。WR(36脚):写信号,低电平有效。它控制把数据或控制命令字写入8255A。A1、A0(8、9脚):端口选择信号。8255A内部共有4个端口(即寄存器):3个数据端口(端口A、端口B、端口C)和1个控制端口,当片选信号CS有效时,规定A1、A0为00、01、10、11时,分别选中端口A、端口B、端口C和控制端口。CS、RD、WR、A1、A0这五个信号的组合决定了对3个数据端口和1个控制端口的读写操作,如表5-1所示。,表5-1 8255A端口选择和基本操作,3.8255A内部结构 8255A的内部结构如图5-3(b)所示。它包括四个部分:数据总线缓冲器、读写控制逻辑、A组控制器(包括端口A和端口C的上半部)和B组控制器(包括端口B和端口C的下半部)。(1)端口A、端口B和端口C 8255A芯片内部有三个8位端口,分别为A口、B口和C口。这三个端口可与外部设备相连接,可用来与外设进行数据信息、控制信息和状态信息的交换。端口A包含一个8位数据输出锁存器缓冲器和一个8位数据输入锁存器。所以用端口A作为输入端口或输出端口时,数据均被锁存。端口B包含一个8位数据输出锁存器缓冲器和一个8位数据输入锁存器。所以用端口B作为输入端口或输出端口时,数据均被锁存。端口C包含一个8位数据输入缓冲器和一个8位的数据输出锁存器缓冲器。所以端口C作为输入端口时不能对数据进行锁存,作为输出端口时能对数据进行锁存。端口C可以分成两个4位端口,分别可以定义为输入端口或输出端口,还可定义为控制、状态端口,配合端口A和端口B工作。,(2)A组和B组 端口A和端口C的高4位(PC7PC4)构成A组,由A组控制部件来对它进行控制;端口B和端口C的低4位(PC3PC0)构成B组,由B组控制部件对它进行控制。这两个控制部件各有一个控制单元,接收来自数据总线送来的控制字,并根据控制字确定各端口的工作状态和工作方式。(3)数据总线缓冲器 数据总线缓冲器是一个双向三态的8位缓冲器,它与CPU系统数据总线相连,是8255A与CPU之间传输数据的必经之路。输入数据、输出数据、控制命令字都是通过数据总线缓冲器进行传送的。(4)读写控制逻辑 读写控制逻辑接收来自CPU地址总线的信号和控制信号,并发出命令到A组和B组,把CPU发出的控制命令字或输出的数据通过数据总线缓冲器送到相应的端口,或者把外设的状态或输入的数据从相应的端口通过数据总线缓冲器送到CPU。8255A接口芯片的地址译码电路设计需考虑的问题是:对于8086系统,由于采用16位数据总线,CPU在进行数据传送时,总是将低8位数据送往偶地址端口,而将高8位数据送往奇地址端口;反过来,从偶地址端口取得数据总是通过低8位数据线传送到CPU,从奇地址端口取得数据总是通过高8位数据线传送到CPU。在微机80386以上的32位外部数据总线的系统中,则应将8255A的A1端与地址总线的A3相连,将8255A的A0端与地址总线A2相连,并使CPU访问8255A时地址总线的A1、A0两位总是为00。,5.2 8255A控制字及状态字项目2:8255A控制LED灯左循环亮 1.项目要求与目的(1)项目要求:根据开关的状态,用8255的PA端口控制8只LED发光二极管,PB口接1只开关,编写程序实现K0闭合,LED灯左循环亮。(2)项目目的:了解8255控制方式的设置。掌握8255的初始化及编程方法。2项目电路连接与说明(1)项目电路连接:8255A的片选CS孔用导线接至译码处200H207H插孔,8255A的PA0-PA7用导线接至LED0-LED7,PB0用导线接至开关K0。(2)项目说明:Intel 8255A是常用的并行可编程接口芯片,它有3个8位并行输入/输出端口,可利用编程方法设置3个端口是作为输入端口还是作为输出端口,在使用时,要对8255进行初始化。本项目PA口作为输出口,PB口作为输入口,工作于方式0。当开关K0闭合,LED灯左循环亮。,3项目电路原理框图 用8255A控制LED灯左循环亮电路框图如图5-4所示。电路由8086CPU芯片、8255A芯片、8只LED发光二极管和1只开关K0等组成。,图5-4 8255A控制LED灯左循环亮电路原理框图,4项目程序设计(1)程序流程图用8255A控制LED灯左循环亮程序流程图如图5-5所示。,图5-5 8255A控制LED灯左循环亮程序流程图,(2)程序清单用8255A控制LED灯左循环亮程序清单如下所示。CODE SEGMENTASSUME CS:CODE START:MOV DX,203H;8255控制端口 MOV AL,82H;PA输出,PB输入 OUT DX,AL MOV DX,200H;PA端口地址 MOV AH,0FEH;置LED0亮初始值 BG:MOV AL,AH OUT DX,AL;点亮LED灯 CALL DELAY;调延时子程序 MOV DX,201H;PB端口地址 IN AL,DX;读开关的状态 TEST AL,01H;PB0=0吗?(K0闭合吗)JNZ BG;PB00,转移 ROL AH,1;PB0=0,左移 MOV DX,200H JMP BG,DELAY PROC NEAR;延时子程序MOV BL,100DELAY2:MOV CX,374DELAY1:NOP NOP LOOP DELAY1 DEC BL JNZ DELAY2 RETDELAY ENDPCODE ENDS END START,5.2.2 知识讲解 8255A是可编程并行接口芯片。可编程就是用指令的方法先对芯片进行初始化,设置芯片的端口是处于输入数据状态还是处于输出数据状态,以及每个端口的工作方式。要使8255A工作,必须把工作命令控制字写入8255A的控制字寄存器。8255A共有两种控制字:工作方式选择控制字,可使8255A的3个数据端口工作在不同的方式。端口C按位置位/复位控制字,它可使C端口中的任何一位进行置位或复位。1.工作方式选择控制字8255A的3种基本工作方式:由方式选择控制字来决定。方式0:基本的输入/输出方式。方式1:选通的输入/输出方式。方式2:双向的传输方式。端口A可以工作于方式0、方式1、方式2共三种工作方式,可以作为输入端口或输出端口。端口B可以工作于方式0、方式1两种工作方式,可以作为输入端口或输出端口。端口C分成高4位(PC7PC4)和低4位(PC3PC0),可分别设置成输入端口或输出端口;端口C的高4位与端口A配合组成A组,端口C的低4位与端口B配合组成B组。D71(特征位)表明是设定方式选择控制字。,通过对8255A工作方式控制字的设置可将PA、PB和PC 3个端口分别定义为3种不同工作方式的组合,工作方式选择控制字格式及各位含义如图5-6所示。,在使用8255A芯片前,必须先对其进行初始化。初始化的程序很简单,只要CPU执行一条输出指令,把控制字写入控制寄存器就可以了。,图5-6 8255A的工作方式选择控制字,【例5-1】按下述要求对8255A进行初始化。要求A口设定为输出数据,工作方式为方式0;B口设定为输入数据,工作方式为方式1;C口设定为高四位输入,低四位输出。(地址为200H203H)MOV DX,203H;8255控制口地址送DXMOV AL,8EH;写工作方式控制字10001110BOUT DX,AL;控制字送到控制口 需要注意的是,C端口高四位和低四位的数据传输方向可以相同,也可以不同,无论是哪一种情况,IN/OUT指令总是把C端口当作一个整体对其进行读写操作。2.端口C按位置位复位控制字 端口C按位置位复位控制字可实现对端口C的每一位进行控制。置位是使该位为1,复位是使该位为0。控制字的格式及各位含义如图5-7所示。,D7位是特征位,用来区分该控制字是工作方式控制字还是对端口C按位置位复位控制字。D71,为工作方式控制字;D70为端口C按位置位复位控制字。D6、D5、D4三位无意义,可为任意值。D3、D2、D1按二进制编码,用来选择对端口C的哪一位进行操作。选择的位将由D0位规定是置位(D0=1)还是复位(D0=0)。D0位用来选择对所选定的端口C的哪一位是置位(D0=1)还是复位(D0=0)。需要注意如下三点:端口C按位置位复位控制字,必须写入控制寄存器,而不是写入端口C。当C端口被设置为输出时,端口C按位置位复位控制字,可以对C口的某一根端口线按位操作,也就是说,使C口某一根端口线输出高低电平,而不影响其他端口线输出高低电平。当A端口工作在方式1或方式2,B端口工作在方式1时候,端口C按位置位复位控制字,可以使内部的“中断允许触发器”置“1”或置“0”。,【例5-2】要求通过8255A芯片C口的PC2位产生一个方脉冲信号。(地址为200H203H)MOV DX,203H;控制口地址送DXAA MOV AL,05H;对PC2置位的控制字OUT DX,ALCALL DELAY1;调用延时程序(省略)MOV AL,04H;对PC2复位的控制字OUT DX,ALCALL DELAY2;调用延时程序(省略)JMP AA,5.3 8255A的工作方式项目3:用8255A控制LED灯左右循环亮 1项目要求与目的(1)项目要求:根据开关的状态,用8255的端口PA控制8只LED发光二极管,PB口接两只开关K0和K1,编写程序实现K0闭合,LED灯左循环亮,K1闭合,LED灯右循环亮。(2)项目目的:了解8255控制方式的设置。掌握8255的编程方法。了解8255控制外部设备的常用电路。2项目电路连接与说明(1)项目电路连接:8255的片选CS孔用导线接至译码处200H207H插孔,8255的PA0-PA7用导线接至LED0-LED7,PB0-PB1用导线接至开关K0和K1。(2)项目说明:8255是常用的并行接口芯片,在使用时,只要对8255进行初始化就可使用。本项目PA口作为输出口,PB口作为输入口,工作于方式0。当开关K0闭合,LED灯左循环亮,当开关K1闭合,LED灯右循环亮。,3项目电路原理框图 用8255A控制LED灯左右循环亮电路框图如图5-8所示。电路由8086CPU芯片、8255A芯片、8只LED发光二极管和两只开关K0和K1等组成。,图5-8 用8255A控制LED灯左右循环亮电路框图,4项目程序设计(1)程序流程图用8255A控制LED灯左右循环亮程序流程图如图5-9所示。,图5-9用8255A控制LED灯左右循环亮程序流程图,(2)程序清单用8255A控制LED灯左右循环亮程序清单如下所示。CODE SEGMENTASSUME CS:CODE START:MOV DX,203H;8255控制口地址 MOV AL,82H;PA口输出,PB口输入 OUT DX,AL MOV DX,200H;PA口地址 MOV AH,0FEH;置LED0亮初始值 BG:MOV AL,AH OUT DX,AL;点亮LED灯 CALL DELAY;调延时子程序 MOV DX,201H;PB端口地址 IN AL,DX;读开关的状态 TEST AL,01H;PB0=0吗?(K0闭合吗)JNZ OPR;PB00,转移 ROL AH,1;PB0=0,左移 MOV DX,200H;PA口地址 JMP BG,OPR:IN AL,DX;读开关的状态 TEST AL,02H;PB1=0吗?(K1闭合吗)JNZ BG;PB10,转移 ROR AH,1;PB1=0右移 MOV DX,200H;PA口地址 JMP BG DELAY PROC NEAR;延时子程序MOV BL,100DELAY2:MOV CX,374DELAY1:NOP NOP LOOP DELAY1 DEC BL JNZ DELAY2 RETDELAY ENDPCODE ENDS END START,5.3.2 知识讲解 8255A有3种工作方式,可以通过编程来进行设置。方式0为简单I/O,查询方式,端口A、端口B、端口C均可使用。方式1为选通I/O,中断方式,端口A、端口B可以使用。方式2为双向I/O,中断方式,只有端口A可以使用。工作方式的选择可通过向控制端口写入控制字来实现。在不同的工作方式下,8255A的3个I/O端口的排列如图5-10所示。1方式0 方式0也叫基本输入/输出方式。一种方式,不需要应答联络信号,端口A、端口B和端口C的高4位及低4位都可以作为输入或输出端口。方式0的应用场合有无条件传送和查询传送2种。,【例5-4】电路如图5-1所示,8255A的PB口为开关量输入,PA口为开关量输出,要求能随时将PB口的开关状态通过PA口的发光二极管显示出来,试编写程序。程序流程图如图5-2所示。开关状态显示程序清单如下所示。CODE SEGMENTASSUME CS:CODE START:MOV DX,203H;8255A控制口地址MOV AL,82H;控制字10000010B(PC口输出,PB口输入,方式0)OUT DX,AL BG:MOV DX,201H;PB口地址 IN AL,DX;读开关状态 MOV DX,202H;PC口地址 OUT DX,AL;输出开关状态 JMP BG;循环 CODE ENDS END START,2方式1 方式1也叫选通的输入/输方式。端口A和端口B仍作为两个独立的8位I/O数据通道,可单独连接外设,通过编程分别设置它们为输入或输出。而端口C则要有6位(分成两个3位)分别作为端口A和端口B的应答联络线,其余2位仍可作为基本输入/输出方式即方式0,可通过编程设置为输入或输出。(1)方式1输入 当端口A和端口B工作于“方式1输入”时,端口A和端口B可分别作为独立的输入端口,必须有端口C配合端口A和端口B工作。端口C各位定义如图5-11所示。,图5-11方式1输入有关信号的规定,端口C的PC3PC5用作端口A的应答联络线,PC0PC2则用作端口B的应答联络线,PC6和PC7则用于方式0(基本I/O)。对于图5-11中所示的控制信号作如下说明。STB:为选通输入信号,低电平有效。它是由外设送给8255A的输入信号,当该信号有效时,8255A接收外设送来的一个8位数据。IBF:输入缓冲器满信号,高电平有效。它是一个8255A送给外设的联络信号。当该信号为高电平时,表示外设的数据已送进输入缓冲器中,但尚未被CPU取走,通知外设不能送新数据;只有当它变为低电平时,即CPU已读取数据,输入缓冲器变空时,才允许外设送新数据。INTR:中断请求信号,高电平有效。它是8255A的一个输出信号,用于向CPU发出中断请求。它是当选通信号结束(STB=1),已将一个数据送进输入缓冲器(IBF=1),并且端口处于中断允许状态(INTE=1)时,8255A的INTR端被置为高电平,向CPU发出中断请求信号,当CPU响应中断读取输入缓冲器中的数据时,由读信号RD的下降沿将INTR置为低电平。INTEA:端口A中断允许信号。INTEA没有外部引出端,它实际上就是端口A内部的中断允许触发器的状态信号。它由PC4的置位/复位来控制,PC4=1时,使端口A处于中断允许状态。INTEB:端口B中断允许信号。与INTEA类似,INTEB也没有外部引出端,它是端口B内部的中断允许触发器的状态信号。它由PC2的置位/复位来控制,PC2=1时,使端口B处于中断允许状态。,(2)方式1输出 当端口A和端口B工作于方式1输出时,方式选择控制字与端口C控制信号的定义如图5-12所示。,图5-12 方式1输出有关信号的规定,对于图5-12中所示的控制信号作如下说明。OBF:输出缓冲器满信号,低电平有效,它是8255A输出给外设的一个控制信号。当该信号有效时,表示CPU已经把数据输出给指定端口,通知外设把数据取走。ACK:外设响应信号,低电平有效。当该信号有效时,表明CPU通过8255A输出的数据已经由外设接收,它是对OBF的回答信号。INTR:中断请求信号,高电平有效。它是8255A的一个输出信号,用于向CPU发出中断请求。INTR是当ACK、OBF和INTE都为“1”时才被置成高电平(向CPU发出中断请求信号);写信号WR的上升沿使其变为低电平(清除中断请求信号)。INTE4:端口A中断允许信号,由PC6的置位/复位来控制,当PC6=1时,端口A处于中断允许状态。INTEB:端口B中断允许信号,由PC2的置位/复位来控制,当PC2=1时,端口B处于中断允许状态。另外,在方式1输出时,PC4、PC5两位还未用,如果要利用它们可通过方式选择控制字的D3位来设定。,3.方式2 方式2又称双向传输方式,只有端口A才能工作于方式2。在方式2,外设既可以在8位数据线上往CPU发送数据,又可以从CPU接收数据。当端口A工作于方式2时,端口C的PC7PC3用来提供相应的控制和状态信号,配合端口A的工作。此时端口B以及端口C的PC2PC0则可工作于方式0或方式1,如果端口B工作于方式0时,端口C的PC2PC0可用作数据输入/输出;如果端口B工作于方式1时,端口C的PC2PC0用来为端口B提供控制和状态信号。当端口A工作于方式2时,方式选择控制字与端口C控制信号的定义如图5-13所示。,图5-13 8255A方式2,(1)方式2输出 对于图5-13中所示的控制信号作如下说明。OBFA:端口A“输出缓冲器满”信号,输出,低电平有效。当OBFA有效时,表示CPU已经将一个数据写入8255A的端口A,通知外设数据可以取走了。ACKA:外设对OBFA的回答信号,输入,低电平有效。当它有效时,表明外设已收到端口A输出的数据。INTE1:输出中断允许信号。当INTE1=1时,允许8255A由INTRA向CPU发中断请求信号;当INTE1=0时,则屏蔽该中断请求。INTE1的状态由“端口C按位置1/置0控制字”所设定的PC6位的内容来决定。(2)方式2输入STBA:端口A选通信号,输入,低电平有效。当该信号有效时,端口A接收外设送来一个8位数据。IBFA:端口A“输入缓冲器满”信号,输出,高电平有效。当IBFA=1时,表明外设的数据已经送进输入缓冲器;当IBFA=0时,外设可以将一个新的数据送入端口A。INTE2:输入中断允许信号。它的作用与INTE1=1类似,INTE2的状态由“端口C按位置1/置0控制字”所设定的PC4位的内容来决定。INTRA:中断请求,输出,高电平有效。在INTE1=1和INTE2=1的情况下,无论OFBA=1或者IBFA=1都可能使INTRA=1,向CPU请求中断。,方式2是一种双向传输工作方式。如果一个并行外部设备既可以作为输入设备,又可以作为输出设备,并且输入输出动作不会同时进行,那么,将这个外部设备的8255A的端口A相连,并让它工作于方式2就很合适。例如,软盘系统就是这样一种外设。【例5-5】设8255A的端口为200H207H,端口A工作于方式2,要求发两个中断允许,即PC4和PC6均需要置位;端口B工作于方式1,要求使PC2置位来开放中断。解:8255A初始化程序如下所示。MOV DX,203H;8255控制口 MOV AL,0C4H;控制字11000100B,方式2,OUT DX,AL MOV AL,09H;PC4置位,端口A输入允许中断 OUT DX,AL MOV AL,0DH;PC6置位,端口A输出允许中断 OUT DX,ALMOV AL,05H;PC2置位,端口B输出允许中断OUT DX,AL,5.4 项目扩展与工程应用项目4:用8255A控制继电器 1项目要求与目的(1)项目要求:利用8255A的端口,编写程序实现输出电平控制继电器的吸合和断开,从而达到对外部装置的控制。(2)项目目的:了解8255控制方式的设置。掌握8255的初始化及编程方法。掌握继电器的控制的基本方法。了解用弱电控制强电的方法。2项目电路连接与说明(1)项目电路连接:8255A的片选CS孔用导线接至译码处200H207H插孔,8255A的PA0用导线接至继电器的CON端,继电器的用导线接至+5V插孔。(2)项目说明:现代自动控制设备中,都存在一个电子电路与电气电路的互相连接问题,一方面要使电子电路的控制信号能够控制电气电路的执行元件(电动机,电磁铁,电灯等),另一方面又要为电子线路的电气电路提供良好的电气隔离,以保护电子电路和人身的安全。继电器便能完成这一桥梁作用。本项目采用的继电器其控制电压是5V。本电路的控制端为高电平时,继电器常开触点吸合,连触点的LED灯被点亮。当控制端为低电平时,继电器常开触点断开,对应的LED灯将随继电器的开关而亮灭。,需要注意的是,继电器触点吸合与断开的间隔时间尽可能要长一些,这样继电器和控制设备才不容易损失。3项目电路原理框图 用8255A控制继电器电路原理框图如图5-14所示。电路由8086CPU芯片、8255A芯片、驱动电路ULN2003、1只LED发光二极管和继电器等组成。,图5-14 用8255A控制继电器电路原理框图,4项目程序设计(1)程序流程图 用8255A控制继电器程序流程图如图5-15所示。,图5-15用8255A控制继电器程序流程图,(2)程序清单用8255A控制继电器程序清单如下所示。CODE SEGMENTASSUME CS:CODESTART:MOV DX,203H;8255A控制端口地址 MOV AL,80H;PA口输出 OUT DX,AL BG:MOV DX,200H;PA口地址 MOV AL,01H;PA0输出高电平 OUT DX,AL CALL DELAY;延时 MOV DX,200H MOV AL,00H;PA0输出低电平 OUT DX,AL CALL DELAY;延时 JMP BG,DELAY PROC NEAR;延时子程序MOV BL,100DELAY2:MOV CX,374DELAY1:NOP NOP LOOP DELAY1 DEC BL JNZ DELAY2 RETDELAY ENDPCODE ENDS END START,项目5:用8255A端口控制步进电机 1项目要求与目的(1)项目要求:根据开关的状态,用8255端口控制步进电机,编写程序输出脉冲序列到8255的PA口,控制步进电机正转、反转,加速,减速。(2)项目目的:了解步进电机控制的基本原理。掌握控制步进电机转动的编程方法。了解单片机控制外部设备的常用电路。2项目电路连接与说明(1)项目电路连接:8255的片选CS孔用导线接至译码处200H207H插孔,8255的PA0-PA3用导线接至步进电机的A、B、C和D,PB0-PB3用导线接至开关K0、K1和K2。(2)项目说明:步进电机驱动原理是通过对每相线圈中的电流的顺序切换来使电机作步进式旋转。切换是通过8255输出脉冲信号来实现的。所以调节脉冲信号的频率便可以改变步进电机的转速,改变各相脉冲的先后顺序,可以改变电机的旋转方向。步进电机的转速应由慢到快逐步加速。步进电机驱动方式可以采用双四拍(ABBCCDDAAB)方式,也可以采用单四拍(ABCDA)方式,或单、双八拍(AABBBCCCDDDAA)方式。实际控制时公共端是接在+5V上的,所以实际控制脉冲是低有效。8255的PA口输出的脉冲信号经(MC1413或ULN2003A)倒相驱动后,向步进电机输出脉冲信号序列。,当开关K0=0时,步进电机驱动方式采用单/双八拍工作方式,当开关K1=0时,步进电机驱动方式采用双四拍工作方式,当开关K2=0时,步进电机驱动方式采用单四拍反转工作方式。3项目电路原理框图 项目电路原理框图如图5-16所示。电路由8255A芯片、驱动和步进电机等组成。,图5-16 用8255A端口控制步进电机电路框图,4项目程序设计(1)程序流程图 用8255A端口控制步进电机程序流程图如图5-17所示。,图5-17 8255A端口控制步进电机程序流程图,(2)程序清单用8255A端口控制步进电机程序清单如下所示。ASTEP EQU 01HBSTEP EQU 02HCSTEP EQU 04HDSTEP EQU 08HCODE SEGMENT ASSUME CS:CODESTART:MOV DX,203H;8255控制口地址 MOV AL,82H;PA口输出,B口输入 OUT DX,AL;写控制字 K0:MOV DX,200H;PA口地址 MOV AL,0;输出低电平 OUT DX,AL;电机停止转动MOV DX,201H;PB口地址 IN AL,DX;读开关状态,TEST AL,01H;PB0位(K0=0吗?)JNZ K1;不是零转K1 JMP STEP8 是零转单/双八拍工作方式 K1:IN AL,DX;读开关状态 TEST AL,02H;PB1位(K1=0吗?)JNZ K2;不是零转K2 JMP STEP4;是零转双四拍工作方式 K2:IN AL,DX;读开关状态 TEST AL,04H;PB2位(K2=0吗?)JZ STEP41;是零转单四拍反转工作方式 JMP K0;循环;单/双八拍工作方式:AABBBCCCDDDAASTEP8:MOV BX,9000H;设置初始延时时间 MOV DX,200H;PA口地址 MOV AL,ASTEP OUT DX,AL CALL DELAY MOV AL,ASTEP+BSTEP,OUT DX,AL CALL DELAY MOV AL,BSTEP OUT DX,AL CALL DELAY MOV AL,BSTEP+CSTEP OUT DX,AL CALL DELAY MOV AL,CSTEP OUT DX,AL CALL DELAY MOV AL,CSTEP+DSTEP OUT DX,AL CALL DELAY MOV AL,DSTEP OUT DX,AL CALL DELAY MOV AL,DSTEP+ASTEP OUT DX,AL CALL DELAY JMP K0,;双四拍工作方式:ABBCCDDAABSTEP4:MOV BX,5000H;设置延时时间 MOV DX,200H;PA口地址 MOV AL,ASTEP+BSTEP;PA0PA1(AB相)输出高电平 OUT DX,AL CALL DELAY;调延时 MOV AL,BSTEP+CSTEP;BC输出高电平 OUT DX,AL CALL DELAY;调延时 MOV AL,CSTEP+DSTEP;CD输出高电平 OUT DX,AL CALL DELAY;调延时 MOV AL,DSTEP+ASTEP;DA输出高电平 OUT DX,AL CALL DELAY;调延时 JMP K0;单四拍反转工作方式:DCBADSTEP41:MOV BX,1000H;设置延时时间 MOV DX,200H;PA口地址 MOV AL,DSTEP;D输出高电平 OUT DX,AL CALL DELAY;调延时,MOV AL,CSTEP;C输出高电平 OUT DX,AL CALL DELAY;调延时 MOV AL,BSTEP;B输出高电平 OUT DX,AL CALL DELAY;调延时 MOV AL,ASTEP;A输出高电平 OUT DX,AL CALL DELAY;调延时 JMP K0DELAY PROC NEAR;延时子程序 PUSH CX MOV CX,BXDD1:NOP LOOP DD1 POP CX RETDELAY ENDP;延时子程序结束CODE ENDS;代码段结束 END START,思考题与练习题(1)8255A有哪几种工作方式?有何差别?(2)8255A有哪些编程命令字?其命令格式及每位的含义是什么?试举例说明。(3)假定8255A的端口地址分别为208H20FH,编写下列各情况的初始化程序:将A口、B口设置成方式0,端口A和C作为输入口,B口作为输出口。将A口设置成方式1输入口,PC6、PC7作为输出端;B口设置成方式1,输入口。(4)8255A能实现双向传送功能的功能的工作方式为_。(5)在Inter8255A中可以进行按位置位/复位的端口是_。(6)8255A内部包括两组控制电路,其中A组控制_,B组控制_。(7)若8255A的端口A定义为方式0、输入,端口B定义为方式1、输出,端口C的上半部定义为方式0、输出,试编写初始化程序。(口地址为200H203H)(8)端口A工作于方式2,要求发两个中断允许,即PC4和PC6均需置位,端口B工作于方式1,要求使PC2置位来开放中断。,(9)一个交通灯微机控制模拟电路图如图5-18所示,8255A端口C的PC0位接开关K用来模拟十字路口支道车辆通行情况(开关状态“1”表示支道上有车辆要通行);端口A的PA2、PA1、PA0位用来控制主道的红(LED0)、黄(LED1)、绿(LED2)灯,端口B的PB2、PB1、PB0位用来控制支道的红(LED0)、黄(LED1)、绿(LED2)灯。平时主道放行(绿灯亮),支道禁止通行(红灯亮);当支道上有车辆要通过时(PC0端为“1”),主道交通灯由绿黄(延迟5秒)红(禁止),支道交通灯由红绿(放行);支道放行20秒后,其交通灯由绿黄(延迟5秒)红,然后主道放行;要求主道至少放行40秒。要求:画出实现上述控制过程的程序流程图;用汇编指令编程,并加简要注释。(10)利用8255A及其他所需器件设计一个竞赛抢答器(模拟)实验装置,逻辑开关信号K0K7代表竞赛抢答按钮07号,当某个逻辑开关置“1”时,表示某组抢答按钮按下,需在七段LED显示器上将其组号(07)显示出来,并响铃一下。设抢答按钮能及时复位,并假设任两个或两个以上按钮不会同时按下。要求:画出设计方案电路框图图;画出实现上述控制过程的程序流程图;用汇编指令编程,并加简要注释。注:数字符号07的LED显示控制码分别为:3FH,06H,5BH,4FH,66H,6DH,7DH,07H;控制码00H使LED各显示段熄灭。8255A的端口地点200H207H。,图5-18 交通灯微机控制模拟电路图,本章完see you,