第六章单片机的并行扩展技术6·1什么是并行外围扩展?并行外围扩展有哪两种方式?这两种方式本质上的区别是什么?答:(1)并行外围扩展单片机的并行外围扩展是指单片机与外围扩展单元采用并行接口的连接方式,数据传输为并行传送方式。并行扩展体现在扩展接口数据传输的并行性。(2)并行外围扩展的方式并行外围扩展方式有两种I/O方式与总线方式。题图6-1是80C5l两种并行外围扩展接口示意图。图中的并行口数据宽度为8位。①并行I/O口方式:I/O口并行扩展由I/O口完成与外围功能单元的并行数据传送任务,单片机与外围功能单元数据传送过程中的握手交互也由I/O口来完成的。②并行总线方式:并行扩展采用三总线方式,即数据传送由数据总线DB完成;外围功能单元寻址由地址总线AB完成;控制总线CB则完成数据传输过程中的传输控制,如读、写操作等。(3)两种方式本质上的区别两种并行外围扩展方式本质上的区别列于题表6-1中。6·2单片抗应用系统中有哪几种键盘类型?为什么这些键盘都是通过I/O口扩展?答:(1)单片机应用系统中的键盘类型与通用计算机键盘相比,单片机应用系统中的键盘种类很多,键盘中按键数量的设置依系统操作要求而定。一般说来,单片机应用系统中键盘有独立式和行列式两种,如题图6-2所示。题图6-2①独立式键盘:独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立如题图6-2(a)所示。I/O口通过按键与地相连。I/O口有上拉电阻,无键按下时,引脚端为高电平;有键按下时,引脚端电平被拉低。1/0端口有内部上拉电阻时,外部可不接上拉电阻。②行列式键盘:行列式键盘采用行列电路结构。行列交点处通过按键相连,列线为输出口,行线为输人口,如题图6-2(b)所示。列线口输出全零电平时,若没有键按下则行线引脚上全部为高电平1状态;若有任何一个按键按下则行线引脚上为非全1状态;在有键按下后,通过列线逐个送0,然后逐行检查哪根行线为0状态,即可查出是哪个键按下。(2)键盘通过I/O口扩展键盘所采用的I/O口并行扩展电路都是外设接口的典型电路。这类接口只有操作原理时序,没有器件的时序协议,故而都适宜于通过I/O口扩展。6·3请叙述行列式键盘的工作原理。中断方式与查询方式的键盘其硬件和软件有何不同?答:(1)行列式键盘的工作原理行列式键盘采用行列电路结构。行列交点处通过按键相连,列线为输出口,行线为输入口,如题图6-2(b)申所示。其工作原理是:列线口输出全零电平时,若没有键按下则行线引脚上全部为高电平1状态,若有任何一个按键按下则行线引脚上为非全1状态;在有键按下后,通过列线逐个送0,然后逐行检查哪根行线为0状态,即可查出是哪个键按下。(2)中断方式与查询方式的键盘的区别单片机对键盘的操作方式可分为查询方式和中断方式。题图6-2中为查询方式键盘的接口电路;题图6-3所示为中断方式键盘的接口电路。在查询方式中,单片机要不断查询键盘中有无键按下。中断方式下单片机不必查询键盘情况,只需开放键盘中断请求。当有键按下时,会请求中断,在中断服务程序中再检查是哪个键按下。题图6-3①在硬件方面的区别:与查询方式相比,中断方式中增加了中断源生成电路,并要求单片机提供一个外部中断INT输人端口。题图6-3中中断源生成电路为多输人端与门,当有键按下时,与门输入端有0状态出现,输出低电平的中断请求信号。②在软件方面的区别:●中断方式:设计中断程序时,先在主程序中将中断系统初始化,并开中断。设键盘中断服务程序入口标号为IO5lK16。程序清单如下。主程序:;MOVPl,#0FH;键盘初始化。Pl.0~P1·3置输人方式;P1.4~P1.7为0状态MOVIE,#84H;开CPU中断,开INTl中断;中断服务程序:ORG0013H;INTl中断入口地址LJMPIO51K16;从中断入口转移到键盘处理程序IO5lK16I051K16:LCALLD10MS;延时l0msLCALLKEYIN;调键输人检查子程序JNZLKOUT;有键输人,转查键号RET1;无键输入,中断返回LKOUT:MOVR2,#0EFH;首列扫描字写入R2MOVR4,#00H;首列偏移值入R4CONU:MOVP1,R2;列扫描字写入列线中MOVA,P1;读入Pl口状态到A中JBACC.0,LONE;检查第0行是否为0状态,不为0,表明;按下键不在此行,转下一行MOVA,#00H第0行为0状态,表明按下键在此行;首列号人AAJMPLKP;转求键号LONE:JBACC·l,LTWO;检查第1行有无键按下MOVA,#04H;有键按下,该行首列号入AAJMPLKP;转求键号LTWO:JBACC.2,LTHRMOVA,#08HAJMPLKPLTHR:JBACC.3,NEXT;该列所有行都无键按下,转NEXTMOVA,#0CH;有键按下,该行首列号入A中LKP:ADDA,R4;求键号,键号为首列号加列偏移值PUSHA;键号入栈保护WKFE:LCALLKEYIN;等待键释放JNZWKFE;键末释放,转WKFE等待POPA;键释放,键号入ALJMPKJMP;转键操作散转处理NEXT:INCR4;转查下一列,列偏移值加1MOVA,R2JNBACC.7,KND;最后一列查完?查完中断返回RLAMOVR2,A;末查完,列扫描字左移1位LJMPCONU;扫描宇入R2,继续查找KND:RETIKEYIN:MOVPl,#0FH;查看有无键按下。A不为0,有键按下MOVA,PlCPLAANLA,#0FHRETD10MS:(略)KJMP:(略)●查询方式:设计查询程序时,只需在主程序中直接调用KEYIN和LKOUT(此时将程序中的RETI换成RET)即可,程序清单如下。主程序:;LCALLD10MS;延时l0msLCALLKEYIN;调键输入检查子程序LCALLLKOUT;有键输入,转查键号;6·4请叙述LED显示器的静态与功态显示原理。什么是LED显示器的段吗?答:(l)LED显示器的静态与动态显示原理题图6-4是静态、动态方式下n位LED显示器与I/O口的连接示意。题图6-4(a)为静态显示方式,题图6-4(b)为动态显示方式。题图6-4①静态显示方式下,LED显示器的公共极COM接地(共阴极)或接电源端(共阳极),是位控制端。显示器的段极(a~dp)和I/O口的D0~D7相连,在静态显示方式下,n位LED显示要占用n个8位I/O口线。要显示n位的数码,在相应的I/O口上送出相应的段码数据即可。②动态显示方式下,LED显示器的所有段极(a~dp)共用一个8位I/O口线,而每个LED显示位要占用一根I/O口线,因此,n位动态显示的LED显示器只要占用一个8位I/O端口和n根I/O口线。显示n位数码时,连接段极的8位I/O端口依次送出祝位数码的段码数据;同时,依次控制相应位公共端COM(位极),当公共端电平为0(共阴极)或1(共阳极)时,该位的数码点亮。段极不断轮流送入段码,位极轮流控制该位点亮,满足人眼视觉暂留效应要求,在n位LED显示器上形成稳定的祝位数码显示效果。(2)LED显示器段码的意义按照发光二极管点亮时,相应的字符段点亮的原理,将共阴极LED显示器的公共端COM接地,将八字符段端a,b,c,···,dp依次与一个8位I/O口的最低位到最高位相连。例如,与80C5l的Pl.0,Pl.l,P1.2,···,P1.7相连时,如果给Pl口送入00H,LED显示器为全灭状态;给Pl口送入FFH时,LED显示器全部点亮。要求LED显示器显示字符2时,要求a,b,g,e,d点亮,这时,LED端口输人的段码为010110llB=5BH;如果将上述共阴极LED显示器改为共阳极显示器,并将公共极COM接VCC,要求显示字符“2”,LED端口输入的断码为10100100=A4H。这时8位I/O送出的数据称为断码,题表6–4给出了在上述连接时的共阴极和共阳极断码。6·5并行总线外围扩展应用中,为什么有地址选择?什么是地址编码?有哪几种地址编码?答:1·并行总线外围扩展应用中的地址选择在并行总线外围扩展中,外围设备(器件)都连接到相同的数据总线及读、写线上,因此,必须通过地址线的编(译)码,将地址线的寻址空间进行划分,分成不同的地址空间给外围设备(器件)使用。若有16位地址线时,寻址空间为64KB(0000H~FFFFH);采用高3位的3-8译码器时,每根译码输出线(Y0~Y7)的空间为8KB(分别为0000H~lFFFH,2000H~3FFFH,4000H~5FFFH,···,E000H~FFFFH),可以分别给8个外围设备(器件)使用。将译码输出线与每个外围设备(器件)的选通线相连,不会造成空间的冲突。CPU通过并行总线对总线上某个扩展的外围设备(器件)操作时,只要通过地址译码来选通该设备(器件)。从上述地址译码的作用原理可看出,当单片机需要与某个外围设备(器件)进行数据通信时,通过地址译码器的输出线来选通该设备(器件),这时,该设备(器件)在并行扩展空间占据了该译码输出所规定的地址空间,这就是该设备(器件)的设备(器件)地址。子地址是设备(器件)内部实际操作时需要的寻址单元。子地址只能是寻址空间中的一部分。例如,在16位地址的并行总线中,寻址范围为64KR,最高3位地址线通过3-8译码器输出(Y0~Y7)可以给8个外围设备(器件)作选通用,其设备(器件)的主地址分别为0000H~lFFFH,2000H~3FFFH,4000H~5FFFH,···,E000H~FFFFF。如果用Y0和Yl分别扩展一片8KB数据存储器和一片可编I/O接口82C55时,8KB数据存储器的器件地址为0000H~lFFFH,片内8KR数据单元子地址为0000H~lFFFH,子地址占据了全部器件地址空间;82C55的器件地址为2000H~3FFFH,但片内子地址只有PA口、PB口、PC口寄存器和控制寄存器4个地址单元,这样子地址只使用了2000H~3FFFH8KR地址范围中的4个地址单元。2·并行总线外围扩展应用中的地址编码并行外围扩展中的地址编码就是将寻址范围进行分割,每个编码输出信号将指定一定的寻址空间。单片机并行扩展中常采用线性编码和非线性编码。(1)线性地址编(译)码线性地地址编码是将寻址范围等分的编码方法。最常用的译码器为3-8译码器74HC138-80C51总线型单片机中使用3-8译码器的电路如题图6-5所示。题图6-5(a)是74HC.138的应用电路,译码输人为地址总线的A15、A14、A13,这样,地址译码器8个输出端Y0~Y7的寻址范围依次为0000H~lFFFH,2000H~3FFFH,4000H~5FFFH,···,E000H~FFFFH。题图6-5(b)是80C51总线型单片机外围并行扩展32KB数据存储器和4个外围设备(器件)的线性地址译码电路。32KR数据存储器占用Y0~Y3的寻址空间,设备(器件)地址是0000H~7FFFH:4个设备(器件)地址分别为8000H~9FFFH,A000H~BFFFH,C000H~DFFFH,E000H~FFFFH。(2)非线性编(译)码在数据存储器和外围设备(器件)统一编址时,采用线性译码将产生数据存储器大寻址范围和外围设备(器件)小寻址范围的矛盾。例如,32KB的数据存储器要求32KB的子地址,而许多外围设备接口及外围器件往往只需几个或几十个子地址。在题图6-5(b)的线性译码中,为了满足32KB子地址的寻址要求,使用了4个译码输出,而只需要几十个子地址的外围设备(器件)却占据了同样的32KB寻址空间。因此,在需要更大容量的数据存储器时,应考虑非线性译码。非线性译码通常采用可编程逻辑阵列器件GALl6V8或GAL20V8等,如题图6-6所示。通过可编程逻辑阵列器件将高8位寻址空间分成不等的译码输出。例如,将Y0寻址范围扩大到63KB(0000H~FBFFH)用于大容量数据存储器扩展,剩余的lKB寻址范围用于4个外围设备(器件)的寻址,Y0~Y7译码输出寻址范围为FC00H~FCFFH,FD00H~FDFFH,FE