现代微机原理与接口技术综合练习.ppt
1,综 合 练 习,2,例1 假设有一个44的矩阵键盘通过并行接口芯片8255与微机相连。8255的A口作为输出口,与键盘的行线相连;B口为输入口,与键盘列线相连。,设8255A口地址为60H,B口地址为61H,控制寄存器地址为63H,请编写键盘扫描程序。,3,4,程序如下:mov al,82h out 63h,albegin:mov al,0;检查是否有键按下out 60h,alwait:in al,61hand al,0fhcmp al,0fhjz wait;无键按下,继续等待,5,sm:mov dl,4;行数送dlmov al,0feh;扫描码,0行为0mov ch,0;键号初值为0srow:out 60h,al;扫描一行 rcl al,1;修改扫描行mov ah,al;保存下次要扫描的扫描码in al,61h;读列线状态and al,0fhcmp al,0fh;是否有列线为0jnz scol;有列线为0转到scol,6,addch,4;否则键号4moval,ah;取回行扫描码decdl;行数减1jnzsrow;继续扫描行jmpbeginscol:rcral,1jncproce;该列为0,转处理程序incch;否则键号1,jmpscol;继续查找proce:,7,思考题,如何将上题改成中断方式?假设任意键按下后,会通过8259的IR5向CPU发中断请求,另外,8255的端口地址是60H63H,8259的端口地址是20H21H,使用74LS138译码器,请修改原图,使其满足题目要求,并要给出译码电路。然后写出相应的键盘扫描程序。,8,&,&,PC7,IR5,CS,去138,PPICS,A0,A1,A0,A1,8259,INT,INTR,CS,INTRCS,A0,A0,9,Y0,Y7,A,B,C,G1,15,14,13,12,11,10,9,7,1,2,3,4,5,6,74LS138,A5,A6,A7,A8,A9,AEN,INTRCS,PPICS,去8255,去8259,138译码电路部分,10,例2.频率计数器设计,用8254计数外来信号频率fIN(fCLK=1MHz)。,用T/C1产生基准时钟间隔,采用方式1;T/C0采用方式0对外来信号计数;OUT1控制GATE0来停止计数。,返回下页,返回下二页,11,思路:T/C1产生10ms的基准时间间隔,然后通过OUT1控制T/C0计数,用 fIN=(N-M+1)/10ms*1000Hz 公式来计算。其中N是T/C0的初始值,M是计数基准时间到时的T/C0当前计数值。为了辅助控制,我们用8255A口初始化为输出,其中位0为TRG,用来控制计数器1的GATE。8255B口初始化为输入,其中位0接到OUT1脚,通过对该位的不断查询,来确定10ms是否结束,结束后,根据T/C0的计数数值进行计算。,12,OUT PIO0,0;TRG=0MOV AL,01110010B;T/C1OUT 43H,ALMOVAH,2710H;间隔为10ms(2710H10000)OUT 41H,ALMOVAL,AHOUT 41H,ALMOV AL,00110000B;T/C0 OUT 43H,ALMOVAL,00H;初值为65536OUT 40H,ALOUT 40H,AL;STC产生一个脉冲OUT PIO0,2;TRG=1,开始计数,返回下页,转上页,13,S1:IN AL,PIO1;循环读EOC JZS1;等到EOC=1才退出循环 IN AL,40H MOV AH,AL IN AL,40H XCHG AH,AL;AX为当前计数值,14,fIN=(N-M+1)/t=(65536-AX+1)/10)*1000Hz,注意:10ms时M应大于0。,T/C在0方式时经过一个CLK后才将初值写到CE中。所以实际计数值应该在T/C0的当前值基础上加1。,思考1:采用简化电路,用读回命令实现的方法能否很精确?(同时锁存两个计数器的值)。,思考2:为得到精确的fIN,需增大时间间隔,在时间间隔内M=0怎么办?,转上二页,转上页,思考3:如何利用8255来设计一个电路,时T/C0最后的计数值就是实际计数值而不需要加1?,思考4:可否采用中断方式,硬件怎么改,软件如何写?,15,例3 请设法利用一个8255和若干基本门电路,将8254方式0的计数外部脉冲fclk的个数从n1转变成n。,16,步骤1:初始化T/C0,写计数初值步骤2:令PC0=1,利用PC1发一个脉冲(01,10)步骤3:令PC0=0,PC1=1.,17,步骤1:初始化T/C0,写计数初值步骤2:令PC0=0,利用PC1发一个脉冲(01,10)步骤3:令PC0=1,PC1=0.,18,;应在T/C0初值写完后,送其到CEOUT PIO0,1;STC 01OUT PIO0,0;STC 10,例2中思考3的解决办法:,19,例4 某串行输入输出外设引线如图所示,其引线功能说明如下:DI为串行输入,DO是串行输出;CLK为串行输入输出时钟,每一个时钟周期可输入或输出一位数据。CS#为片选信号,低电平有效。,DI,DO,CLK,CS#,假设外设接口地址为PC机接口地址03FCH03FFH,请用8255芯片完成该芯片到系统总线的连接,并按照你的连接,编写将BL中的数据按先低后高的顺序输出到外设中。,20,21,03FCH,22,23,例5 两台PC机采用异步串行方式传送数据。字符数据位7位,停止位1位,偶校验,波特率为2400bps,要求:1.按照RS232C电平标准给出传送字符A(ASCII码为41H)时的波形图(完整一帧数据),并标明MARK和SPACE电平。2.如果不间断地连续传送字符串“HELLO_WORLD”,请计算所给波特率下传送该字符串需要的时间。,24,注意题目要求的是符合RS-232电平标准,RS232是负逻辑,该题的关键是要将异步通信协议和RS232的负逻辑结合起来,注意字符串最后还有一个结束字符0,25,例5 两个机器希望通过8255的方式1进行通信,请设计其电路。根据你的电路编写读写程序。,26,编程思路:首先应该将8255的A口和B口初始化成方式1的输入和输出,并允许两种中断(输入中断和输出中断)。数据的读写都是在中断处理中去完成。,27,例7已知8253端口地址为8083H,CLK2频率为5MHz,执行如下程序后,完成如下要求:MOV AL,0B7H;10110111BOUT 83H,ALLOOP:MOV AL,00HOUT 82H,ALMOV AL,50HOUT 82H,ALCALL DM5;调用延时5ms延时子程序MOV AL,00HOUT 82H,ALMOV AL,25HOUT 82H,ALCALL DM5JMP LOOP,28,1写出该通道的工作方式,说明输出的波形特征、频率及持续时间。2画出输出波形示意图。答:通道2工作在方式3下输出方波,先输出1KHz的方波5毫秒,然后是2KHz的方波5毫秒,然后又是1KHz的方波5毫秒,如此反复。,29,例8使用8255A(端口地址60H63H)实现对74LS138的检测功能。要求如下:1.画出检测电路图(8255A的译码电路省略),并说明设计思路。2.编写检测功能的完整程序。,30,编程提示:用8255的PC口和PA口做138的控制信号和输入信号,然后读8255的PB口(也就是138的Y0Y7的输出),看该138的输出与输入以及控制信号之间的关系是否符合138的真值表。,31,例9 为测试某飞行体的速度,在一定距离上放置两个传感器,当飞行体穿过传感器的时候,传感器会输出一脉冲,希望有一种办法比较精确地测出两个脉冲之间的时间,从而得知飞行速度。,请给出思路。,思路:用双稳态触发器将以上波形改成如下的正脉冲,,用这个正脉冲作为8253计数器的GATE控制信号。即GATE高电平的时候开始计数,GATE低电平的时候结束计数,只要得到正脉冲之间计数的次数,再根据CLK中来的脉冲频率,就可以计算这段时间的事件间隔。然后用两个传感器之间的距离除以这个时间就得到了速度值。,32,例10请设计一个8088的最小模式下的系统,系统中包括8088CPU和8255、8259、8253几个接口芯片和适当的译码电路。其中1)8254的计数器1工作在方式3,其输出接到8259的IR0,产生每秒20次的中断(8253的CLK0接1.19MHz信号);2)利用8255设计一个44的无编码键盘,该键盘任一个键按下后,均能向8259的IR2提出中断请求。要求:(1)绘制电路设计简图,要求必要的信号线要连接正确。(2)按你的电路图,说明3个接口芯片中各个端口的地址。(3)编写8253和8255的初始化程序。(4)编写键盘中断处理程序中的扫描键盘片段。,33,进行接口电路设计的时候要注意:首先要弄清楚接口芯片各个引脚的输入输出特性和他们的有效电平定义,分清哪些引脚是对CPU一侧的,哪些是对外设一侧的。其次要正确连接各引脚:对于CPU一侧,通常接口芯片的数据线D7D0要和系统的数据总线相连,从而和CPU的数据总线相连,控制总线中大部分要考虑和CPU或8288中发出的控制信号相连,主要是IOW#、IOR#等,片选线CS#一般和译码电路有关,使用地址线的高位利用相关译码电路(如24译码器、38译码器等)得到相应地址范围的片选信号。地址低位根据题目要求正确的和接口新片的地址引脚相连。对于外设一侧,注意输出信号的特点,将该侧的控制信号正确的和外设相连,同时还要注意将正确的数据线(如果有)连好。这里我们要正确的理解外设的 含义,外设一侧的外设可以是外部设备,同时也可以是另一个接口芯片,比如8259的外设中断请求线就由可能是和8254、8255或8250的某个输出线连接。再次要特别注意不同引脚线相连时候电平定义是否匹配,是否要加反相器或其他中间过渡电路。,34,对于此类大综合的题目,拿到题后大家不要紧张,首先要弄清楚一共有几个部分,然后再一个部分一个部分的设计。比如本题,首先要将8088的有关连线连接起来,其中,AD0AD7由于是地址数据复用线,所以,需要再其上连上373锁存器,该锁存器在地址期将地址锁存,从而得到地址信号中的A0A7,AD0AD7同时也作为8位数据线接到其他几个接口芯片上。需要使用的控制线主要是读写线,中断请求和应答线等。其次要设计好地址译码电路,以便在不同的地址段使能不同的接口芯片。本题可以使用一个24译码器,我们这里使用的还是138译码器,注意留下足够的地址线低端,供接口芯片直接连接来访问片内端口。最后,按照题目要求,来连接好其他的接口芯片,主要是接好数据线,片选线,读写控制线,和各种用到的输出线和其他控制线。,35,答:1)电路图如图。2)按照电路图8253的地址范围为:00000FH8259的地址范围是010H01FH,8255的地址范围是02002FH。3)8253初始化程序 MOVAL,01110110B;计数器1,方式3OUT03H,ALMOVAX,59500;产生20Hz方波OUT01H,ALMOVAH,ALOUT01H,AL 8255的初始化:MOVAL,10000011B;A口方式0输出,B口方式0输入,C口上半输出下半输入。OUT023H,AL,36,4)键盘扫描程序参见课本P222页的有关部分,不过要注意:扫描前要先执行MOVAL,00001110B;PC7为0,屏蔽中断OUT023H,AL扫描完后要执行MOVAL,00001111B;PC7为1,允许中断OUT023H,AL,