版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编写8255A的A口和B口都工作在方程式1,采用中断方式输入数据的程序【参考答案】P83例77设8255A的口地址为:40H~43H,C口的PC6、PC7为输入,因A口、B口工作在方式1,故工作方式控制字为:10111110B,其中D0可为0或1,这里选为0。A口允许中断,PC4置1,控制字为09H。B口允许中断,PC2置“1”,控制字为05H。故初始化程序段如下:MOVAL,10111110B;写入工作方程式控制字OUT43H,ALMOVAL,09HOUT43H,AL;PC4置“1”,A口允许中断MOVAL,05HOUT43H,AL;PC2置“1”,B口允许中断8255A的方式0的应用实例【参考答案】P83例78设8255A的A口和B口工作在方式0,A口为输入端口,接有4个开关;B口为输出端口,接有一个七段发光二极管,其硬件连接电路如图46所示。试编一程序要求七段发光二极管显示开关所拨通的数字。本例中8255A的端口地址由两部分电路组成:由CPU地址线A15~A3通过74LS138译码器产生片选信号;CPU的地址线A2、A1分别组成4个端口地址,而CPU的A0与译码器输出端通过逻辑组合,保证8255A的四个端口地址为偶地址,这样8位的8255A与16位的8086CPU可以通过数据总线D7~D0传送8位信息,具体端口地址分配为:A口地址为8020H,B口地址为8022H,C口地址为8024H,控制口地址为8026H。从图可知,七段发光二极管为共阳极LED器件,要让a段亮点,要求从PB0段输出高电平“1”;要让b段熄灭,要求从PB1段输出低电平“0”,其余各段依次类推。8255A的A口接有开关,4位开关的组合可为0~FH。为此,我们可将在LED上显示0~FH的各字符代码列表见表2。表2显示字符代码表显示字符123456789ABCDEF0七段代码(H)065B4F666D7D077F6F777C395E79313F程序如下:APORTEQU8020HBPORTEQU8022HCONTREQU8026HDATASEGMENTTAB1DB3FH,06H,5BH,4FH.…DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,90H;设定8255A工作方式MOVDX,CONTROUTDX,ALADDR1:MOVDX,APORT;取开关值INAL,DXANDAL,0FH;屏蔽高4位MOVBX,OFFSETTAB1;取代码表首址XLAT;找到字符代码MOVDX,BPORT;输出显示OUTDX,ALMOVCX,0400H;显示延时ADDR2:DECCXJNZADDR2JMPADDR1CODEENDSENDSTART编写8255A用于LED显示器接口程序【参考答案】P85例798086CPU通过8255A同开关K与7段LED显示器的接口如图47所示。开关设置的二进制信息由8255A的B口输入,经程序转换为对应的七段LED的段选码(字形码)后,通过A口输出。由七段LED显示二进制状态值,试编写其控制程序。设8255A得端口地址为:端口A:0FFF8H端口B:0FFFAH端口C:0FFFCH控制口:0FFFEH为增加8255A的负载能力,所以A口经驱动器同七段LED显示器相连。由图47可见,8255A的地址线A1、A0分别同地址锁存器输出的A2、A1相连,故每个端口可有二个端口地址,如A口为0FFF8H和0FFF9H,可认为未参加译码的地址线A0为0的地址,所以通常使用0FFF8H地址。假设B口用输入,则8255A工作方式控制字为82H。程序如下:ORG2000H;从2000H开始存放数据MOVAL,82H;只工作方式控制字MOVDX,0FFFEHOUTDX,ALRDPORTB:MOVDL,0FAH;读入B口信息INAL,DXANDAL,0FH;屏蔽AL高四位,B口读入的信息只低四位有效MOVBX,OFFFSETSSEGCODE;地址指针BX指向段选码表首地址XLAT;[BX+AL]→ALMOVDL,0F8H;段选码→A口,由七段LED显示器显示OUTDX,ALMOVAX,56CH;延时,使读入的信息保持显示一段时间DELAY:DECAXJNZDELAYJMPRDPORTB;进入新一轮的操作HLTORG2500H;从2500H开始为段选码表如果要求LED显示器循环显示0-F十六个数字,每个数字显示10s,显示100遍。则控制程序为:ORG2000HMOVAL,82HMOVDX,0FFFEHOUTDX,ALMOVBX,100;循环100次DISFLOP:LEADI,SSEGCODE;指向段选码表MOVCX,16;显示字符个数LOPMOVAL,[DI];取显示字符送A口MOVDL,0F8HOUTDX,ALINCDI;修改显示指针CALLDELAY10s;延时10s字程序LOOPLOP;每遍循环16次DECBX;修改大循环指针JNZDISFLOPHLTORG2500HSEEGCODE:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,DB98H,88H,83H,DB0C6H,0A1H,86H,8EH编写用8255A按位置位/复位控制字控制发光二级管依次显示亮灭的程序【参考答案】P87例80利用8244A端口C的8根I/O线接8只发光二级管的正极(8个负极均接地),用按位置位/复位控制字编写使这8只发光二级管依次亮、灭的程序。设8255A的端口地址为480~483H。本例要使用8255A的两个控制字:方式控制字和按位置位/复位控制字。这两个控制字都写入到8255A的控制字寄存器,由它的D7位为1或0来区分写入的控制字是方式控制字还是按位置位/复位控制字。方式控制字只写入一次,其后写入的都是按位置位/复位控制字。首先用置位字01H点亮PC0所连接的发光二极管,然后将置位字01H改为复位字00H,熄灭该发光二极管。再将复位字00H改为置位字03H,点亮PC1所连接的发光二极管,又将置位字03H改为复位字02H,熄灭该发光二极管。置位和复位自己就这样交替变化如下:01H→00H→03H→02H→05H→04H→……→0FH→0EH→01H→……置位字和复位字周而复始地不断循环,即可使8只连接在PC端口的发光二极管依次亮灭。每一位的置位字改为复位字仅需将D0为由1变为0,这可用屏蔽D0为的逻辑与指令完成。把PCi的复位字改为PCi+1的置位字,要将D0位由0变为1,同时还要将D3~D13位加1,即要将D3~D0的4位加3,这可用加3的指令实现。这样不断地加3,其进位一定会使D7也变为1,致使置位字变成方式字,为了避免出现此情况,所以加3后还要将置位字的D7位或高4位清零,即和0FH逻辑与,该程序的流程图如图48所示。程序如下:MOVDX,383H;383H为控制字寄存器的端口地址MOVAL,80H;方式选择字OUTDX,ALMOVAL,1;PC0的置位控制字AGAIN:OUTDX,AL;点亮一只发光的二极管LOOP$;延时LOOP$ANDAL,0FEH;置位字改为复位字OUTDX,AL;熄灭点亮的发光二极管ADDAL,3;PCi→PCi+1,复位字改为下一位的置位字ANDAL,0FH;保持D7为0PUSHAXMOVAH,11;检查按键有无输入IVT21H;无,0送AL,有,-1送ALINCALPOPAXJNZAGAIN编写8255A工作在方式0、方式1和方式2等不同形式的初始化程序【参考答案】P88例81假设8255A端口A地址为0500H,是编写8255A工作在以下方式:将A组和B组置成方式0,端口A和C作为输入端口,端口B作为输出端口;将A组置成方式2,B组置成方式1,端口B作为一个输出端口;将A组置成方式1,且端口A作为输入端口,可PC6和PC7作为输出;B组置成方式1,且端口B作为输入端口。以下为8255A工作在上述三种情况下的方式控制字及程序。方式控制字为:10011001B即99H程序为:MOVDX,0506H;控制端口地址0506H送DXMOVAL,99HOUTDX,AL方式控制字为:11XXX10XB,其中X为0或1任意,将X设为0则方式控制字为11000100B,即C4H程序为:MOVDX,0506HMOVAL,0C4HOUTDX,AL方式控制字为:1011011XB或10110110B即B6H。因为B口设定为方式1输入,所以PC2~PC0已自动确定了输入/输出;端口A被设定为方式1输入,所以PC3自动作为中断请求线,因此PC3~PC0不受D0位控制。程序为:MOVDX,0506HMOVAL,0B6HOUTDX,AL发光二级管(L0~L7)不断显示对应开关(S0~S7)的通断状态应用实例8086CPU通过8255A同发光二极管L0~L7一级开关S0~S7的接口电路如图49所示。要求:S0~S7的状态每隔半分钟改变一次,把每次变化的状态记录在从2000H:1000H开始的内存单元中;S接通时,对应的L熄灭,S断开时,对应的L发亮(即S0断开,L0发亮;S0接通,L0熄灭);连续工作24h结束。用汇编语言编写的控制程序如下,请填上程序中的空缺的部分(包括指令,操作数或标号,初始化时无关项置“0”)。START:MOVAL,______;初始化MOVDX,____________DX,ALMOVAX,______MOVDS,AXLOP:MOVCX,______;工作24hLOP1:MOVBX,______LOP2:MOVDX,______;读PA口______AL,DXMOV[BX],AL;存S0~S7INC______XORAL,;写PB口MOVDX,______DX,AL____________________________CALLDELAY30s____________________________LOOP___________HLT【参考答案】P89例828255A端口地址计算:A8A7A6A5A4A3A2A1A01100100××端口地址为190H~193H8255A初始化MOVAL,10010000B;PA口工作于方式0,输入MOVDX,193H;PB口工作于方式0,输出OUTDX,AL开关状态记录存放在内存2000H:1000H开始的内存单元中,必须对DS赋值,指令为:MOVAX,2000HMOVDS,AX开关状态每隔半分钟(30s)改变一次,控制电路连续工作24h,则采样次数为24h/30s=24×60×60s/30s=2880次。要求开关S接通,对应灯熄灭,开关S接通时输入“0”,而灯熄灭要输出“1”,因此必须将PA口读入内容取反后输出到PB口。调用子程序前必须保护现场,返回子程序前必须恢复现场。这里的现场即子程序中所用到的寄存器。程序中空缺部分的答案为:90H193HOUT2000H28801000H190HINBX0FFH191HOUTPUSHBXPUSHCXPOPCXPOPBXLOP2[注] 延时30s子程序DELAY30SPROCMOVBX,3000DELAY:MOVCX,2801WAIT:LOOPWAITDECBXJNZDELAYRETDELAY30sENDP编写8255A以查询方式作为打印机接口的程序【参考答案】P92例83图50是用8255A的PA口作为输出打印数据口,工作方式0,PC口高4位工作于输出方式,PC6产生信号;PC口低4位工作于输入方式,PC2接收打印机的BUSY信号。设打印字符存放在数据段中有效地址为2000H的内存单元,8255A的端口地址为80H~83H。8255A的初始化程序:MOVAL,81HOUT83H,ALMOVAL,0DHOUT83H,ALTESBY:INAL,82HTESTAL,04HJNZTESBYMOVAL,[2000H]OUT80H,ALMOVAL,0CHOUT83H,ALINCALOUT83H,ALRET主程序:MOVAL,15HOUT43H,ALMOVAL,50HOUT40H,ALSTILOP:HLTJMPLOP中断服务程序为:MOVAL,01HOUT80H,ALMOVAL,77HOUT43H,ALMOVAL,50HOUT41H,ALMOVAL,72HOUT41H,ALCALLDLSSMOVAL,00HOUT80H,ALIRET编写8255A以中断方式作为打印机接口的程序【参考答案】P93例848255A工作方式1,其电路如图51所示,这中断向量为2000H:3000H,在2CH、2DH、2EH、2FH中端口地址设为E0H、E2H、E4H、E6H,控制程序如下:START:MOVAL,84HOUT0E6H,ALMOVAL,0BHOUT0E6H,ALXORAX,AXMOVDS,AXMOVAX,3000HMOVWORDPTRDS:[002CH],AXMOVAX,2000HMOVWORDPTRDS:[002EH],AXMOVAL,05HOUT0E6H,ALSTI…ROUTINI1R:MOVAL,[DI]OUT0E0H,ALMOVAL,0AHOUT0E6H,ALINCALOUT0E6H,AL…LRET通过8255A接口控制8个发光二极管亮、暗的应用实例【参考答案】P94例85通过8255A端口A输出控制8个发光二极管的亮和暗,接口连接如图52所示,8255A的端口地址为80H~83H。要求L7~L0每隔3s点亮1次,点亮的顺序为:L7→L6→L5→L4→L3→L2→L1→L0→L7……周而复始。写出8255A的方式控制字和初始程序,并加以注释。写出题意要求的程序。根据图52可知:设置端口A为方式0输出,其余任意,方式控制字为:1000000即80H--------------------------------标志位A口方式0输出任意初始化程序如下:MOVAL,80H;设置8255A方式控制字OUT83H,AL根据题意可知:8个发光二极管L7~L0为共阳极接法,当PAi输出为“0”时,发光二极管亮;输出为“1”时,发光二极管灭。当L7亮时,其余LED都为暗,所以端口A的控制字为:01111111B,即7FH.因为显示顺序是L7→L6→L5→L4→L3→L2→L1→L0→L7……因此每隔3s,是控制字右移一位,即“0”往右移,程序如下:MOVAH,7FHLOOP:MOVAL,AHOUT80H,AL;使L7亮控制字输出CALLDELAY3s;延迟3sRORAH,1;控制字小循环右移1位JMPLOOP利用8255A作为两机并行通信接口的应用实例【参考答案】P95例86两台PC机通过8255A构成的借口实现并行传送数据,A机发送数据,B机接收数据。A机一侧的8255A工作于方式1输出,B机一侧的8255A工作于方式0输入。两机的CPU与8255A之间均采用查询方式交换数据。假设两台机传送1KB数据,发送缓冲区为0300:0000H,接收缓冲区为0400:0000H。硬件连接如图53所示A机是发送,所以把A机一侧8255的A口设定为方式1输出,从PA7~PA0引脚上发送由CPU写入A口的数据,而PA7和PA6引脚作为联络线和。B机是接收数据,将B机一侧的A口设定为方式0输入,由PA7~PA0接收A机送来的数据,而选用PA4和PA0作为联络线。假定A、B两机的通信接口8255的A端口地址均为300H~303H,驱动程序如下:A机的发送程序段:…MOVAX,0300HMOVES,AX;设A机发送缓冲区段基址MOVBX,0;设A机发送缓冲区偏移量MOVCX,3FFH;置发送字节计数器;对8255A初始化MOVDX,303H;指向8255A控制口MOVAL,10100000H;设A口为方式1输出OUTDX,ALMOVAL,00001101B;这发送中断允许INTEA=1OUTDX,AL;发送第一个数据MOVDX,300H;向A口写第一个数据,产生第一个信号,送给对方以便获取对方的MOVAL,ES:[BX]OUTDX,ALINCBX;缓冲区指针+1DECCX;计数器减1LOOP0:MOVDX,302H;指向8255A状态LOOP1:INAL,DX;查询发送中断请求INTRA=1?ANDAL,08H;PC3=INTRA=1?JZLOOP1;若无中断请求则等待MOVDX,300H;有请求向A发送数据MOVAL,ES:[BX];从缓冲区取数据OUTDX,AL;通过A口送第二个数据INCBX;缓冲区指针加1DECCX;字节计数器减1JNZLOOP0;字节未发送完继续MOVAX,4C00H;功能调用号INT21H;已完,返回DOSB机接收程序段:…MOVAX,0400H;接收缓冲区段基地址MOVES,AXMOVBX,0;接收缓冲区偏移量MOVCX,3FFH;接收字节计数器;8255A初始化MOVDX,303H;8255A控制口MOVAL,10011000B;A口和C口高4位为方式0输入,C口低4位为方式0输出OUTDX,ALMOVAL,00000001B;置PC0==1,表示尚未接收数据OUTDX,ALLOOP0:MOVDX,302H;指向C口LOOP1:INAL,DX;查A机的(PC4)=0?ANDAL,10H;即查A机是否发来数据?JNZLOOP1;若为发来数据,则等待MOVDX,300H;发来数据从A口读数据INAL,DXMOVES:[BX],AL;存入接收缓冲区MOVDX,303H;产生信号,并发回B机MOVAL,0;PC0置“0”OUTDX,ALNOP;负脉冲宽度NOPMOVAL,01H;PC0=1OUTDX,ALINCBX;缓冲区指针加1DECCX;计数器减1JNZLOOP0MOVAX,4COOHINT21H;送完返回DOS8255A通过开关控制红、绿、黄灯的亮、暗的应用实例用8255A控制一组红、绿、黄灯(见图54),反复检测K1、K2,要求由K1、K2的闭合和断开,控制红、绿、黄三灯的点亮。当K1合,K2合时,黄灯亮;K1合,K2断时,红灯亮;K1断,K2合时,绿灯亮;K1断,K2断时,黄灯亮;已知8255A的端口地址为60H~63H,试编写初始化程序及控制程序。【参考答案】P97例87初始化程序如下:MOVAL,90H;初始化OUT63H,ALLOP:INAL,80HANDAL,03HJZL3;K1、K2全合CMPAL,03HJEL3;K1、K2全断CMPAL,02HJEL2;K1合、K2断CMPAL,01HJEL1;K1断、K2合JMPLOPL1:MOVAL,02H;亮绿灯OUT62H,ALJMPLOPL2:MOVAL,01H;亮红灯OUT62H,ALJMPLOPL3:MOVAL,04H;亮黄灯OUT62H,ALJMPLOP编写8255A的端口C的PC7上产生一个窄的正脉冲程序【参考答案】P98例88设控制口地址为00FE。只要用对端口C的置位/复位命令,先使PC7置位,然后再使它复位即可。程序如下:MOVDX,00FEH;8255A的控制端口地址送DXMOVAL,0EH;对PC7置0的控制字OUTDX,AL;输出对PC7置0的控制字MOVAL,0FH;对PC7置1的控制字OUTDX,AL;输出对PC7置1的控制字MOVAL,0EH;对PC7置0的控制字OUTDX,AL;输出对PC7置0的控制字编写8255A工作于方式0,端口A和一个字符打印机相连,端口B和一个纸带输入机相连的初始化和驱动程序端口C作为联络信号,PC6作为打印机的选通信号,PC2作为打印机的忙信号,PC4作为纸带输入机的应答信号,PC0作为纸带输入机的准备好信号(见图55)。端口地址为0E4H~0E7H,试列写初始化程序和驱动程序。【参考答案】P98例89方式选择和初始化端口A:方式0,输出。端口C:高4位方式0,输出。端口B:方式0,输入。端口C:低4位方式0,输入。INITCPROCMOVAL,83H;送控制字OUT0E7H,ALMOVAL,0DH;PC6置1、启动字符打印机OUT0E7H,ALMOVAL,09H;PC4置1OUT0E7H,ALRETINITCENDP打印机驱动程序LESTPROCLP1:INAL,0E6H;读PC2状态,忙,等待ANDAL,04HJNZLP1MOVAL,X;不忙,送字符到打印机OUT0E4H,ALMOVAL,0CH;PC6置0OUT0E7H,ALMOVAL,0DH;PC6置1,重新启动OUT0E7H,ALRETLPSTENDP纸带输入机驱动程序RDSTPROCRD1:MOVAL,04H;PC4置0OUT0E7H,ALBLP:INAL,OE6H;读PC0状态没准备好,等待ANDAL,01HJNZRLPINAL,0E5H;准备好,从端口读入一个字符MOVX,ALMOVAL,09H;PC4置1,通知输入机已取走数据OUT0E7H,ALRETRDSTENDP8255A工作在方式1控制微型打印机的应用实例在某一8086系统中接有一个µ80微型打印机,8255A作为输出接口,工作在方式1选通方式,试编写一程序将缓冲区BUFF内的200HB的ASCII码送打印机,其接口电路如图56所示。当打印机的信号为低电平有效信号时,数据线D7~D0上的数据被锁入µ80打印机内待打印,同时,打印机输出低电平信号通知8255A,数据已取走。由于打印机的速度远低于CPU的执行速度。因而,打印机在打印某数据时,会发出BUSY“忙”信号,此时,CPU不能向8255A输出数据,一定要等待BUSY信号为低电平无效信号,CPU才能再次输出数据到8255A。在此例中,利用查询BUSY信号完成CPU与µ80打印的数据交换。【参考答案】P100例90APORTEQU0FFF8HCPORTEQU0FFFCHCONTREQU0FFFEHDATASEGMENTBUFFDB200HDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAOUTDS,AXMOVCX,200H;字节长度MOVAL,0A8H;8255A控制字MOVDX,COUNTROUTDX,ALMOVDI,OFFSETBUFFABC1:MOVAL,[DI];ASCII码输出MOVDX,APORTOUTDX,ALMOVDX,CPORTABC2:INAL,DX;查信号ANDAL,80H;变高了吗JZABC2;否,再查ABC3:INAL,DX;查BUSY信号ANDAL,10H;BUSY变低了吗?ANZABC3;否,再查INCDI;是,传送下一个数LOOPABC1HLT编写8255A作为中断方式的打印机接口的程序【参考答案】P101例91把8086CPU给出的字符送到打印机上打印,接口与打印机的连接如图57所示。8255A的端口A工作在方式1的输出。PC7为信号输出端(此例未用),PC6则为信号输入端,PC3位INTRA信号输出端。打印机需要一个数据选通信号,用CPU控制PC0来产生选通脉冲(用软件实现单脉冲发生器功能)。PC3接到8259A的中断请求信号IR3输入端。对应的中断类型号为0BH,中断向量(中断服务程序入口的段址和偏移地址),为1000H:2000,存放在0000H段从0BH×4开始的连续4个字节单元,即2CH、2DH、2EH、2FH中。设8255A端口A、B、C及控制口的地址分别为C0H、C2H、C4H和C6H。根据以上要求,方式控制字设计为A0H,即A组方式1,端口A输出,端口C的低4位输出(只用PC0),控制字的D3~D1为可任选(为000)。字符打印程序分成主程序和中断服务程序两部分。主程序完成对8255A的初始化、开放CPU可屏蔽中断和8255A端口A的中断,并将要打印的第一个字符送打印机。主程序段:MAIN:MOVAL,0A0H;设置8255A的控制字OUT0C6H,ALMOVAL,01;使PC0为1,选通无效OUT0C6H,ALPUSHDSXORAX,AX;设置中断向量MOVDS,AXMOVAX,2000HMOV[002CH],AXMOVAX,1000HMOV[002EH],AXPOPDSMOVAL,0DH;使PV6=1,允许端口A中断OUT0C6H,ALSTI;开放CPU中断INT0BH;输出第一个字符中断向量的装入过程也可以由AH=25H的系统功能调用实现。中断服务程序完成对字符的输出。中断服务主要程序段:MOVDI,POINTER;装入指针MOVAL,[DI];取字符送端口AOUT0C0H,ALMOVAL,00;使PC0=0,产生选通信号OUT0C6H,ALINCAL;使PC0=1,选通无效OUT0C6H,ALINCDI;修改指针并保存MOVPIONTER,DI…;后续处理ITET设定字符已存放在输出缓冲区。在中断服务程序中,输出字符时,CPU对端口C的相应位PC0设置为0,发出选通信号,从而将数据送到打印机。当打印机接受并打印字符后,发出应答信号,由此清除8255A的“输出缓冲器满”信号,并使8255A产生新的中断请求。如果中断是开放的,CPU便响应中断,再次进入中断服务程序,向打印机输出字符。8255A工作在方式0和方式1下分别与打印机接口的例子8255A与打印机的连接如图58所示,利用8255A工作在方式0(见图58a)实现打印机接口,将字符A送打印机,试编写出初始化程序和打印程序。如果采用8255A方式1(见图68b)与打印机相连,再编写初始化程序。【参考答案】P103例928255A工作于方式0:MOVAL,83HMOVDX,0383HOUTDX,AL;设方式0A口输出上C口输出下C口输入DEXDXWAIT:INAL,DXANDAL,04HJNZWAIT;测PC2,检查打印机忙闲MOVAL,‘A’MOVDX,0380HOUTDX,AL;若闲,输出字符“A”MOVAL,40HADDDX,2OUTDX,ALMOVAL,0OUTDX,AL;利用负脉冲将数据所存于打印机,进行处理8255A工作于方式1:MOVDX,0383HMOVAL,0A0HOUTDX,AL;设A口为方式1输出MOV0DHOUTDX,AL;PC6置1编写8255A作为打印机接口打印出26个小写英文字母的程序用8255A作接口芯片,传送数据给打印机,8255A工作在方式1,中断申请线连接到8259A的IR3端,打印出26个小写英文字母。程序流程如图59所示。【参考答案】P104例93DATASEGMENTTAB:DB41H,42H,43H…;英文26个字母的代码DATA:ENDSCODESEGMENTASSUMECS:CODE,DS:DATE主程序初始化:START:PROCFARPUSHDS;保存DOS初始化数据SUBAX,AXPUSHAXMOVDX,D2F6H;8255A控制口地址送DXMOVAL,A0H;设置8255A工作方式控制字OUTDX,ALMOVAL,01H;使PC0置1,选通无效,关闭打印机OUTDX,ALMOVAL,0CH;使PC6置1,使INTE=0,不允许端口A输出中断OUTDX,ALMOVAX,2000H;设置中断服务程序如口地址偏移量MOVWORDPRT[002CH],AX;设置存入中断矢量表中MOVAX,1000H;设置中断服务程序所在段地址MOVWORDPTR[002EH],AX;存入中断矢量表中MOVAL,0BH;设置ICW1控制字MOVDX,0020H;设置8259A偶地址MOVDX,ALMOVAL,0BH;设置ICW2,产生中断类型号MOVDX,0021H;设置8259A奇地址OUTDX,ALMOVAL,0FH;设置ICW4控制字OUTDX,ALMOVDS,DATA;取数据区所在段段地址LEADI,TAB;取数据区所在段的偏移地址MOVAH,1AH;设置计数器(取数次数)MOVDX,02F6H;设置8255A控制口地址MOVAL,0DH;设置端口A为中断允许OUTDX,ALSTI;开中断AA:CMPAH,00HJNZAAAA1;JMPAA1中断服务程序:ORG12000HCLI;关中断MOVAL,[DI]MOVDX,02F0HOUTDX,AL;送数据到A口MOVAL,00H;使PC0置0,选通打印机MOVDX,02F6HOUTDX,AL;启动打印机MOVAL,01H;使PC0置1OUTDX,AL;关打印机INCDIDECAHSTI;开中断IRET编写8086CPU用查询方式通过8255A并行接口控制一台控制台打印机的程序8255A的端口A作为打印机接口工作方式1,输出方式;端口B作为键盘输入端口,工作与方式1,输出方式;端口C作为控制和状态端口,其控制信号和状态信号为:PC7自动作为,PC6自动作为ACKA,PC2自动作为;PC1自动作为;PC3和PC0分别自动作为INTRA和INTRB。设定PC4作为8255A送给打印机的输出选通信号,由对端口C的PC4置位/复位控制字来设定,如图60所示。要求从控制台打印机键盘键入100H个ASCII码,通过8255A的端口B送入CPU,并转入首地址为2000H开始的存储区,接着再通过8255A的端口A将它们送至打印机打印输出。【参考答案】P106例94根据8255A端口A工作于方式1,输出;端口B工作于方式1,输出;端口C各位功能已定,D0、D3已不起作用,写成0。故方式控制字为A6H。设8255A个端口地址如下:端口A FFF8H端口B FFFAH端口C FFFCH控制端口 FFFEH控制台打印机程序流程图如图61所示。源程序如下:MOVSI,2000H;SI←200HMOVDI,SI;DI←SIMOVCX,100H;CX←100HMOVAL,0A6H;方式控制字A6H送ALMOVDX,0FFFEH;控制端口地址送DXOUTDX,AL;A6H送控制寄存器MOVDL,0FEH;控制端口低8位地址送DLMOVAL,09H;端口C置位/复位控制字送ALOUTDX,AL;PC4置1MOVDL,0FCH;端口C低8位地址送DLONEINAL,DX;读端口C状态字ANDAL,01H;测试IBFB(PC1)=1吗?JZONE;若IBFB=0,转至07CBH单元MOVDL3,0FAH;否则,端口B低8位地址送DLINAL,DX;读端口B的内容STOSB;[DI]←ALTWO:MOVDL,0FCH;DL←FCHINAL,DX;读端口C状态ANDAL,80H;测试(PC7)=1否?JZTWO;若=0。转至TWOLODSB;否则,AL←[SI]MOVDL,0F8H;端口A低8位地址送DLOUTDX,AL;AL的内容送端口AMOVDL,0FEH;DL←FEHMOVAL,08;对PC4置0的控制字送ALOUTDX,AL;PC4置0MOVAL,09;对PC4置1的控制字送ALOUTDX,AL;PC4置1LOOPONE;若CX-1≠0转至07CBH单元HLT;否则,暂停编写利用8255A组成键盘扫描接口的程序利用8255A作为微处理器组成的非编码键盘矩阵结构如图62所示。图62中8255A的端口A工作在方式0,为输出接口,端口B工作在方式0,为输入接口。在按下一个键时,与之对应的行和列短接形成通路,通过查找闭合键所在的行和列的位置,程序就能决定被按下键所代表的代码。程序按四个功能编写:从8255A的A口输出代码,选通键盘阵列的各行(设各行为低电平‘D’),从8255A的B端口输入各列状态,哪根列线上为“0”,则哪列线上有键按下。有键按下,延时以消除抖动,无键压下则等待按键。有键按下,消抖动后再进行逐行扫描,即先选通第0行,检查各列有无键压下,在选通第1行,检查各列有无键按下,直到各行选通一次,无键压下,再等待按键,在扫描过程中,可以确定被按下键的行值和列值。将键的行值和列值转换成十六进制键号,并转去完成各种键的功能程序。【参考答案】P108例95程序如下:PORTAEQU0FF8HPORTBEQU0FFAHPORTCEQU0FFCHCONTREQU0FFEH…MOVDX,CONTRMOVAL,10000011B;8255A控制字OUTDX,ALWAIT:MOVDX,PORTAMOVAL,0FFH;选通各行OUTDX,ALMOVDX,PORTBINAL,DX;检查各行CMPAL,0FFH;有键压下吗?JEWAIT;否,等待按键MOVBL,0;BL中置键号初值MOVBH,01H;逐行扫描MOVCX,8;设置行计数器FNDROW:MOVAL,BHMOVDX,PORTAOUTDX,ALROLBH,1;选通下一行MOVDX,PORTBINAL,DX;取列值CMPAL,0FFH;有键压下吗?JNZFNDCOL;有,转找键值ADDBL,8;无,则选通下行,键号增加LOOPFNDROW;循环扫描8行JMPDONE;转无键按下处理FNDCOL:RORAL,1;处理方法按键的列值JNCRIGHT;找到对应该列的键号INCBL;BL中键号加1JMPFNDCOLRIGHT:MOVAL,BL;找到键号送AL中…DONE:转显示程序等待按键8255A在PC机中的应用【参考答案】P110例968255A在PC机中,A口用于输入,读取键盘扫描码;B口用于输出,输出一些控制信号,其控制信号作用见表3;C口用于输入,主要用来读取系统配置开关DIP的情况,也用来读取一些存储器和外设的状态(表4)。82545A在PC机中应用的连接电路如图63所示。表3 8255A在PC机中B口各位作用表B口管脚作用PB0为8253提供门控信号GATE2PB1扬声器发音时间控制PB2备用PB3读取系统配置开关DIP状态控制PB4允许读/写存储器PB5允许I/O通道控制信号PB6提供键盘发送控制信号PB7提供键盘发送控制信号表4 8255A在PC机中C口各位的用途C口管脚用途PC0接收DIP开关1的状态PC1接收DIP开关2的状态PC2接收DIP开关3的状态PC3接收DIP开关4的状态PC4输入,检查扬声器状态PC5接收8253通道2的输出PC6用于I/O通道检查PC7读/写存储器PCK由图62可知,8255A的C口的低4位用来读取外设配置开关,开关DIP有8位,由PC3来控制分两次读入,当PC3为“0”,选通74LS244读取DIP的低4位开关值;PC3为“1”,禁止74LS244,可读取DIP的高4位开关值。系统配置情况和DIP开关状态如下:开关1:OFF——8255A的A口工作在普通方式 ON——在上电时,系统循环自检方式开关2:OFF——系统中有些处理器8087 ON——系统中无些处理器8087开关4和开关3的组合状态对应系统板上的RAM容量开关4开关3RAM容量ONON64KBONOFF128KBOFFON192KBOFFOFF256KB开关6和开关5的组合状态对应显示器适配板的类型开关6开关4类型ONON未插显示器适配板ONOFF40×25彩色适配板OFFON80×25彩色适配板OFFOFF单色显示器适配板开关8和开关7的组合状态对应于软盘驱动器的个数开关8开关7驱动器个数ONON1ONOFF2OFFON3OFFOFF4用户可根据具体配置情况,将DIP的对应位置插到相应的状态。编写8255A用作2764EPROM编程接口程序【参考答案】P112例97如图64所示,2764是8KB×8位可用紫外线擦除,可编程的EPROM存储芯片。对该芯片写入(编程)时,需要在Vpp上加上21~25V的变成电压,在上提供宽度在25ms以上的编程脉冲。CPU采用8086微处理器,8255A的A1,A0分别接地址总线的A2、A1。8255A的4个端口地址均为偶地址,编程数据由端口B输出。由于2764有13位地址,所以其编程地址必须用8255A的两个端口分两次传送给2764。本例用端口A的PA7~PA0和端口C的PC4~PC0共13位编程地址。另外,用PC5和PC6作为2764的片选信号和编程脉冲输入信号,用PC7作为2764的编程电压的控制信号,它经反相器和晶体管将所需的编程电压加到2764的Vpp引脚。于是PC7、PC6、PC5为010时,实施对2764的编程写入。设8255A的端口地址为0F8H~0FEH,编程数据放在8000H开始的8KB缓冲器内。对2764编程程序如下:START:MOVBX,0000H;置2764初始地址MOVDL,8000H;置编程内存数据源地址MOVCX,2000H;置编程数据字节数(8KB)MOVAL,80H;8255A方式控制字,A、B、C口为方式0输出OUT0FEH,AL;输出8255A方式控制字LOP:MOVAL,BLOUT0F8H,AL;A口输出低8位编程地址MOVAL,[DI]OUT0F8H,AL;B口输出编程数据字节MOVAL,BH;取高5位编辑地址ORAL,40H;使PC6置1,发编程脉冲OUT0FCH,AL;C口输出高5位编程地址和编程控制信号CALLDL50MS;调用50ms延时子程序MOVAL,BH;取高5位编程地址ORAL,40H;D7置1,D6保持0OUT0FCH,AL;PC7置1撤消编程电压,PC6清0,撤消编程脉冲INCBX;2764编程地址加1INCDI;编程数据源地址加1LOOPLOP…DL50MS:PROC;临时子程序PUSHCXMOVCX,9CT:MOVAX,0560HBT:DECAXJNZBTLOOPCTPOPCXRETDL50MSENDP编写系统配置开关DIP状态测试程序图65为8255A在PC机系统上的部分电路图,其中8255A中的B口为输出,C口为输入,C口的高4位为一些状态测试位,低4位与系统板上的DIP系统配置开关相连接。现要读取8个DIP开关的状态,放入DIP-STATE内存单元。已知8255A的地址空间为060H~063H,试按要求编写程序。【参考答案】P114例98根据题意要求,程序如下:MOVAL,89H;设置方式控制字;方式0,B口输出,C口输入OUT63,ALMOVAL,0A5HOUT61H,ALINAL,62HANDAL,0FHMOVAH,ALMOVAL,0ADHOUT61H,ALNOPINAL,62HMOVCL,4ROLAL,CLANDAL,0F0HORAL,0AHMOVDIP_STATE,AL……编写报警系统模型程序图66所示为一报警系统模型,如果微型导线被碰断,则扬声器发出报警声(连续的脉冲)。已知8255A的端口地址为20H~23H,A口和B口到工作于方式0,输出。【参考答案】P115例99该报警系统工作原理是:平时PC7为0,程序不断检测PC7,当PC7一旦变成高电平,就说明微型导线被碰断,这时,从PC0输出连续的脉冲扬声器发生警报,频率可通过DLAY(延时)子程序来调整。程序段如下:MOVAL,88HOUT23H,AL;写控制字MOVAL,00OUT23H,AL;使PC0置0,放大器不工作WAIT:INAL,22HTESTAL,80HJZWAIT;测试PC7=0?LOP:MOVAL,01OUT23H,AL;PC7=0,输出PC0=1,扬声器发声CALLDLAY;控制发声频率MOVAL,00OUT23H,ALCALLDLAYJMPLOP编写8255A作为连接A/D接口的程序(一)图67中,82555A作为连接A/D转换器的借口,工作于方式0,设8255A的端口地址为:0F0H~0F3H。【参考答案】P116例100MOVAL,9AH;控制字→ALOUT0F3H,AL;输出控制字MOVAL,01HOUT0F3H,AL;设PC0,启动ADCMOVAL,00HOUT0F3H,AL;复位PC0LP:INAL,0F2H;取EOC信号ANDAL,10HJZLP;如果ECO=0,循环INAL,0F0H;读采样结果MOV[BX],AL;保存INCBX;修改指针编写8255A作为连接A/D接口的程序(二)如图68所示,8255A的A口工作于方式1,为输入口,端口C的PC7位设定为输出端,与A/D转换器的变换启动信号相连,由PC7端产生正脉冲信号以启动A/D转换。A/D的忙端经反向后作为采样保持电路的控制信号,并且忙端经下降沿触发单稳态电路,再经反向输出一个负方波到PC4端,作为端口A的数据输入所存信号,将A/D转换结果存入A的数据输入锁存信号,将A/D转换结果存入A口的数据输入寄存器。设8255A、B、C和控制寄存器的I/O地址分别为:300H、301H、302H和303H。试写出8255A的初始化程序及启动A/D转换的程序。【参考答案】P116例1018255A的初始化程序MOVDX,303HMOVAL,0B0HOUTDX,AL启动A/D变换及读取转换数据MOVDX,303HMOVAL,0FHOUTDX,ALMOVAL,0EHOUTDX,AL;送置位/复位空控制字,在PC7上产生一个正方波输出,启动ADCMOVDX,302HAGAIN:INAL,DXTESTAL,10HJZAGAIN;等待A/D转换结果MOVDX,300HINAL,DX;从A口读取转换数据8255A用作A/D和D/A转换子系统得接口,试编写程序如图69所示,要求如下:A/D转换器能将输入的模拟电压信号转换成数字量,它的工作由8255A的PC7线输出的正脉冲启动,转换出来的8位数字量由8255A的端口A输入。采样保持其能使在A/D转换期间,输入的模拟电压信号保持稳定不变。A口工作于方式1输入,不采用中断方式。即PC4是它的选通输入控制信号信号端,PC3是它的输入缓冲器满指示信号IBFA信号端,PC5的状态供CPU查询用。A/D转换器收到PC7送来的转换命令信号后,转换过程开始。此间,“忙”信号变成1,“忙”信号一方面经反相器送至采样保持器的S/H端,在“忙”信号高电平时,使输入的模拟电压信号保持稳定。另一方面,“忙”信号也送至一个负沿触发的单稳电路。当A/D转换结束时,“忙”信号变低,此负沿信号触发单稳电路,给PC4线上送一负脉冲,从而将转换好的数据所入A口的数据缓冲器,并使PC5(IBFA)变高。CPU不断查询IBFA的状态,当其为1时,表示A口输入缓冲器满,于是CPU将此数据输入,从而完成一次A/D转换输入过程。B口工作于方式0输出。D/A转换器能将数字量转换成模拟量送给外设。CPU向D/A转换器输出一个字节的数据,就会立即被转换成一个模拟信号。设此8255A的端口地址为:端口A:01F8H端口B:01F9H端口C:01FAH控制口:01FBH8255A的工作方式控制字为:D7D6D5D4D3D2D1D010110000方式标志A口方式1A口输入C口高4位输出B口方式0B口输出C口低4位输出【参考答案】P117例102程序如下:MOVDX,01FBHMOVAL,0B0H;置8255A工作方式控制字OUTDX,ALMOVAL,00001111B;启动A/D转换器OUTDX,ALDECALOUTDX,ALMOVDX,01FAHAGAIN:INAL,DXTESTAL,00100000B;转换完否JZAGAIN;没转换完,则等待MOVDX,01F8H;否则将数据输入INAL,DX…从寄存器AL向D/A转换器输出一个字节的数据MOVDX,01F9HOUTDX,AL简述16位系统中并行接口的特点【参考答案】P119例10316位微机系统的输入与输出接口需要用2片8255A芯片构成,一片为偶地址端口,另一片为奇地址端口。偶地址端口的8255A芯片由CPU的地址线A0参与片选择码。其8位数据线同CPU的低8位数据线D0~D7相连;奇地址端口的8255A由CPU的总线高允许,参与片选译码,其8位数据线同CPU的高8位数据线D8~D15相连。8086CPU可以对一个8255A的各端口进行8位字节信息传送,也可以对2个8255A的对应2个端口(两个PA口,或两个PB口,或两个PC口)用一个总线周期实现偶地址字的传送。编写8255A作主、从两个CPU系统的接口的程序使用两台CPU系统,传送100个数据,一台为主机CPU,相应的接口称为主侧,另一台为从CPU,其相应得借口称为从侧。主机CPU以中断方式输入输出数据,主侧8255A工作在方式2,从机CPU采用查询式输入输出数据。从侧8255A工作在方式0(两侧8255A地址都是04A0H~04A6H)。【参考答案】P119例104表5列出了主系统和从系统工作关系。硬件电路设计如图70所示。程序流程图如图71所示。表5 主、从系统工作关系状态口意义主系统从系统IBF=1输入缓冲内有数据主CPU可执行输入指令从CPU不能输出数据IBF=0输入缓冲内无数据主CPU不可输入数据从CPU执行输出指令OBF=1输出缓冲器内无数据主CPU可执行输出指令从CPU不能取数据OBF=0输出缓冲器内有数据主CPU不可输出数据从CPU执行输入指令MOVBL,64H;输入100个数计数器MOVCL,64H;输出100个数计数器MOVSI,0100H;输出数据所在内存单元首址送SIMOVDI,0200H;输入数据所在内存单元首址送DIMOVDX,04A6H;8255A控制口地址送DXMOVAL,0C0H;工作方式2控制字写入A口MOVDX,ALMOVAL,09H;PC4=1,允许输入中断MOVDX,ALMOVAL,0DH;PC6=1,允许输出中断STI;开中断AA5:CMPBL,00HJNZAA5CMPCA,00HJNZAA5CLI;关中断HALT…中断服务程序INT:MOVDX,04A4H;8255A状态口地址(C口)送DXINAL,DX;采集8255A状态口的状态值MOVAH,AL;保存状态ANDAL,20H;判断输入缓冲器是否满(PC5)JZAA1;IBF=0,无数据,转走MOVDX,04A0H;A口地址送DXINAL,DX;输入缓冲器满IBF=1,取数据MOV[DI],AL;保存数据INCDI;修改地址指针DECBLJMPAA2AA1:MOVAL,AHANDAL,80H;判断输出缓冲器是否满JZAA2;OBF=0,满,有数据,转向AA2MOVDX,04A0H;A口地址送入DXMOVAL,[SI];OBF=1,输入缓冲器空,取数据OUTDX,AL;输出数据INCSI;修改地址指针DECCLAA2:STIIBET从机程序MOVSI,0100H;源数所在的存储单元首地址送SIMOVDI,0200H;目标数所在的存储单元首地址送DIMOVBL,64H;设置输入数据个数计数器MOVCL,64H;设置输出数据个数计数器MOVDX,04A6H;8255A控制口地址送DXMOVAL,83H;写工作方式选择控制字(A口输出,B口输入)OUTDX,ALAA4:MOVDX,04A4H;C口地址送DXMOVAL,0F0H;初始化C口高4位OUTDX,ALINAL,DX;检测C口低4位状态MOVAH,ALANDAL,01H;检测主系统IBF状态JNZAA1;主侧8255A输入缓冲器满转走到AA1MOVAL,[SI];主侧8255A输入缓冲器空,可以取数,向主CPU传送数据MOVDX,04A0H;A口地址送DXOUTDX,AL;输出数据给主侧8255AMOVDX,04A4H;C口地址送DXMOVAL,0D0H;选通主侧8255AOUTDX,ALMOVAL,0F0H;关闭选通信号OUTDX,ALINCSI;修改数据区地址指针DECCLJNCAA4CMPBL,00HJNZAA4AJMPAA3AA1:MOVAL,AHANDAL,02H;检测主侧8255A状态JNZAA4;=1,主侧8255A输出缓冲器无数据,转向AA4MOVDX,04A4HMOVAL,0E0H;从侧8255A发信号、启动主侧8255A输出缓冲器OUTDX,ALMOVDX,04A2H;B口地址选DXINAL,DX;从主侧8255A取数MOV[DI],AL;保存数据MOVDX,04A4HMOVAL,0E0H;从侧8255A信号无效OUTDX,ALINCDI;修改数据区地址指针DECBLJNZAA4CMPCL,00HJNZAA4AA3:HALT简述8255A并行接口的数据输入过程【参考答案】124例105并行接口的数据输入过程是:当外设准备好数据传送(输入)时,首先把数据送到接口的数据寄存器输入端,当接收到接口的输入缓冲区空信号(IBF=0)后,设备往接口发出输入选通信号。该选通信号一方面把输入数据送入接口的数据寄存器,另一方面把接口的准备好Ready位置。接口把数据送到内部的输入缓冲寄存器或缓冲区,同时使IBF=1,即向设备发响应回答信号,通知设备输入缓冲区已满,暂缓送入新的数据。CPU接到接口要求输入数据的中断请求信号或查询到接口准备好Ready=1,状态位有效后,就从并行接口的输入缓冲寄存器中读取数据,并清除接口中状态寄存器相应的准备好Ready标态位,结束一次输入传送过程。ADC0809通过8255A同PC总线的接口举例如图72所示,地址译码器给出的地址范围为80H~83H,的地址范围为84H~87H,8255A设定为方式0工作,从输入通道IN5输入一个模拟量。问:写出经ADC0809转换后的数字量读入8086的AL的控制程序。说明图71电路如何改动。【参考答案】P125例106程序如下:MOVAL,88HOUT106H,ALMOVAL,05HOUT102H,ALADDAL,10HOUT102H,ALSUBAL,10HOUT102H,ALLOP:INAL,104HTESTAL,80HJZLOPINAL,108HHLT根据题目给定条件,由于微处理器为8086,由它组成的系统中要注意地址奇/偶问题,所以8255A的A1、A0应与8086系统地址总线A2A1相连,并以此确定D地址,所以与8255A相连口地址为100H~106H与ADC0809地址为108H~10EH,其中A0悬空设为0,如图73所示。编写奇数地址中的数据依次输出给1#设备,偶数地址中的数据依次输出给2#设备的程序【参考答案】P126例107设1#和2#设备地址分别为50H和52H,在数据段中以2040H为首地址存储区中存有100个字节数。程序如下:MOVCX,100MOVSI,2040HAGAIN:MOVAL,[SI]OUT52H,ALINCSIMOVAL,[SI]OUT50H,ALLOOPAGAINHLTADC0809通过8255A同8086CPU连接,8个通道,每个通道采样24个数据,试编写程序ADC转换电路如图74所示,要求从模拟通道IN0开始转换,连续采样24个数据。然后采样下一个通道,同样采样24个数据,直至IN7。采样后的数据存放在数据段中2000H开始的数据区中。【参考答案】P126例108其控制程序如下:DATA1SEGMENTORG2000HAREADB200DUP(?)…DATA1ENDSSTACK1SEGMENTDB50DUP(?)…STACK1ENDSCODEISEGMENTASSUMEDS:DATA1,SS:STACK1,CS:CODE1START:MOVAL,92HMOVDX,1C3HOUTDX,ALMOVAX,DATA1MOSDS,AXMOVSI,2000HMOVBL,8MOVDX,1C8HLOP1:MOVCX,18HLOP2:INAL,DXPUSHDXMOV-DX,1C11HLOP3:INAL,DXTESTAL,01HJZPOP3MOVDX,1C0HINAL,DXMOV[SI],ALINCSIPOPDXLOOPLOP2INCDXDELBLJN2LOP1HLT试述定时器/计数器8253的特点【参考答案】P159例1378253是一种可编程的定时器/计数器。有三个16位计数器,称为三个计数通道。每个通道有三个引脚:CLK——计数输入,用作计时基准输入或计数脉冲输入。GATE——选通(门控)输入,用作启动或禁止计数器工作。OUT——输出信号,以相应的电平或脉冲波形指示计数的完成。8253有六种工作方式:方式0——减1计数到零时发中断请求。方式1——可编程单脉冲输出(硬件再触发单脉冲输出或称程序可控单稳)。方式2——周期性时间间隔计时器(频率发生器或称速率发生器)。方式3——方波发生器。方式4——软件触发选通。方式5——硬件触发选通。不同的工作方式可以由工作方式控制字选择。8253有两种计数方式:二进制计数,计数范围1~65536(写入计数初值0时为65536)。十进制计数,计数范围1~10000(写入计数初值0时为10000)。在六种工作方式中,只有方式2和方式3输出波形时连续波形,写入一次计数初值后,当计数通道减1,技术寄存器到零时,一方面输出端OUT输出一指定波形,另一方面自动地将计数值寄存器中的处置减1,装入计数寄存器,开始新一轮的减1计数。这样,就可得到连续的输出波形,直到GATE变低为止。8253A有哪6种工作方式【参考答案】P160例1388253A具有6种工作方式,在任何一种方式下,都必须先向8253写入控制字。控制字还起复位作用,它使OUT端变为工作方式中规定的状态和对计数初值寄存器清零,然后再写入初值到计数器。0是计数器所能容纳的最大初值。二进制计数时,16位计数器中,0相当于216=0000H,用BCD码计数时,0相当于104。方式0——计数结束产生中断特点:计数过程有软件启动。每写入一次计数初值,就启动一次计数过程。门控信号GATE的作用是开放计数或禁止计数,高电平是开放,低电平是禁止。输出信号OUT由低变高表示计数过程结束,若计数初值为N,则OUT低电平的时间为N+1个CLK(时钟)周期的时间。方式0主要用于事件计数,OUT信号可作为中断请求信号。方式1——硬件可充触发单稳态方式特点:计数器的启动只能由门控脉冲GATE的上升沿产生,即只能用硬件启动计数器,不能用软件启动计数器。OUT输出为一个单稳态脉冲,其负脉冲的宽度为计数数值N个CLK时钟脉冲的周期之和。在形成单稳态脉冲过程中,可以重触发,使Out输出的负脉冲加宽。改变计数初值N即可产生不同宽度的负脉冲,从而可获取变宽脉冲信号。方式2——速率发生器特点:计数初值可自动、重复地装入减1计数器中,所以只要CLK是周期性的脉冲序列,在OUT端上就能连续地输出周期性分频信号。计数器的启动,即可用软件,又可用硬件。对于某个频率CLK脉冲信号的前提下,改变计数初值N,即可获得不同速率的OUT输出信号,这就是速率发生器名称的来历。若计数初值为N,则OUT输出的正脉冲宽度为(N-1)个CLK脉冲周期之和,而负脉冲宽度均为一个CLK脉冲的周期。方式2主要应用作为分频器和时基信号,它可方便地从系统时钟PCLK中获得符合某种频率要求的标准信号,供系统使用。方式3——方波方式特点:计数初值N能自动装入减法计数器中,所以只要CLK是周期性脉冲序列,则OUT端将连续输出方波信号。计数器启动过程有软件启动和硬件启动两种。改变计数初值N,OUT端将输出不同频率的方波,从而实现一个方波发生器的输出要求。方式3主要应用作为方波脉冲发生器和波特率发生器。在串行通信中所需的时钟信号可用8253的方式3来提供,由于它是决定数据传送速率之一的波特率的高低,所以方式3又称为波特率发生器。当计数初值N为偶数时,方波的高电平时间等于低电平时间均等于N/2个CLK周期。当N为奇数时,OUT保持高电平的时间为[(N-1)/2+1]个CLK脉冲周期之和,低电平的时间为(N-1)/2个CLK脉冲周期和。方式4——软件触发选通方式特点:与方式0比较,主要区别是OUT端输出负脉冲的宽度不同,在方式0种是N+1个CLK脉冲周期之和,但在方式4种是一个CLK脉冲周期。其次是计数期间的输出极性相反。方式0时低电平输出,方式4时高电平输出。方式5——硬件触发选通方式特点:与方式1相比,两者均为硬件触发启动计数器工作的方式,但OUT端输出的负脉冲宽度不一样,方式1的负脉冲宽度为计数初值N个CLK脉冲周期之和,而方式5的输出负脉冲宽度仅为一个CLK脉冲周期。试述8253的工作方式控制字的格式【参考答案】P161例139在8253初始化时,由CPU向8253的控制寄存器写入一个工作方式控制字,它规定了8253的工作方式,其格式如图97所示。BCD为用来设置计数值格式,这位为1时,计数值为BCD码格式,这位为0时,计数值为二进制格式。由于初值寄存器是16位的,在采用二进制计数时,写入的初值范围为0000H~FFFFH,其中0000H是最大值,代表65536。在BCD码计数时,写入的范围为0000~9999,其中0000是最大值,代表104=10000。写计数初值是,若RL1RL0=01时,则计数初值只有8位,并送入计数初值寄存器的低8位,而高8位自动清零。若RL1RL0=10时,只写高8位,低8位自动清零(适合于数值较大且低8位为零的场合)。D7D6D5D4D3D2D1D0SC1SC0RL1RL0M2M1M0BCD计数器选择读写格式工作方式0=二进制1=BCD码00=计数器001=计数器110=计数器211=非法00=计数器锁存01=只写低8位10=只写高8位11=先写低8位后写高8位000=方式0001=方式1010=方式2011=方式3100=方式4101=方式50=二进制1=BCD码图978253工作方式控制字如何对8253A进行初始化编程【参考答案】P162例1408255A的初始化编程包括向控制寄存器写控制字和向计数初值寄存器写计数初值。对每个计数器初始化时,必须先写控制字,然后写计数初值。写计数初值时,必须遵照控制字RW1和RW0规定的格式写入计数初值。即当RW1、RW2为01时,则只写低位字节,高位字节自动清‘0’;若RW1、RW0为01匙,则只写高位字节,低位字节自动清‘0’;若RW1、RW0为11时,则写低位字节,再写高位字节。在8086微机系统中,8253A占用的端口地址为:00E0H,00E2H,00E4H和00E6H。8253A共有6种工作方式,分别叙述如下:假定8253A的计数器工作在方式0,仅用8位二进制计数,其计数初值为4,初始化程序如下:MOVAL,50H;设置控制字OUT00E6H,AL;写入计数器1控制寄存器MOVAL,4;设置计数初值OUT00E2H,AL;初始写入计数器1的计数初值寄存器设定计数器0工作与方式1,计数初值为4,按二进制计数,初始化程序为:MOVAL,12H;设置计数器0的控制字OUT00E6H,ALMOVAL,4;设置计数初值OUT00E0H,AL设定8253的计数器2工作与方式2,按二进制计数,计数初值为4,初始化程序为:MOVAL,94H;设置控制字OUT00E6H,ALMOVAL,4;设置计数初值OUT00E4H,AL设定8253的计数器2工作与方式3,按二进制计数,计数初值为4,初始化程序为:MOVAL,96H;设置控制字OUT00E6H,ALMOVAL,4;设置计数初值OUT00E4H,AL设定8253的计数器1工作与方式4,按二进制计数,计数初值为4,初始化程序为:MOVAL,58H;设置控制字OUT00E6H,ALMOVAL,4;设置计数初值OUT00E2H,AL设定8253的计数器0工作与方式5,按二进制计数,计数初值为4,初始化程序为:MOVAL,1AH;设置控制字OUT00E6H,ALMOVAL,4;设置计数初值OUT00E0H,AL设定8253的计数器2工作与方式2,按二进制计数,计数初值为0304,初始化程序为:MOVAL,0304H;设控制字OUT00E6H,AL;控制字写入计数器2控制寄存器MOVAL,04H;计数器低字节OUT00E6H,AL;低字节写入计数器2的CRMOVAL,03H;计数器高字节OUT00E4H,AL;高字节写入计数器2的CR设定8253的计数器1工作与方式1,按BCD码计数,计数初值为4000,初始化程序为:MOVAL,63H;设置控制字OUT00E6H,ALMOVAL,40;设置计数器初值4000OUT00E2H,AL8253方式0的初始化、GATE的作用及计数初值修改等的波形图【参考答案】P164例141设定8253计数器通道0工作于方式0,仅用8位二进制计数,其计数值为4。设8253端口地址为:40H~43H初始化程序为:MOVAL,10H;设置控制字OUT43H,AL;写入控制字寄存器MOVAL,4;设置计数初始值OUT40H,AL;初始值写入通道0的CR若门控制信号GATE为高电平;则执行完初始化程序后,OUT引脚输出的波形如图98所示。门控信号GATE的作用在方式0计数过程中,GATE信号的作用如图99所示,当GATE为低电平时,计数器停止对CLK脉冲的计数,只有当GATE恢复为高电平时,计数器才能重新恢复对CLK脉冲的计数。计数初值的修改在方式0计数过程中,修改计数值时的计波形如图100所示。执行改变计数值的指令,在上升沿后的第一个CLK下跳沿处,新计数值装入CE,并按新计数值继续计数。8253方式1的初始化、GATE的作用及计数初值修改等的波形图【参考答案】P164例142设定8253计数器通道1工作于方式1,仅用8位二进制计数,其计数初值为3。设8253端口地址为:40H~43H初始化程序为:MOVAL,52HOUT43H,ALMOVAL,3OUT41H,AL在方式1中,OUT引脚输出的波形如图101所示。写入控制字后,OUT引脚输出立即变为高电平、但并不开始计数,只有当GATE出现正跳变后的第1个CLK下降沿,OUT引脚输出才变为低电平,同时CR计数值装入CE,随后的CLK下降沿使计数器减1,在第3个CLK下降沿,计数器减到0,OUT输出立即变为高电平。所以OUT出现低电平的持续时间为3个CLK周期的时间,只有再次出现GATE正跳变信号后的第一个CLK下降沿,才会使OUT输出立即变为低电平,计数器又重新开始计数。门控信号GATE的作用及波形8253方式计数过程中,出现GATE正跳变在出发信号的波形,如图102所示,不改变OUT输出状况,到再触发信号到达后的第一个CLK的下降沿有从初值开始重新计数,而不管原来减1计数到多少值。计数初值的修改在方式1计数过程中,修改计数值时的计波形如图103所示。新修改值并不影响计数过程,计数器减到0,OUT输出变为高电平。一直等到下一次GATE正跳变触发信号到来,才将新初值装入CE,并使OUT输出变为低电平,又从新的初始值重新开始计数。8253方式2的初始化、GATE的作用及计数初值修改等的波形图【参考答案】P166例143设定8253计数器通道2工作于方式2,按二进制计数,其计数值为3。设8253端口地址为:80H~83H初始化程序为:MOVAL,94HOUT43H,ALMOVAL,3OUT42H,AL若门控制信号GATE为高电平;则执行完初始化程序后,OUT引脚输出的波形如图104所示。设初始值为3,OUT引脚经过3个CLK周就有一个宽度为CLK周期宽度的负脉冲输出。GATE的作用及波形图在方式2中,GATE信号的变化,对计数过程和OUT引脚输出的影响如图105所示,当GATE变低时,立即暂停现行计数,当GATE信号变高后第一个CLK下降沿将初始值重新装入CE,并从初始值起重新开始计数。计数初值的修改在方式2计数过程中,修改计数初始值,对OUT引脚输出波形的影响如图106所示。在计数过程中,CPU重新写入初始值时,对于现行计数过程无影响,只有当减1计数到0,OUT引脚输出一个负脉冲后,再变为高电平,计数器便将更改后的初始值装入CE,并按新值开始计数。8253方式3的初始化、GATE的作用及计数初值修改等的波形图【参考答案】P166例144设定8253计数器通道0工作于方式3,按二进制计数,其计数值为4。设8253端口地址为:80H~83H初始化程序为:MOVAL,94H;设置控制字OUT43H,ALMOVAL,4;设置初始值OUT42H,AL在方式3中,当初始值为4(偶数)时,波形图如图107所示。写入控制字后,OUT输出引脚立即变为高电平。写入初始值后的第一个CLK下降沿,初始值从CR装入CE。每个CLK的下降沿,都使计数单元减2。当减2计数到0时,OUT输出变为低电平,同时又重新装入初始值。然后从初始值开始,每来一个CLK下降沿,使计数器单元减2,直至减到0,OUT输出又变为高电平,在重复上述过程。所以当初始值为4(偶数)时,OUT输出时周期为4,占空度为50%的方波,就是说OUT输出时2个CLK周期宽的高电平,2个CLK周期宽的低电平。在方式3中,当初始值为5(奇数)时,波形如图108所示。OUT引脚输出波形是这样的方波
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 制作莫扎特课件
- 2024-2025学年初中同步测控优化设计物理八年级下册配人教版第8章 第3节 摩擦力含答案
- 咕咚 生字课件
- 第五讲 巧用关联词写一写(看图写话教学)-一年级语文上册(统编版·2024秋)
- 地高辛药品课件
- 2024年黑龙江省齐齐哈尔中考语文真题卷及答案解析
- 幼儿园小班音乐《开汽车》课件
- 西京学院《云计算》2022-2023学年期末试卷
- 2024版教材七年级上册道德与法治期末训练
- 《煤油灯》少儿美术教育绘画课件创意教程教案
- 噪声监测培训20150416+(1)
- 《我与社会》 (课堂PPT)
- 第六讲 声音音质主观评价
- 普通话培训教案
- 施工日志记录模板
- 阳光分级阅读初一上The Fantastic Washing Machine课件
- 基坑支护(护坡)工程冬季施工方案
- 新建加油站工程施工组织设计方案
- 口腔科应急预案详解
- 余姚农业信息综合服务系统需求说明
- 工作纪律检查表
评论
0/150
提交评论