第十章接口技术10.1在80C51应用系统中扩展一片8255外界4位显示器和4位BCD码拨盘(参考题图10-1电路),试画出该部分的接口逻辑电路、并编写相应的显示子程序和读拨盘的子程序。答:参考题图10-1设计电路如题图10-2所示,此外在PC0~3的各引脚上均接有一下拉电阻,图中省略没画。由题图10-2电路知A、B、C口和命令口地址分别如下:ADDR_PORTAEQU07FFCH;A口地址ADDR_PORTBEQU07FFDH;B口地址ADDR.PORTCEQU07FFEH;C口地址ADDR_CMNDEQU07FFFH;命令口地址;定义4个BCD码变量CODE1EQU30HCODE2EQU31HCODE3EQU32HCODE4EQU33HORG0030HMOVA,#10000001B;设置8255的PA、PB口为输出MOVDPTR,#ADDR_CMND;PC口高4位为输出,低4位为输人MOVX@DPTR,APRG_START:MOVCODEl,#00H;初始化4个BCD码值MOVCODE2,#00HMOVCODE3,#00HMOVCODE4,#00HMOVR3,#8FH;置码盘扫描码初值MOVR2,#04H;置码盘扫描次数FIND_CODE:MOVDPTR,#ADDR_PORTCMOVA,R3MOVX@DPTR.A;将码盘扫描码送出MOVXA,@DPTR;读PC口低4位MOVRl,A;暂存读数MOVC,ACC.3MOVA,CODElRLCAMOVCODEI,A;将ACC.3从左移人CODElMOVA,Rl;取读数MOVC,ACC.2MOVA,CODE2RLCAMOVCODE2.A;将ACC.2从左移人CODE2MOVA,Rl;取读数MOVC,ACC.1MOVA,CODE3RLCAMOVCODE3,A;将ACC.l从左移人CODE3MOVA,Rl;取读数MOVC,ACC.0MOVA,CODE4RLCAMOVCODE4,A;将ACC.0从左移人CODE4MOVA,R3CLRCRRCA;更改扫描位MOVR3,ADJNZR2,FIND_CODE;4次扫描末完,继续MOVRl,#CODEl;将CODEl地址送RlMOVR2,#04H;设置动态扫描位数MOVR3,#0F7H;设置当前扫描位DSP_LP:MOVA,#OFFHMOVDPTR,#ADDR_PORTAMOVX@DPTR,A;关显示MOVA,@Rl;读当前地址内容ADDA,#03H;转换成段码MOVCA,@A+PCAJMPDSP_LPlDM_TAB:DB03FH,006H,05BH,04FH,066H,06DH,07DH,007HDB07FH,06FH,000H,000H,000H,000H,000H,000H;A~F不显示'DSP_LP1:MOVDPTR,#ADDR_PORTB;设段码地址MOVX@DPTR,A;将段码送出MOVA,R3;取位码MOVDPTR,#ADDR_PORTA;设位码地址MOVX@DPTR,A;将位码送出RRA;位码右移MOVR3,AACALLDELAY_10MS;调延时l0ms子程序(在此省略)DJNZR2,DSP_LP;显示未完,继续AJMPPRG_START;转去执行读码盘10.2用串行口扩展4个发光数码管显示电路,编程使数码管轮流显示ABCD和EFGH,每秒钟变换一次。答:根据题图10-3中电路,设计程序如下ORG0030HCLRP1.0;清显示SETBP1.0MOVSCON,#00H;设置串口工作方式EX10_2A:MOVR1,#04H;显示位数MOVR2,#00H;地址偏移量EX10_2B:MOVA,R2;取显示段码ADDA,#03HMOVCA,@A+PCAJMPEX10_2C;跳转DB77H,7CH,39H,5EH;A,B,C,D的段码(本例中为共阳极)EX10_2C:MOVSBUF,A;启动串口发送JNBTI,$;等待一帧发送完毕CLRTI;清发送中断标志INCR2;修改地址偏移量DJNZR1,EX10_2B;一屏显示未完,继续ACALLDELAY;调15延时子程序(省略)MOVR1,#04H;下一帧显示MOVR2,#00HEX10_2D:MOVA,R2ADDA,#03HMOVCA,@A+PCAJMPEX10_2EDB79H,71H,3DH,76H;E,F,G,H的段码EX10_2E:MOVSBUF,AJNBTI,$CLRT1INCR2DJNZR1,EX10_2DCALLDELAY;调1s延时子程序(省略)AJMPEX10_2A;循环10.3试说明非编码键盘的工作原理。为何要消除键抖动,又为何要等待键释放?答:由非编码键盘所提供的行和列矩阵,通过接口电路或者单片机的I/O口与CPU相连。CPU可以采用查询或中断方式了解有无键输人并检查是哪一个键按下,且将该键号送入CPU。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。由于目前,无论是按键或是键盘的大部分,都是利用机械触点的合、断作用。机械触点在闭合及断开瞬间由于弹性作用的影响,在闭合及断开即释放瞬间均有抖动过程,从而使电压信号也出现抖动。抖动时间长短与开关的机械特性有关。按键的稳定闭合时间,由操作人员的按键动作所确定,一般为十分之几秒至几秒时间。在此期间电压信号将出现多次变化很容易产生误判。为了保证CPU对键的一次闭合仅作一次键输人处理,必须去除抖动影响。当键释放时同样存在键抖动影响,为了确保键释放也需要等待和判别。10.4试设计一个用8255与16键键盘连接的接口电路,并编写键码识别程存。答:由题图10-4电路知C口和命令口地址分别如下题图10-4ADDR.PORTCEQU07FFEH;C口地址ADDR_CMNDEQU07FFFH;命令口地址ORG0030HMOVA,#10001000B;设置PC口位(3~0)为输出,位(7~4)为输人MOVDPTR,#ADDR_CMND;命令口地址送DPTRMOVX@DPTR,AMOVDPTR,#ADDR_PORTCMOVA,#0F0HMOVX@DPTR,A;将PC口位(3~0)置0KEY:ACALLKS;调用KS判断有键按下吗?JNZK1;有键按下则转KlAJMPKEY;无键按下转KEYKl:ACALLDLY_20MS;有键按下延时去抖动ACALLKS;调用KS再判断有无键按下?JNZK2;键按下,转逐列扫描AJMPKEY;误读键,返回K2:MOVR2,#0FEH;首列扫描宇送R2MOVR4,#00H;首列号送R4K3:MOVDPTR,#ADDR_LPORTC;将列扫描字(R4低4位)送PC位(3~0)MOVA,R2MOVX@DPTR,ANOPMOVXA,@LDPTR;读PC位(7~4)JBACC.4,L1;第0行无键按下,转查第1行MOVA,#00H;有键按下,置第0行首键号AJMPLK;转求键号LI:JBACC.5,L2;第1行无键按下,转查第2行MOVA,#04H;有键按下,置第1行首键号AJMPLK;转求键号L2:JBACC.6,L3;第2行无键按下,转查第3行MOVA,#08H;有键按下,置第2行首键号AJMPLK;转求键号L3:JBACC.7,NEXT;第3行无键按下,改查下1列MOVA,#0CH;有键按下,置第3行首键号LK:ADDA,R4;求键号:形成键码送APUSHACC;键码入栈保护K4:ACALLDLY_20MS;等待键释放ACALLKSJNZK4POPACC;键释放,键码出栈RET;键扫描结束,返回NEXT:INCR4;修改行号MOVA,R2JNBACC.3,KEY;第4列为0,己扫完最高列,转开始RLA;末扫描完,扫描宇左移1位,变为下1列扫描MOVR2,A;扫描字送回R2AJMPK3;转列扫描;---------------------------------------KS:MOVDPTR,#ADDR_PORTCMOVA,#0F0HMOVX@DPTR,A;全扫描字OH送PC口低4位NOPMOVXA,@DPTR;读人PC高4位ORLA,#0FH;屏蔽低4位CPLA;变成正逻辑,以高电平表示有键按下RET10.5什么是D/A转换器?筒述T形电阻网络转换器的工作原理。答:在计算机控制的实时控制系统中,有些被控对象需要用模拟量来控制,模拟量在此指连续变化的电量。此时,就需要将数字量转换为相应的模拟量,以便操纵控制对象。这一过程即为数/模转换D/A(DigittoAnalo9)。能实现D/A转换的器件称为D/A转换器或DAC。一个二进制数是由各位代码组合起来的,每位代码都有一定的权。为了将数字量转换成模拟量,应将每一位代码按权大小转换成相应的模拟输出分量,然后根据叠加原理将各代码对应的模拟输出分量相加,其总和就是与数字量成正比的模拟量,由此完成D/A转换。为实现上述D/A转换,需要使用解码网络。解码网络的主要形式有二进制权电阻解码网络和T形电阻解码网络。T形电阻网络整个电路是由相同的电路环节所组成,每节有两个电阻(R和2R);一个开关,相当于二进制数的一位,开关由该位的代码所控制。由于电阻接成T形,故称T形解码网络。此电路采用了分流原理实现对输入位数字量的转换。题图10-5为可以转换4位二进制数的T形电阻网络D/A原理图。图中无论从哪一个R-2R节点向上或向下看,等效电阻都是2R。从d0~d3,看进去的等效输人电阻都是3R,于是每一开关流人的电流不可以看做相等,即I=VREF/3R。这样由开关d0~d3,流人运算放大器的电流自上向下以1/2系数逐渐递减,依次为1/2I、1/4I、1/8I、1/16I。设d3d2d1d0为输人的二进制数字量,于是输出的电压值为:V0=一RFB∑Ii=一(RFB×VREF/3R)×(d3×2-1十d2×2-2十d1×2-3十d0×2-4)=一[(RFB(VREF/3R)×2-4]×(d3×23十d2×22十dl×21十d0×20)式中d0~d3取值为0或1,0表示切换开关与地相连,1表示切换开关与参考电压VREF接通,该位有电流输入。这就完成了由二进制数到模拟量电压信号的转换。由此公式可以看出VREF和V0的电压符号正好相反,即要使输出电压V0为正,则VREF必须为负。题图10-510.6DAC0832与80C51单片机连接时有哪些控制信号?其作用是什么?答见题图10-6,DAC0832与80C51单片机连接时的控制信号主要有ILE、CS、WR1、XFER、WR2。它们的作用如下:●ILE:数据锁存允许控制信号输人线,高电平有效。●CS:片选信号输人端,低电平有效。●WRl:输人寄存器的写选通输人端,负脉冲有效(脉冲宽度应大于500ns)。当CS为0,ILE为1,WR1有效时,DI0~DI7,状态被锁存到输人寄存器。●XFER:数据传输控制信号输人端,低电平有效。●WR2:DAC寄存器写选通输人端,负脉冲(脉冲宽度应大于500ns)有效。当XFER为0且WR2有效时,输人寄存器的状态被传送到DAC寄存器。题图10-610。7在一个晶振为12MHz的80C51应用系统中,接有一片DAC0832,它的地址为7FFFH,输出电压为0~5V。请画出有关逻辑框图,并编写一个程序,使其运行后,DAC能输出一个矩形波,波形占空比(为脉冲宽度与周期之比)为1:4。高电平时电在为2.5V,低电平时为1.25V。答:有关逻辑框图见题图10-6,编程序如下:MOVDPTR,#7FFFH;置口地址EX10_7A:MOVA,#7FH;将2.5V送出MOVX@DPTR,AACALLDELAY;调延时子程序(省略)MOVA,#3FH;将1.25V送出MOVX@DPTR,AACALLDELAY;调延时子程序ACALLDEL_AY;调延时子程序ACALLDELAY;调延时子程序AJMPEXl0_7A;循环10.8试说明逐次逼近A/D转换器的工作原理。答:逐次逼近式A/D转换器的转换原理即逐位比较,其过程类似于用砝码在天平上称物体重量。题图10-7为一个N位的逐次逼近式A/D转换器原理图。它由N