微机系统原理与接口技术”第九章习题解答(部分)1.什么是并行接口和串行接口?它们各有什么作用?答:并行接口是指接口与外设之间按字长传送数据的接口,即4位、8位或16位二进制位同时传送;而串行接口是指接口与外设之间依时间先后逐位传送数据的接口,即一个时刻只传送一个二进制位。并行接口传送速度较快,但在远距离传送数据时成本高,损耗大,且平行数据线之间干扰大,所以并行接口一般适用于近距离的高速传送,而串行接口则适用于远距离传送。2.试画出8255A与8086CPU连接图,并说明8255A的A0、A1地址线与8086CPU的A1、A2地址线连接的原因。答:8255A与8086CPU的连线图如下图所示:8086系统有16根数据线,而8255只有8根数据线,为了软件读写方便,一般将8255的8条数据线与8086的低8位数据线相连。8086在进行数据传送时总是将总线低8位对应偶地址端口,因此8086CPU要求8255的4个端口地址必须为偶地址,即8086在寻址8255时A0脚必须为低。实际使用时,我们总是将8255的A0、A1脚分别接8086的A1、A2脚,而将8086的A0脚空出不接,并使8086访问8255时总是使用偶地址。4.简述8255A工作在方式1时,A组端口和B组端口工作在不同状态(输入或输出)时,C端口各位的作用。答:8255A的A、B口工作在方式1时,C端口各位的使用情况如下表所示:端口CA、B口均输入A口输入,B口输出A口输出,B口输入A、B口均输出PC7I/OI/OPC6I/OI/OPC5IBFAIBFAI/OI/OPC4I/OI/OPC3INTRAINTRAINTRAINTRAPC2D7-0A1WRA0RDCS8255AWRRDM/IO8086ALEDENDT/RAB/DB地址译码A19-3地址锁存数据缓冲A1A2A19-1D7-0题9-2图STBA/INTEA*STBB/INTEB*ACKB/INTEB*OBFBACKA/INTEA*OBFAOBFASTBB/INTEB*STBA/INTEA*ACKA/INTEA*ACKB/INTEB*OBFBPC1IBFBIBFBPC0INTRBINTRBINTRBINTRB注:带*的各中断允许信号由C口内部置位/复位操作设置,非引脚电平。5.用8255A控制12位A/D转换器,电路连接如下图所示。设B口工作于方式1输入,C口上半部输入,A口工作于方式0输入。试编写8255A的初始化程序段和中断服务程序(注:CPU采用中断方式从8255A中读取转换后的数据)。题9-5图答:设8255的A、B、C及控制端口的地址分别为PORTA、POATB、PORTC和PCON,则一种可能的程序段实现如下:主程序:;初始化8255A……MOVAL,10011110B;设置8255A的工作方式控制字OUTPCON,ALMOVAL,00000101B;设置C口置位/复位控制字,使INTEA(PC2)为OUTPCON,AL;高电平,允许B口中断MOVAL,00000010B;设置C口置位/复位控制字,使PC1(IBFB)输出OUTPCON,AL;低电平,启动第一次A/D转换……中断服务程序:;取数,并自动启动下一次A/D转换……MOVAL,00000011B;PC1(IBFB)输出高电平,停止A/D转换OUTPCON,ALINAL,PORTC;先取高4位转换值MOVAH,ALMOVCL,4SHRAH,CL;将高4位转换值放到AH的低端INAL,PORTB;取低8位转换值放到AL中MOVAL,00000010B;PC1(IBFB)输出低电平,再次启动A/D转换OUTPCON,AL……IRET6.用8255A作为CPU与打印机接口,8255的A口工作于方式0,输出;C口工作于方式0。8255A与打印机及CPU的连线如下图所示。试编写一程序,用查询方式将100个数据送打印机打印(8255A的端口地址及100个数据的存放地址自行设定)。题9-6图答:设8255的A、B、C及控制端口的地址分别为PORTA、POATB、PORTC和PCON,而需打印的数据放在数据段中以DATA1开头的区域,则一种可能的程序段实现如下:……MOVAL,10000001B;设置8255A的工作方式控制字OUTPCON,ALMOVCX,100;设置需打印数据的总个数以控制循环次数LEASI,DATA1NEXT:MOVAL,[SI];从数据段取数据并通过A口发到打印机OUTPORTA,ALMOVAL,00001100B;设置C口置位/复位控制字,使PC6为低电平,OUTPCON,AL;通知打印机锁存数据并打印INCSI;为取下个数据作准备DECCXJZERROR;判断是否传完100个数据,如是,转后续处理AGAIN:INAL,PORTC;如未传完100个数据,读状态端口TESTAL,01H;查询PC0(BUSY)是否为高电平JNZAGAIN;如是,继续查询,直到BUSY变低JMPNEXT;BUSY为低电平,则转NEXT发送下一个数据ERROR:……10.已知8250的主参考时钟频率为1.8432MHz,其RCLK与BAUDOUT相连,端口地址为0330H起,要求其工作在半双工通信,每帧7位数据、偶校验、1位停止位,波特率为9600波特,编写初始化程序。答:由一种可能的程序段实现如下:……DTRRTSMOVDX,333H;令传输线控制器寄存器Bit7=1以设置波特率MOVAL,80HOUTDX,ALMOVDX,330H;波特率=9600,设置除数寄存器=000CHMOVAL,0CHOUTDX,ALMOVDX,331HMOVAL,0HOUTDX,ALMOVDX,333H;设置工作方式:偶校验,7位数据位,一位停止位MOVAL,00011010BOUTDX,ALMOVDX,334H;设置Modem控制器:允许中断,发和MOVAL,0BHOUTDX,ALMOVDX,331H;开放接收数据就绪、接收字符错和发送缓冲器空中断MOVAL,07HOUTDX,ALSTI……12.试编写两台IBMPC机之间的通信程序。条件同6题,连接如下图。题9-12图答:从连接图中可以看出,两台PC机之间没有任何联络信号的连接,题目又只给出数据传送的格式,为了使两台PC机能正确通信,应事先约定其他一些通信规则(注意,这里的规则不一定遵循标准协议,只是具体应用时根据通信双方的特殊情况定义的简单规则,通信双方都遵守就行了)。假设系统不停地发送已准备好的一批数据,并要求发送的每一个数据都必须被正确接收,即:发送方必须在得知上一个数据已正确达到后,才发送下一个数据;若接收出错,接收方将通知发送方重发;发送方在发完所有数据后通知接收方结束这次通信。因为没有现成的硬件挂钩信号,故采用软件挂钩:首先找到或构造两个不会被解释为数据的特殊字符做为挂钩用的联络字符,如‘,’表示已准备好接收下一个字符,‘;’表示接收出错,而‘。’表示发送结束。发送方在发出一个数据后根据接收方返回的信息确定下一步处理,接收方在接到数据后先判断是否结束此次通信。程序中采用BIOS中断调用对串口进行操作,需发送的数据事先准备好存放在数据段的以S_DATA为起始地址的N个单元中,接收到的数据则存放在附加段的以R_DATA为起始地址的N个单元中。一种可能的程序实现如下:发送机程序:……MOVAL,8AH;初始化串行通信的数据格式MOVAH,0INT14HLEASI,S_DATA;使DX:SI指向待传送的第一个数据MOVCX,N+1;N为一共要传送的数据个数(设小于65535个)CLD;按地址增量方向取数据TRANS:DECCXCMPCX,0;检查数据是否发完?JZEXT;已发完,退出LODSB;取准备发送的数据到AL中,同时SI加1MOVAH,1;将AL中数据送出INT14HTEST:MOVAH,3;读串口状态到AL中INT14HTESTAL,01H;检查是否收到接收方回送的信号?JZTESTMOVAH,2;取回送的信号到AL中INT14HCMPAL,',';判断回送信号的含义JZTRANS;收到‘,’表示接收方已收到正确数据,发下一个CMPAL,';'JNZERR;发送方收到回送的不明信号,转出错处理DECSI;收到‘;’表示接收方出错,发送方重发刚才的数据INCCXJMPTRANSERR:……;出错处理略EXT:MOVAL,'.';通知接收方数据已发送完毕MOVAH,1INT14H……接收机程序:……MOVAL,8AH;初始化串行通信的数据格式MOVAH,0INT14HLEADI,R_DATA;ES:DI指向数据存放区首址CLD;按地址增量方向取数据TEST:MOVAH,3;读串口状态INT14HTESTAL,01H;检查是否收到数据?JZTESTANDAL,0EH;检查是否正确接收?JNZERR;接收出错,回送‘;’MOVAH,2;将接收到的数据取到AL中INT14HCMPAL,'.';检查是否结束通信?JZEXTSTOSB;将接收到的数据存到指定区域,同时DI加1MOVAL,',';通知发送方接收正确MOVAH,1INT14HJMPTEST;准备接收下一个数据ERR:MOVAL,';';通知发送方出错,等待重发MOVAH,1INT14HJMPTESTEXT:……;结束此次通信14.比较软件、硬件和可编程定时/计数器用于定时的特点。答:软件定时一般是根据要求设计一个时延子程序,其优点是节省硬件,成本低;缺点是CPU利用率低,且定时间隔不准确;硬件定时会增加相应的硬件设备(如定时/计数器等),使硬件成本增加,但可以不占用CPU,并且定时准确,不过一旦硬件设计制作好后,不能更改定时间隔;用可编程定时/计数器实现定时可以兼顾前面两者的优点,即定时信号的产生由专门的硬件电路产生,定时准确且CPU利用率高,另外在需要的时候,可以由CPU程控改变定时间隔而不需要改动硬件电路。17.8253每个通道的最大定时值是多少?如果欲使8253用于定时值超过其最大值时,应该如何应用?答:8253每个通道的最大定时值=最大计数值×计数脉冲周期T=216*T。若需要的定时值超过一个通道的最大定时值,有两种方法可以使用:①可将多个通道(或多片8253的通道)串接(级联)起来使用,即将上一级计数通道的输出端OUT接至下一级计数通道时钟输入端CLK,以此扩展计数器的位数。如按右图所示接法,计数最长位数为三个计数器长度的和,则最大定时值=248*T。②同①中思路,只是如果没有多余的硬件计数通道可以使用,则可用软件设置CLK0OUT0GATE0CLK1OUT1GATE1CLK2OUT2GATE2周期为T的计数脉冲8253定时信号输出题9-17图下一级计数,如PC机中系统时钟的处理方法。19.利用PC机内的8253作为定时器,用8255的一个输出口控制8个指示灯,编一个程序使8个指示灯依次点亮,切换时间为每秒1次。答:根据题目要求,只能利用PC机内8253的计数器0,计数时钟频率为1.19MHz,输出端OUT0接8259的IRQ0端。PC机中8253的端口地址为40H—43H,8259的端口地址为20H和21H,IRQ0对应类型号为8的中断。假设并口8255A的A、B、C及控制端口的地址分别为PORTA、POATB、PORTC和PCON,现用8255的A口控制指示灯的显示,系统如下图所示。微机正常工作时,每大约55ms产生一次IRQ0中断,本题指示灯的显示切换时间并不要求非常准确,因此不必再重新设置8253,直接利用55ms的定时中断即可。一种可能的程序段如下实现:主程序:;重新设置IRQ0的中断向量,并初始化8255……CLI;关中断MOVAX,0;将原来的中断向量放入堆栈保护MOVDS,AXMOVSI,0020H;DS:SI指向8号中断的向量存放地址LODSWMOVBX,AX;取原来中断向量中的偏移量存入BXLODSW;取原来中断向量中的段基址存入AXPUSHAXPUSHBXMOVAX,DATA;建立本程序数据段MOVDS,AXMOV