视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
第十章-接口技术
2025-10-02 04:34:56 责编:小OO
文档
第一十章接口技术

10.1在80C51应用系统中扩展一片8255外界4位显示器和4位BCD码拨盘(参考题图10-1电路),试画出该部分的接口逻辑电路、并编写相应的显示子程序和读拨盘的子程序。

        

答:参考题图10-1设计电路如题图10-2所示,此外在PC0~3的各引脚上均接有一下拉电阻,图中省略没画。由题图10-2电路知A、B、C口和命令口地址分别如下:

ADDR_PORTA  EQU  07FFCH     ;A口地址

ADDR_PORTB  EQU  07FFDH     ;B口地址

ADDR.PORTC  EQU   07FFEH     ;C口地址

ADDR_CMND  EQU   07FFFH     ;命令口地址

;定义4个BCD码变量

CODE1  EQU  30 H

CODE2  EQU  31H

CODE3  EQU  32H

CODE4  EQU  33H

 

ORG   0030H

MOV   A,#10000001B          ;设置8255的PA、PB口为输出

MOV   DPTR,#ADDR_CMND   ;PC口高4位为输出,低4位为输人

MOVX  @DPTR,A

         

PRG_START:

   MOV   CODEl,#00H            ;初始化4个BCD码值

   MOV   CODE2,#00H

   MOV   CODE3,#00H

   MOV   CODE4,#00H

   MOV   R3,#8FH                  ;置码盘扫描码初值

   MOV   R2,#04H                  ;置码盘扫描次数

FIND_CODE:

   MOV   DPTR,#ADDR_PORTC

   MOV   A,R3

   MOVX  @DPTR.A                ;将码盘扫描码送出

   MOVX  A,@DPTR;读PC口低4位

   MOV   Rl,A                    ;暂存读数

   MOV   C,ACC.3

   MOV   A,CODEl

   RLC    A

   MOV   CODEI,A                ;将ACC.3从左移人CODEl

   MOV   A,Rl                    ;取读数

   MOV   C,ACC.2

   MOV   A,CODE2

   RLC    A

   MOV   CODE2.A                 ;将ACC.2从左移人CODE2

   MOV   A,R                     l;取读数

   MOV   C,ACC.1

   MOV   A,CODE3

   RLC    A

   MOV   CODE3,A                ;将ACC.l从左移人CODE3

   MOV   A,Rl                     ;取读数

   MOV   C,ACC.0

   MOV   A,CODE4

   RLC    A

   MOV   CODE4,A                  ;将ACC.0从左移人CODE4

   MOV   A,R3

   CLR    C

   RRC    A                         ;更改扫描位

   MOV   R3,A

   DJNZ   R2,FIND_CODE             ;4次扫描末完,继续

   MOV   Rl,#CODEl                ;将CODEl地址送Rl

   MOV   R2,#04H                    ;设置动态扫描位数

   MOV   R3,#0F7H                   ;设置当前扫描位

DSP_LP:

   MOV   A,#OFFH

   MOV   DPTR,#ADDR_PORTA

   MOVX  @DPTR,A                 ;关显示

   MOV    A,@Rl                      ;读当前地址内容

   ADD    A,#03H                    ;转换成段码

   MOVC   A,@A+PC

   AJMP   DSP_LPl

DM_TAB:

   DB      03FH,006H,05BH,04FH,066H,06DH,07DH,007H 

DB      07FH,06FH,000H,000H,000H,000H,000H,000H         ;A~F不显示'

DSP_LP1:

   MOV    DPTR, # ADDR_PORTB          ;设段码地址

   MOVX   @ DPTR, A                    ;将段码送出

   MOV    A,R3                          ;取位码

   MOV    DPTR, #ADDR_PORTA           ;设位码地址

   MOVX   @ DPTR, A                     ;将位码送出

   RR      A                              ;位码右移

   MOV    R3,A

   ACALL  DELAY_10MS                  ;调延时l0ms子程序(在此省略)

   DJNZ   R2,DSP_LP                      ;显示未完,继续

   AJMP   PRG_START                   ;转去执行读码盘

  

10.2  用串行口扩展4个发光数码管显示电路,编程使数码管轮流显示"ABCD"和"EFGH",每秒钟变换一次。

答:根据题图10-3中电路,设计程序如下

             

ORG   0030H

     CLR    P1. 0               ;清显示

     SETB   P1. 0

     MOV   SCON,#00 H        ;设置串口工作方式

 EX10_2A:

     MOV    R1,#04H           ;显示位数

     MOV    R2,#00H           ;地址偏移量

 EX10_2B:   

     MOV   A,R2               ;取显示段码

     ADD    A,#03H

     MOVC  A,@A+PC

     AJMP   EX10_2C            ;跳转

    DB     77H,7CH,39H,5EH      ;A,B,C,D的段码(本例中为共阳极)

EX10_2C:

    MOV   SBUF,A               ;启动串口发送

    JNB     TI, $                 ;等待一帧发送完毕

    CLR    TI                    ;清发送中断标志

    INC     R2                   ;修改地址偏移量

    DJNZ   R1,EX10_2B           ;一屏显示未完,继续

    ACALL  DELAY               ;调15延时子程序(省略)

    MOV    R1,#04H              ;下一帧显示

    MOV    R2,#00H

EX10_2D:

   MOV   A,R2

   ADD    A,#03H

   MOVC  A,@A+PC

   AJMP   EX10_2E               

   DB     79H,71H,3DH,76H        ;E,F,G,H的段码

 EX10_2E:

   MOV   SBUF,A

   JNB     TI, $

   CLR    T1

INC     R2

DJNZ   R1,EX10_2D

CALL   DELAY                 ;调1s延时子程序(省略)

AJMP   EX10_2A                ;循环

 

10.3  试说明非编码键盘的工作原理。为何要消除键抖动,又为何要等待键释放?

答:由非编码键盘所提供的行和列矩阵,通过接口电路或者单片机的I/O口与CPU相连。

CPU可以采用查询或中断方式了解有无键输人并检查是哪一个键按下,且将该键号送入

CPU。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。

由于目前,无论是按键或是键盘的大部分,都是利用机械触点的合、断作用。机械触点在闭合及断开瞬间由于弹性作用的影响,在闭合及断开即释放瞬间均有抖动过程,从而使电压信号也出现抖动。抖动时间长短与开关的机械特性有关。

按键的稳定闭合时间,由操作人员的按键动作所确定,一般为十分之几秒至几秒时间。在此期间电压信号将出现多次变化很容易产生误判。为了保证CPU对键的一次闭合仅作一次键输人处理,必须去除抖动影响。

当键释放时同样存在键抖动影响,为了确保键释放也需要等待和判别。

10.4  试设计一个用8255与16键键盘连接的接口电路,并编写键码识别程存。

答:由题图10-4电路知C口和命令口地址分别如下

 

题图10-4

ADDR.PORTC  EQU  07FFEH         ;C口地址

ADDR_CMND  EQU  07FFFH         ;命令口地址

 

      ORG     0030H

      MOV     A,#10001000B            ;设置PC口位(3~0)为输出,位(7~4)为输人

      MOV     DPTR,#ADDR_CMND       ;命令口地址送DPTR

      MOVX    @DPTR,A

      MOV     DPTR,#ADDR_PORTC

      MOV     A,#0F0H

      MOVX    @DPTR,A                 ;将PC口位(3~0)置0

 KEY: ACALL   KS                        ;调用KS判断有键按下吗?

JNZ      K1                        ;有键按下则转Kl

      AJMP     KEY                      ;无键按下转KEY

Kl: ACALL    DLY_20MS                 ;有键按下延时去抖动

      ACALL    KS                        ;调用KS再判断有无键按下?

JNZ       K2                         ;键按下,转逐列扫描

      AJMP     KEY                        ;误读键,返回

K2:MOV      R2,#0FEH                   ;首列扫描宇送R2

      MOV      R4,#00H                     ;首列号送R4

   K3:MOV      DPTR,#ADDR_LPORTC       ;将列扫描字(R4低4位)送PC位(3~0)

      MOV      A,R2

      MOVX    @DPTR,A

      NOP

      MOVX    A,@LDPTR                  ;读PC位(7~4)

      JB        ACC.4,L1                   ;第0行无键按下,转查第1行

      MOV     A,#00H                       ;有键按下,置第0行首键号

      AJMP     LK                           ;转求键号

   LI: JB       ACC.5,L2                    ;第1行无键按下,转查第2行

      MOV      A,#04H                   ;有键按下,置第1行首键号

      AJMP     LK                         ;转求键号

    L2: JB      ACC.6,L3                   ;第2行无键按下,转查第3行

      MOV     A,#08H                     ;有键按下,置第2行首键号

      AJMP    LK                           ;转求键号

   L3: JB      ACC.7,NEXT                 ;第3行无键按下,改查下1列

      MOV    A,#0CH                      ;有键按下,置第3行首键号

  LK:ADD     A,R4                         ;求键号:形成键码送A

      PUSH   ACC                          ;键码入栈保护

  K4: ACALL   DLY_20MS                    ;等待键释放

     ACALL   KS

     JNZ      K4

     POP      ACC                          ;键释放,键码出栈

     RET                                    ;键扫描结束,返回

NEXT: INC     R4                            ;修改行号

     MOV     A,R2

JNB      ACC.3,KEY                     ;第4列为0,己扫完最高列,转开始

RL        A                      ;末扫描完,扫描宇左移1位,变为下1列扫描

MOV     R2,A                      ;扫描字送回R2

AJMP     K3                       ;转列扫描

;---------------------------------------

KS: MOV     DPTR,#ADDR_PORTC

     MOV     A,#0F0H

     MOVX   @DPTR,A                ;全扫描字OH送PC口低4位

     NOP

     MOVX   A,@DPTR                  ;读人PC高4位

     ORL     A,#0FH                   ;屏蔽低4位

     CPL      A                         ;变成正逻辑,以高电平表示有键按下

     RET

 

10.5  什么是D/A转换器?筒述T形电阻网络转换器的工作原理。

答:在计算机控制的实时控制系统中,有些被控对象需要用模拟量来控制,模拟量在此指连续变化的电量。此时,就需要将数字量转换为相应的模拟量,以便操纵控制对象。这一过程即为"数/模转换"D/A(Digit to Analo9)。能实现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.6  DAC0832与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-6

10。7   在 一个 晶振 为 12MHz的 80C51应 用 系统 中,接 有一 片DAC0832,它的  地址为 7FFFH,输出电压为 0~5V。请画出有关逻辑框图,并编写一个程序,使其运行后, DAC能输出一个矩形波,波形占空比(为脉冲宽度与周期之比)为 1: 4。高电平时电在为 2.5V,低电平时为1.25V。

答:有关逻辑框图见题图10-6,编程序如下:

    MOV     DPTR,#7FFFH    ;置口地址

EX10_7A:

    MOV     A,#7FH          ;将2.5V送出

    MOVX    @DPTR,A

    ACALL   DELAY            ;调延时子程序(省略)

    MOV     A,#3FH            ;将1.25V送出

    MOVX    @DPTR,A

    ACALL   DELAY            ;调延时子程序

    ACALL   DEL_AY           ;调延时子程序

    ACALL   DELAY            ;调延时子程序

    AJMP     EXl0_7A           ;循环

 

10.8  试说明逐次逼近A/D转换器的工作原理。

答:逐次逼近式A/D转换器的转换原理即"逐位比较",其过程类似于用砝码在天平上称物体重量。题图10-7为一个N位的逐次逼近式A/D转换器原理图。它由N位寄存器、D/A转换器、比较器和控制逻辑等部分组成,N位寄存器代表N位二进制数码。

            

题图10-7

当模拟量VX送入比较器后,启动信号通过控制逻辑电路启动A/D开始转换。首先,置N位寄存器最高位(Dn-1)为"1",其余位清"0";N位寄存器的内容经D/A转换后得到整个量程

一半的模拟电压心VN与输人电压VX比较。若VX≥VN时,则保留Dn-1=1 ;若VXDn-1位清0。然后,控制逻辑使寄存器下一位(Dn-2)置"1",与上次的结果一起经D/A转换后

与VX比较,重复上述过程,直至判别出D0位取"1"还是取"0"为止,此时控制逻辑电路发出转换结束信号DONE。这样经过N次比较后,N位寄存器的内容就是转换后的数字量数据,整个转换过程就是这样一个逐次比较逼近的过程。

10·9  在一个晶振为12MHz的80C51系统中接有一 片A/D器件ADCO809,它的地址为 0EFF8H~0EFFFH。  试画出有关逻辑图 ,并编写定时采样 0~3通道的程存。设采样频率为 2ms 1次,每个通道采 50个数。把所采的数按 0、1、2、3通道的顺存存放在以 3000H  为首址的片外数据存储区中。

答有关逻辑框图见题图10-8,编程序如下

题图10-8

MOV     Rl,#50       ;设置采样次数

MOV     R5,#30H       ;数据存放首地址

MOV     R6,#00H

EX10_9A:

   MOV     R2,#04H       ;采样通道数

   MOV     R3,#0EFH      ;设置0通道地址

   MOV     R4,#0F8H

EX10_9B;

   MOV     DPH,R3

   MOV     DPL,R4

   MOVX   @DPTR,A

   NOP

   JB        INTl,$         ;等待转换完成

   MOVX    A,@DPTR    ;将转换结果读入

   INC       R4            ;通道地址加1

   MOV     DPH,R5      ;取存储地址

MOV     DPL,R6

MOVX   @DPTR,A      ;保存结果

   INC      DPTR          ;修改地址

 MOV     R5,DPH        ;保存地址

MOV     R6,DPL

LCALL   DLY_2MS      ;调延时2ms子程序(省略)

   DJNZ    R2,EX10_9B     ;4路转换未完,继续

DJNZ    R1,EX10_9A     ;50次转换未完,继续

LJMP    $               ;结束

 

 下载本文

显示全文
专题