现代微型计算机原理与接口技术习题解答(接口部分).doc_第1页
现代微型计算机原理与接口技术习题解答(接口部分).doc_第2页
现代微型计算机原理与接口技术习题解答(接口部分).doc_第3页
现代微型计算机原理与接口技术习题解答(接口部分).doc_第4页
现代微型计算机原理与接口技术习题解答(接口部分).doc_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

习 题 五1 接口电路与外部设备之间传送的信号有哪几种?传输方向怎样?数据信号:对于输入设备,数据信号从外设通过接口送往总线,对于输出设备,数据信号从总线通过接口发往外部设备。状态信号:状态信号表明外部设备当前的工作状态,用来协调CPU与外部设备之间的操作。状态信号总是从外部设备通过接口发往总线。控制信号 :控制信号是CPU向外设发出的命令,它指定设备的工作方式,启动或停止设备。控制信号从CPU通过接口发往外部设备。2 接口电路有哪些功能?哪些功能是必需的?接口电路可以具备:设备选择功能、信息传输功能、数据格式转换功能、联络功能、中断管理功能、复位功能、可编程功能和错误检测等功能。其中设备选择功能和信息传输功能是每一个接口电路所必备的。其他的功能是否需要则由设备的特点和工作方式决定。3 I/O端口的编址有哪几种方法?各有什么利弊?80X86系列CPU采用哪种方法?I/O端口的编址有两种不同的方式。I/O端口与内存统一编址:把内存的一部分地址分配给I/O端口,一个8位端口占用一个内存单元地址。已经用于I/O端口的地址,存储器不能再使用。I/O端口与内存统一编址后,访问内存储器单元和I/O端口使用相同的指令,这有助于降低CPU电路的复杂性,并给使用者提供方便。但是,I/O端口占用内存地址,相对减少了内存可用范围。而且,由于难以区分访问内存和I/O的指令,降低了程序的可读性和可维护性。I/O端口与内存独立编址:这种编址方法中,内存储器和I/O端口各自有自己独立的地址空间。访问I/O端口需要专门的I/O指令。80x86 CPU采用I/O端口独立编址方式。4 按照传输信号的种类,I/O端口有几种?它们信号的传输方向怎样?按照传输信号的种类,I/O端口有三种:数据端口:数据信息从端口输入CPU(输入设备接口),或者从CPU写入端口(输出设备接口);状态端口:外设状态信息从端口输入CPU;控制端口:命令信息从CPU写入端口。5 I/O端口译码电路的作用是什么?在最小模式和最大模式下分别有哪些输入信号?I/O端口译码电路用于产生端口的读写选择信号。在最小模式下,译码电路接受来自总线的地址信号(16位),(= 0),或者信号。最大模式下,译码电路接受地址信号(16位),或者信号。6 外部设备数据传送有哪几种控制方式?从外部设备的角度,比较不同方式对外部设备的响应速度。外部设备数据传送有以下四种控制方式。直接传送方式(也称为无条件传送方式、同步传送方式):这种情况下,外部端口完全被动地等待CPU的访问,没有确定的响应速度,响应时间取决于CPU忙碌的程度以及程序对外部设备控制采取的策略。查询方式:如果CPU在某一时刻只对一个外设采用查询方式进行数据传输,CPU的响应延迟约为310个指令周期。响应速度快于中断方式,慢于DMA方式。中断方式:CPU的响应延迟平均为几十个指令周期,慢于查询方式,但是这种方式可以同时管理多个外部设备。DMA方式:外部端口的传输请求由DMA控制器响应,由于DMAC是一个专用于传输控制的电路,任务单一,不发生DMA传输竞争时,响应延迟仅为12个DMAC使用的时钟周期,远快于中断方式和查询方式。7 叙述一次查询式输出过程中,接口内各电路、信号的状态变化过程。一个数据的查询式输出过程由二个阶段组成:CPU从接口反复读取状态字:由地址译码电路产生状态端口选择信号,该信号不影响接口内部的状态。外部设备输出完成后,返回“确认”信号,该信号将状态寄存器相关位(READY)置位。如状态字表明外设已处于“就绪”状态,则向数据端口传送数据。由地址译码电路产生的数据端口选通信号一方面将数据总线上的数据写入数据寄存器,同时清除状态寄存器中的相关位(READY),向输出设备发出输出启动信号。有的输出接口设有控制端口,输出启动信号通过写控制端口产生。8 比较程序中断方式和查询方式的区别,根据比较,指出中断工作方式的优缺点。中断方式:外部设备工作完成后,通过“中断请求”信号“主动”向CPU“报告”。查询方式:外部设备工作完成后,状态信号储存在接口电路内,被动地等待CPU来读取。根据上述比较,可以得到中断工作方式的如下特点:优点:1) CPU能够及时了解外部设备的状态,从而对外部设备IO请求进行及时处理。2) 由于CPU“被动”地等待外部设备的“中断请求”,外部设备进行输入/输出操作时,CPU可以同时执行其他的程序,CPU和外部设备“并行”工作。3) 由于同样的原因,在中断方式下,CPU可以同时管理多台外部设备,CPU的效率得到提高。缺点:1) 用中断方式需要CPU增加相应的管理逻辑,增加了CPU电路的复杂性。2) 由于CPU“被动”地接收“中断请求”信号,CPU必须通过与外部的一个联络过程才能知道是那一个设备在申请中断,这增加了响应时间。为了从当前任务转移到中断服务,CPU必须保护原有的运行环境,进行“任务”的“切换”,这也会增加响应时间。3) 有较多的设备使用中断方式时,会产生“中断申请”的“竞争”。这一方面降低了响应速度,另一方面增加了管理的复杂性。 9 比较DMA方式和程序中断方式的区别,根据比较,指出DMA工作方式的优缺点。中断方式:外部设备每进行一个数据的输入/输出,都要通过“中断申请”要求CPU进行处理。CPU通过执行一段“中断服务程序”完成数据的传输。DMA方式:CPU通过对DMAC的初始化,启动一个数据块的传输操作。之后的数据传输通过信号的联络,在外设接口和存储器之间进行,CPU只需简单地让出总线,而无需其他操作。根据上述比较,可以得到DMA工作方式的如下特点:优点:1) 对于CPU而言,它的任务仅仅是在一个数据块传输之前对DMAC进行初始化,CPU用于传输控制的操作达到最小(不考虑与通道/IO处理器方式的比较),CPU的效率最高。CPU与外设“并行”工作。2) 外部设备一个数据输入/输出完成后,向DMAC申请进行数据传输,响应时间仅为DMAC的13个时钟周期。响应速度达到最快,可以满足高速传输的需要。缺点:1) 实现DMA控制需要增加DMA控制器和总线控制逻辑,增加了系统的复杂性。2) DMA传输需要占用总线,并且具有较高的“优先级”。这使得系统对其他设备的响应速度不能得到明确的保证。10 某输入设备接口数据端口、状态端口、控制端口地址分别为70H, 71H, 72H。状态端口D5=1表示输入完成,控制端口D7=1表示启动设备输入(输入完成后由设备清除该位)。从该设备输入100个字节数据,存入以BUFFER为首地址的缓冲区。如果启动该设备1秒后仍未完成一次输入,则视为超时错,显示出错信息后返回。分别用8086汇编语言和C语言编写完成上述功能的I/O程序。汇编语言程序:DATASEGMENTBUFFERDB100 DUP(?)ERRORDB13, 10, “OVER TIME !”, 13, 10, “$”DATAENDS;CODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVCX, 100LEABX, BUFFERONE:XORDX, DX;DX用作响应计时器,初值0MOVAL, 80HOUT72H, AL;启动输入W:INAL, 71HINCDX;记录延迟时间TESTAL, 00100000B;测试完成位JNZREAD;输入完成,转READ读取数据CMPDX, 50000;假设循环50000次时间为1秒JBW;未超时,继续测试JMPOVERTIME;超过1秒,报告出错READ:INAL, 70H;读入数据MOVBX, AL;数据存入缓冲区INCBX;修改指针LOOPONE;100个数据尚未输入完成,转ONE继续JMPDONE;100个数据输入完成,转DONE结束程序OVERTIME:LEADX, ERRORMOVAH, 9INT21H;响应超时,显示出错信息DONE:MOVAX, 4C00HINT21H;返回OSCODEENDSENDSTARTC语言程序:main( ) int i, status, time, buffer100 ; for( i=0; i100; i+ )outportb( 0x72, 0x80 );/* 启动输入 */ for( time = 0; time = 20000 ) printf( “n Over Time ! n”); exit ; /* 超时报错 */ 11 某输出设备数据端口、状态端口地址分别为220H, 221H。状态端口D0=1表示输出完成。将数据段中以STRING为首地址的20个字符(用七位ASCII代码存储)添加水平和垂直校验发送到该外部设备。用8086汇编语言编写完成上述功能的I/O程序。汇编语言程序:DATASEGMENTSTRINGDB20 DUP ( ? )SUMDB0DATAENDS;CODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AXMOVCX, 20LEABX, STRINGMOVSUM, 0; 垂直校验码初值为0ONE:MOVDX, 221H; DX置为状态端口地址INAL, DXTESTAL, 00000001B;测试输出完成位JZONE;未完成,转ONE继续读取状态MOVAL, BX;从字符串取出一个字符的ASCII代码ANDAL, 07FH;清除最高位,准备置入校验位JPEOUTPUT;判代码奇偶属性,ORAL, 80H;奇数个“1”,最高位置1(偶校验)OUTPUT:MOVDX, 220HOUTDX, AL;输出添加了校验位的代码XORSUM, AL;生成垂直校验位INCBX;修改指针LOOPONE;20个数据尚未输出完成,转ONE继续MOVDX, 221H;输出垂直校验代码LAST:INAL, DXTESTAL, 00000001BJZLASTMOVAL, SUMMOVDX, 220HOUTDX, ALDONE:MOVAX, 4C00HINT21H;返回OSCODEENDSENDSTART12 试画出矩阵式键盘查询的程序流程图。上述流程中假设键盘为88结构,如果有键按下,返回它的8位扫描码。其中:最低3位为该键所在列,次低3位为该键所在行,最高2位为0。如果没有键按下,返回8位“1”。13 试画出公用端口多位LED输出的程序流程图。习 题 六1 什么叫中断?有哪几种不同类型的中断?由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理该事件的一个程序。该程序执行完成后,CPU接着执行被暂停的程序。这个过程称为中断。根据中断源的位置,有两种类型的中断。有的中断源在CPU的内部,称为内部中断。大多数的中断源在CPU的外部,称为外部中断。根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不可屏蔽中断两种。 2 什么是中断类型?它有什么用处?用若干位二进制表示的中断源的编号,称为中断类型。中断类型用来区分不同的中断,使CPU能够在中断响应时调出对应的中断服务程序进行中断处理。3 有哪几种确定中断优先级的方法?说明每一种方法各自的优劣之处。确定中断优先权有四种可选的方法。(1) 软件查询法:采用程序查询的方法确定中断服务的顺序。这种方法中断逻辑最简单(基本上不需要外部中断逻辑),优先级可以灵活设置,但中断响应所需时间最长。(2) 分类申请法:CPU分设二个中断申请信号的输入引脚。这种方法需要CPU提供条件。(3) 链式优先权排队:菊花链法。这种方法需要的外部中断逻辑比较简单,容易实现,但是设备较多时信号延迟大,对设备故障敏感。(4) 可编程中断控制器: “向量”优先权排队专用电路。这种方法功能最全面,控制灵活,可以通过程序设定中断优先权为固定的或循环的,但需要增加专用的中断控制器。4 什么是中断嵌套?使用中断嵌套有什么好处?对于可屏蔽中断,实现中断嵌套的条件是什么?CPU在处理级别较低的中断过程中,出现了级别较高的中断请求。CPU停止执行低级别中断的处理程序而去优先处理高级别中断,等高级别中断处理完毕后,再接着执行低级别的未处理完的中断处理程序,这种中断处理方式称为多重(级)中断或中断嵌套。使用中断嵌套可以使高优先级别的中断得到及时的响应和处理。对于可屏蔽中断,由于CPU在响应中断时已将IF清零,所以一定要在中断处理程序中加入开中断指令,才有可能进行中断嵌套。5 什么叫中断屏蔽?如何设置I/O接口的中断屏蔽?用程序的方法使某些中断源的中断请求不能够发送到CPU,或者虽然能够发送但是不能得到响应,这种方法称为中断屏蔽。在外设的接口内增设一个中断屏蔽触发器(可以用D触发器实现),该触发器的端与中断请求信号相“与”后连接到INTR。当 = 0时,中断请求不能发往INTR。通过设定中断屏蔽触发器的状态,可以控制中断请求信号是否能够送到INTR端。置IF= 0, 可以使80x86CPU不响应来自INTR的可屏蔽中断请求。6 什么是中断向量?中断类型为1FH的中断向量为2345H:1234H,画图说明它在中断向量表中的安置位置。中断服务程序的入口地址称为中断向量。中断类型为1FH,它的中断向量放置在1FH4=0000: 7CH开始的位置上。如右图。7 叙述一次可屏蔽中断的全过程。(1) 中断源请求中断外部中断源通过INTR引脚向CPU请求中断。(2) 中断响应 中断源提出中断请求后,如果 CPU处于允许中断状态(IF=1); 没有不可屏蔽中断请求和总线请求; 当前指令执行结束。则转入中断响应周期。在中断响应周期: CPU取得中断源的中断类型; 将标志寄存器FLAGS和CS、IP(断点)先后压入堆栈保存; 清除自陷标志位TF和中断允许标志位IF; 读中断向量表,获得相应的中断服务程序入口地址,转入中断服务程序。(3) 中断服务 中断服务程序的主要内容包括: 保护现场 开中断 中断处理 关中断 恢复现场 (4)中断返回 8 简要叙述8259A内部IRR, IMR, ISR三个寄存器各自的作用。三个寄存器长度均为8位。IRR用来记录引脚IR7IR0上由外部设备送来的中断请求信号。当外部中断请求线IRi变为有效时,IRR中与之对应的第i位被置1。IMR用于设置对中断请求的屏蔽信号。此寄存器的第i位被置1时,与之对应的外部中断请求线IRi被屏蔽,不能向CPU发出INT信号。可通过软件设置IMR内容,确定每一个中断请求的屏蔽状态。ISR用于记录当前正在被服务的所有中断级,包括尚未服务完而中途被更高优先级打断的中断级。若CPU响应了IRi中断请求,则ISR中与之对应的第i位置1。ISR用于中断优先级管理。9 8259A是怎样进行中断优先权管理的?8259A通过以下两种途径实现对中断优先权的管理:(1) 通过设置中断屏蔽寄存器IMR,可以屏蔽某些中断请求,从而动态地改变各请求端的优先级别。(2) 8259A响应某个中断请求之后,将ISR寄存器对应位置1。如果后续的中断请求级别低于正在响应的中断请求,则该中断不能立即被响应。反之,如果新的中断请求级别高于正在响应的中断请求,则允许进行中断嵌套。中断服务结束时,应将ISR寄存器对应位清零。10 特殊全嵌套方式有什么特点?它的使用场合是什么?特殊全嵌套方式一般用于级联方式下的8259A主片。如果8259A主片在一次中断处理尚未结束时,收到了来自同一个引脚的第二次中断请求,并且该8259A采用普通全嵌套方式,则它不会响应来自同一个引脚的第二次中断请求。如果该8259A采用特殊全嵌套方式,就会响应该请求(中断嵌套),从而可以及时响应连接在同一从片8259A上,并且相对有较高优先级别的中断请求。11 向8259A发送“中断结束”命令有什么作用?8259A有哪几种中断结束方式?分析各自的利弊。中断服务完成时,必须给8259A一个命令,使这个中断级别在ISR中的相应位清“0”,表示该中断处理已经结束,允许响应新的较低级别的中断。这个命令称为“中断结束”命令。8259A有两种不同的中断结束方式。(1)自动中断结束方式(AEOI) 8259A在中断响应周期内自动清除ISR中对应位。这种方式使用简单,但是不能充分实现中断的优先权管理。这种方式只能用在系统中只有一个8259A,且多个中断不会嵌套的情况。(2)非自动中断结束方式(EOI)从中断服务程序返回前,在程序里向8259A输出一个中断结束命令(EOI),把ISR对应位清“0”。这种方式可以有效地实现中断优先权的管理,从而保证高优先级的中断可以得到及时响应。但是,如果在程序里忘了将ISR对应位清零,那么,8259A将不再响应这个中断以及比它级别低的中断请求。12 某系统中有两片8259A,从片的请求信号连主片的IR2引脚,设备A中断请求信号连从片IR5引脚。说明设备A在一次I/O操作完成后通过两片8259A向8086申请中断,8086CPU通过两片8259A响应中断,进入设备A中断服务程序,发送中断结束命令,返回断点的全过程。 设备A通过从片IR5引脚向从片发出中断请求; 从片将IRR5置“1”,并通过INT(与主片IR2相连)向主片发出中断请求; 主片将IRR2置“1”,通过INT(与CPU的INTR相连)向CPU发出中断请求; CPU通过第一个向主片和从片响应中断请求; 主片8259A在CAS0CAS2上发出代码“010”,表示连接在IR2上的从片中断被响应,同时主片还把本片ISR2置“1”,把本片IRR2清“0”; 从片收到第一个和主片CAS0CAS2上发来的010代码后,将本片ISR5置“1”,同时把本片IRR5清“0”。收到第二个后,将本片IRR5对应的中断类型通过数据总线发往CPU; CPU进入设备A的中断服务程序,在程序中先后对主片和从片发出中断结束命令,两个芯片内的ISR2和ISR5先后被清零。 中断服务结束,返回断点继续执行。13 某8086系统用3片8259A级联构成中断系统,主片中断类型号从10H开始。从片的中断申请连主片的IR4和IR6引脚,它们的中断类型号分别从20H、30H开始。主、从片采用电平触发,嵌套方式,普通中断结束方式。请编写它们的初始化程序。假设主片端口地址为10H,12H。从片的端口地址分别为 18H, 1AH和 1CH, 1EH。MOVAL, 00011001B;主片ICW1OUT10H, AL;电平触发,级连方式MOVAL, 10H;主片ICW2OUT12H,AL;主片中断类型MOVAL, 01010000B;主片ICW3OUT12H, AL;IR4,IR6连有从片MOVAL, 00010001B;主片ICW4OUT12H, AL;特殊全嵌套,非自动中断结束MOVAL, 00011001B;从片ICW1OUT18H, AL;电平触发,级连方式MOVAL, 20H;从片ICW2OUT1AH, AL;从片中断类型MOVAL, 00000100B;从片ICW3OUT1AH, AL;本片连接在主片IR4引脚上MOVAL, 00000001B;从片ICW4OUT1AH, AL;非特殊全嵌套,非自动中断结束MOVAL, 00011001B;从片ICW1OUT1CH, AL;电平触发,级连方式MOVAL, 30H;从片ICW2OUT1EH,AL;从片中断类型MOVAL, 00000110B;从片ICW3OUT1EH, AL;本片连接在主片IR6引脚上MOVAL, 00000001B;从片ICW4OUT1EH, AL;非特殊全嵌套,非自动中断结束注意:(1) 由于8086系统有16根数据线,各8259A的端口地址均为偶数(假设各8259A的数据线连接在8086系统的低8位数据线上)。(2) 主片用特殊全嵌套,从片用一般全嵌套。14 给下面的8259A初始化程序加上注释,说明各命令字的含义。MOVAL, 13H;ICW1: 边沿触发,单片8259AOUT50H, AL;MOVAL, 08H;ICW2: 中断类型高5位为00001OUT51H, AL;MOVAL, 0BH;ICW4: 非特殊全嵌套,缓冲方式,主片,非自动中断结束OUT51H, AL;15 设8259A端口地址为20H和21H,怎样发送清除ISR3的命令?为了清除ISR3,需要通过OCW2发送特殊的中断结束命令,使SL=1, EOI=1, L2L1L0=011。指令如下:MOVAL, 01100011BOUT20H, AL16 图4-17能否直接用于8086系统?为什么?图4-17不能直接用于8086系统,原因是:(1) 多个设备的中断请求如果直接送往CPU,应采用“线或”的方法,每个接口的中断请求信号应由“OC门(集电极开路门)”以“负逻辑”的方式连接,如下图。(2) 电路没有解决中断优先权的问题。CPU用信号响应中断时,会将所有正在申请中断的接口的请求信号清除。加接“菊花链”可以解决该问题。(3) 电路没有解决中断类型的发送问题,需要增加相关电路。例如,把设备接口的INTR连接到8259A。习 题 七1 8255A的方式选择控制字和C口按位控制字的端口地址是否一样,8255A怎样区分这两种控制字?写出A端口作为基本输入,B端口作为基本输出的初始化程序。解:(1) 8255A的方式选择控制字和C口按位控制字的端口地址一样,它们之间的区别在控制字的D7位(特征位)的值不同,8255A的方式选择控制字D7=1,而C口按位置位/复位控制字D7=0。(2) 初始化程序:(设端口地址为,A口:200H,B口:201H,控制口:203H)MOVAL,90HMOVDX,203HOUTDX,AL2 用8255A的A端口接8位二进制输入,B端口和C端口各接8只发光二极管显示二进制数。编写一段程序,把A端口读入的数据送B端口显示,而C端口的各位则采用置0/置1的方式显示A端口的值。解:(设端口地址为,A口:200H,B口:201H,C口:202H,控制口:203H)MOV AL,90H;8255A初始化:MOV DX,203H;8255A各组方式0,A口输入OUT DX,AL; B、C口输出MOV DX,200HIN AL,DX;读A口输入值MOV DX,201HOUT DX,AL;送B口输出MOV AH,AL;A口输入值转存在AH中MOV DX,203HMOV CX,08;CX置循环次数初值MOV AL,00H;C端口置0/置1控制字初值LPA: AND AL,0FEH;清除最低位SHRAH, 1;A端口一位转入CFADCAL,0 ;A端口一位从CF转入命令字OUT DX,AL;A端口一位从送往C端口对应位ADD AL,02H;形成下一个命令字LOOP LPA;处理C端口下一位3 将8255A用作两台计算机并行通信的接口电路,请画出采用查询式输入/输出方式工作的接口电路,并写出采用查询式输入/输出方式的程序。解:用两片8255作两台计算机8088_A与8088_B之间并行通信的接口电路,两片8255之间的连接如下图所示。两片8255均在方式1、查询方式下工作。(1) 8088_A输出程序:(8255_A的A口作为数据输出口,C口的PC0作为“数据输出选通”信号,负脉冲输出。C口的PC6作为“应答”信号输入,负脉冲有效。端口地址:A口:200H,C口:202H,控制口:203H)DATASEGMENTBufferDB“This is a example. ”, 0DH, 0AH, -1DATAENDSCODESEGMENTSTART:MOVAX, DATAMOVDS, AXLEABX, Buffer;输出缓冲区指针送BXMOVDX,203HMOVAL,0A0H ;8255_A的方式选择字,A口工作在方式1、输出,C口低四位输出OUTDX,ALMOVAL, 1OUTDX, AL;将PC0置1CALLDELAY;延时等待对方完成初始化;A口查询方式输出NEXT:MOVDX, 202HINAL, DLTESTAL, 80H;判别是否有效JZNEXT;数据尚未取走,等待MOVDX,200HMOVAL, BXOUTDX, AL;输出一项数据INCBXMOVDX, 203HMOVAL, 0OUTDX, ALNOPNOPINCALOUTDX, AL;通过PC0 向对方发选通信号(负脉冲)CMPBYTE PTRBX-1, -1;判断输出是否完成JNENEXT;未完成,继续MOVAX, 4C00HINT21HCODEENDS ENDSTART(2)8088_B输入程序:(8255_B的A口作为输入,方式1,PC4作为“数据输入选通”信号,输入,负脉冲有效。PC0为“应答”信号输出,负脉冲有效。端口地址:A口:210H,C口:212H,控制口:213H)DATASEGMENTBufferDB80 DUP(?)DATAENDS;CODESEGMENTSTART:MOVAX, DATAMOVDS, AXLEABX, Buffer;输入缓冲区指针送BXMOVDX, 213HMOVAL, 0B0H;8255_B的方式选择字,A口工作在方式1,输入,C口低四位输出。OUTDX, ALMOVAL, 01HOUTDX, AL;PC0置1,表示没有“应答”信号CALLDELAY;延时等待对方状态就绪;A口查询方式输入AGA:MOVDX, 212HINAL, DXTESTAL, 20HJZAGA;PC5 ( IBF )是否为1,不是,无数据输入,继续查询MOVDX, 210HINAL, DXMOVBX, ALMOVDX, 212HMOVAL, 0OUTDX, ALINCBXNOPNOPINCALOUTDX, AL;通过PC0向发送方发“应答”负脉冲CMPBYTE PTRBX-1, -1;数据接收完了吗?JNEAGA;未完,继续MOVAX, 4C00HINT21HCODEENDSENDSTART说明: 这道题有多种可选的解法,上面的方法是程序比较简单的一种。这种方法实施时,应先启动8088B,使它首先“就绪”,然后开始通讯。由于双方都用负脉冲进行选通,联络过程比较简单,也比较可靠。可选的另一种方法是:在上述连接的基础上用中断方式进行数据传输,以提高CPU的工作效率。需要编制双方的中断服务程序,初始化时要设置中断向量,允许8255中断,开放中断等操作。当然也要连接相应的中断请求信号线。可选的第三种方法是:双方用一根状态线(C端口某一位)送往对方,用这两根线进行联络(“握手”)。这种方法看似简单,其实程序是比较复杂的。双方联络的过程如下图。8088B在初始化完成后,把它的状态线置为“高电平”,表示可以开始接受数据。而8088A在初始化完成后,把它的状态线置为“低电平”,表示数据传输尚未开始。 8088A查询8088B的状态,在发现8088B“就绪”(状态线为高电平)后,把数据发往8255的(A或B)端口。 8088A发出数据之后把本机状态置为“就绪”(高电平),表示数据已经送到端口的数据线上。 8088B查询8088A的状态,得知8088A的状态线“就绪”,知道8088A已经把数据送出,于是从8255接收数据,并把自身的状态线置为“未就绪”,表示已经把8088A发出的数据接收。 8088A查询到8088B的状态线变为低电平,知道对方已经把数据接收完成,于是把本机的状态线置为“低电平”,表示这个数据的发送已经完成,而下一个数据尚未发出。 8088B查询到8088A的状态线变为“低电平”,知道对方已经结束了第一个数据的传输,在本机做好下一个数据的接收准备之后(例如,把数据存入缓冲区,如果缓冲区满,则把缓冲区内容存入磁盘文件),把本机状态线置为“高电平”,表示已经做好了接收下一个数据的准备。 8088A得知8088B做好准备,发送下一个数据。于是,下一个数据的传输可以由此开始(转)。这种方法实施时,应首先启动8088A。 4 设计一个用8255A作为8个七段显示器的接口电路,并设计一个把内存地址为ADDRA的8个数字在这8个七段显示器上显示的程序。解:设8个七段显示器采用共阳接法,A口控制段的显示,B口控制位的显示。端口地址 A口:200H,B口:201H,控制口:203HDATA SEGMENTADDRA DB ,TABLE DB 40H, 4FH, 24H, 30H, 19HDB 12H, 02H, 78H, 00H, 10H DISPBITDB ?DATA ENDSCODE SEGMENTASSUME CS: CODE,DS: DATASTART: MOVAX, DATAMOVDS, AXMOV AL,80H;对8255A初始化,方式0,输出MOV DX,203HOUT DX,ALLEABX, TABLE;BX置为七段码表首地址MOVDISPBIT, 7FH ;置位码初值为7FHLEASI, ADDRA;SI置为显示缓冲区首地址MOVCX, 8;CX置为循环次数初值8AGA: MOVAL, 0FFHMOV DX, 201HOUT DX, AL;熄灭所有数码管MOVAL, SI;取出一个待显示数XLAT;转换成七段码MOV DX,200HOUTDX, AL;送入段码端口MOVAL, DISPBIT;MOV DX,201HOUTDX, AL;送当前位码,点亮一个数码管RORDISPBIT, 1;产生下一个位码INCSI;修改指针,指向下一个待显示数据CALLDELAY;延时 LOOPAGA;处理下一个数码管的显示 MOV AX,4C00HINT 21HCODE ENDSEND START5 8254定时/计数器的定时与计数方式有什么区别?8254在方式0工作时,各通道的CLK、GATE信号有什么作用?各通道的控制字地址都相同,8254是怎样区分的?解:(1) 8254作为计数器使用时,对CLK端的输入脉冲进行单纯的减法计数,这时CLK端输入的脉冲不作为计时基准。此外,用作计数器时,计数完成后必须重新初始化,只能使用一次。8254作为定时器使用时,要求CLK端输入的脉冲必须作为时钟基准,通过对该基准时钟脉冲的计数来实现精确定时。用作定时器时,计数的过程周而往复,重复进行。(2) 8254工作在方式0时,CLK端输入计数用的脉冲信号;GATE信号为高电平时,对CLK端输入的脉冲进行计数;GATE信号为低电平时,暂停计数; GATE信号重新为高电平后,恢复原先的计数。(3) 由8254的方式控制字中的D7、D6两位来选择计数通道。6 设8254的端口地址为0240H0243H,通道0输入的CLK频率为1MHz,为使通道0输出1KHz的方波,编写初始化程序。如果让通道0与通道1级联(即OUT0接CLK1)实现1秒钟定时,则初始化程序如何编制。解:(1) 通道0输出1KHz的方波:计数初值为1MHz/1KHz = 1000,等于十六进制数03E8H,控制字设定为先写低8位,后写高8位,方式3工作,二进制计数方式,所以控制字为36H。初始化程序如下:MOV AL,36H;MOV DX,243H;写入通道0的控制字OUTDX,AL;MOV DX,240H;MOV AL,0E8H;写入通道0的时间常数OUT DX,AL;MOV AL,03H;OUT DX,AL;(2) 通道0与通道1级联实现1秒定时:要实现1秒定时,对1MHz输入脉冲进行分频的系数为1000000=5000200。通道0工作在方式2,分频系数200,采用十进制计数,则通道0方式控制字为:25H。通道1工作在方式0,分频系数5000,也采用十进制计数,则通道1方式控制字为:61H。初始化程序如下:MOV AL,25H;通道0控制字:方式2,十进制计数,只写高8位MOV DX,243H;OUT DX,AL;MOV AL,61H;通道1控制字:方式0,十进制计数,只写高8位OUT DX,AL;MOV DX,0240H;MOV AL,02H;通道0时间常数(BCD数高8位)OUT DX,AL;MOV AL,50H;通道1时间常数(BCD数高8位)MOV DX,0241H;OUT DX,AL;如果要再次进行1秒钟定时,则需要对通道1重新初始化。如果需要连续的1秒定时信号,则通道1应选用方式3。对总数为1000000的分频系数,可以有多种分解方法。7 编制一个使PC机的8254产生600Hz方波的程序,并使该方波送至扬声器发声。解:PC机中利用8254定时器的通道2来驱动扬声器。通道2的工作及其输出受到主板上8255A的PB口(口地址61H)控制:GATE2接PB0,即PB0=1时,定时器才可能工作;OUT2与PB1相与后输出到扬声器,即PB1=1时,定时器2的OUT2才能输出到扬声器。定时器的输出波形是对1.1931MHZ频率信号分频得到的,因此将定时器2工作在方式3,分频系数用下式计算:分频系数=1193100给定频率 (1193100=12348CH)因此程序如下:MOV AL,0B6H;通道2控制字:方式3,16位常数OUT 43H,AL;送入8254控制端口MOV DX,12H;MOV AX,348CH;DX, AX中置入常数 12348CHMOV DI,600;DI为输出频率DIV DI;除法运算,计算分频系数OUT 42H,AL;低8位送通道2MOV AL,AH;OUT 42H,AL;高8位送通道2IN AL,61H;OR AL,3;OUT 61H,AL;将8255A的B端口低2位置“1”8 在RS-232C接口标准中,引脚TxD、RxD、的功能是什么?解:TxD: 串行数据输出。RxD: 串行数据输入。:数据终端准备好状态,低电平有效。用于向调制解调器或外设表示数据终端已准备好。:数据设备准备好状态,低电平有效。调制解调器或外设准备好时有效。 :请求发送信号,低电平有效。表示数据终端设备已经做好发送数据的准备,请调制解调器/外设准备接收数据。:清除发送(允许传送)信号,低电平有效。调制解调器/外设作好传送准备,允许数据终端设备发送数据时有效。9 16550的通信控制寄存器中的寻址位有什么作用?在初始化编程时,应该怎样设置?解:16550芯片内,接收缓冲寄存器/发送保持寄存器的地址与除数低字节寄存器的地址相同,中断允许寄存器的地址与除数高字节寄存器的地址相同。为了区分同一地址的不同用途,16550使用DLAB位来加以标识。DLAB位是通信线控制寄存器的最高位D7,该位设置为0,随后的相应操作对接收缓冲寄存器/发送保持寄存器或中断允许寄存器进行;该位设置为1,随后的相应操作对除数寄存器进行。在向除数寄存器写入初值之前,应将DLAB置为1。由于一般不需要重复访问除数寄存器,写完除数后应将DLAB置为0,以方便后续的操作。10 编写用PC机中16550查询方式输入50个字符的异步通信程序。设16550的端口地址为3F8H3FFH,数据格式为:8位数据位、1位偶校验位、2位停止位,通信速率为19.2Kbps。解:接收子程序中,如果接收成功,清CF标志,否则,置位CF标志位。程序如下:; 16550查询方式接收程序DATA SEGMENTREC_DATA DB 50 DUP ( ? ) ;存放接收的数据TIMES DW 50;要接收的数据个数DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATABEGIN:MOVAX,DATAMOV DS,AX;初始化16550MOVDX,03FBH;16550控制寄存器地址送DXMOVAL,80H;置DLAB=1,设置除数寄存器OUTDX,ALMOVAX,003CH;波特率为19200bps时,除数为003CHMOVDX,03F8H;除数寄存器地址送DXOUTDX,ALMOVAL,AHINC DXOUTDX,ALMOVAL,1FH;8位数据位,偶校验,2位停止位MOVDX,03FBH;16550控制寄存器地址送DXOUTDX,AL;写入控制字CALL RECEIVEMOVAH,4CH ;程序结束,返回操作系统INT 21H;查询方式接收子程序RECEIVE PROCNEARLEABX,REC_DATA;接收缓冲区首地址送BXMOVCX,TIMES;要接收的数据个数送CXREPIN:MOVDX,03FDH;通信状态寄存器地址送DXINAL,DXTESTAL,1EH;检测接收过程有无错误JNZERRORTESTAL,01H;检测接收缓冲器中是否有数据JZREPIN;没有数据,继续检测MOVDX,03F8H;数据接收寄存器地址送DXINAL,DXMOVBX,ALINC BXLOOPREPINCLC;接收成功,清CF标志位JMP DONEERROR:STC;接收不成功,置CF标志位DONE: RETRECEIVE ENDPCODEENDSEND BEGIN11 Intel 8251A与16550芯片相比较,有些什么不同之处?答:两个芯片的主要区别是:(1) 16550芯片只能进行异步串行通讯,而Intel

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论