第八章 接口技术

78
第第第 第第第第 §8-1 第第第第第第 第第第第第 §8-2 第第第第第第 §8-3 第第第第第第 §8-4 D/A A/D 第第第第第第第第第第第第

description

第八章 接口技术. §8-1 单片机应用系统的人机通道 §8-2 键盘及其接口 §8-3 显示器及接口 §8-4 D/A 、 A/D 转换器及其与单片机的接口 . §8-1 单片机应用系统的人机通道 返回 一、输入 / 输出及其接口电路 1 、输入 / 输出 - PowerPoint PPT Presentation

Transcript of 第八章 接口技术

Page 1: 第八章   接口技术

第八章 接口技术

§8-1 单片机应用系统的人机通道

§8-2 键盘及其接口

§8-3 显示器及接口

§8-4 D/A、 A/D 转换器及其与单片机的接口

Page 2: 第八章   接口技术

§8-1 单片机应用系统的人机通道 返回 一、输入 / 输出及其接口电路 1 、输入 / 输出

计算机是一个高速、自动、连续进行数据处理的智能电子装置。依靠“存储程序”及“程序控制”来完成用户指定的任务。如果只有一台“主机”而没有与它配套的输入 / 输出( I/O )设备,它根本无法完成用户所指定的任务。 I/O 设备是人 ---- 机联系的桥梁。 I/O 操作是主机与外部环境进行通信的唯一手段,也是各种计算机系统必不可少的基本功能。

• I/O 设备通常是以主机作为参考点,若数据由外部环境流向主机,则称为输入;反之,则称为输出。

Page 3: 第八章   接口技术

I/O 设备与计算机之间的数据传输过程如下图所示 :

图 7-1 I/O 设备与计算机的数据传输方向

Page 4: 第八章   接口技术

I/O 操作是通过 I/O 设备来实现的。由于 I/O 设备种类繁多(输入设备如键盘、条形码识别器、鼠标器;输出设备有 CRT 显示器、LED 显示器、点阵针式打印机、激光印字机、绘图仪等)、速度差异大、记录信息的外部存储介质不同、处理的信息类型不同及信息传输方式不同(有的用串行方式,有的用并行方式、有的用串并行方式)。因此, I/O 操作比计算机内部操作要复杂一些。

2 、输入 / 输出接口电路 通常,主机不是直接与 I/O 设备相连,而是通过一个被称为接口的

电路把它们连接起来。

Page 5: 第八章   接口技术

二、主机与 I/O 设备之间的接口信号 主机与 I/O 设备之间进行数据传送时,不但有数据信息而且还

有控制信息和状态信息。如图 7-2 所示。

图 7-2 主机与设备之间的接口信号

Page 6: 第八章   接口技术

1 、数据信息 数据信息是主机与 I/O 设备交换的基本信息。通常有以下三种类型: 1 )数字量 如键盘输入主机的信息或主机输出给打印机的信息都是数字量,它们

或为二进制数或为 ASCⅡ 码。 2 )模拟量

在微型机控制系统中,大多输入信息均为现场的连续变化的物理量(如温度、压力、流量等)。通常,这些物理量需通过相应的传感器及 A/D转换器才能变成主机能接受和识别的二进制信息。

3 )开关量 它可表示两个状态,如开头的闭合和断开等,对于一个开关量只须用一位二进制数表示即可。

Page 7: 第八章   接口技术

2 、状态信息 除数据和定时信息外, I/O 设备还向主机发出若干状态信息,

状态信息反映了目前 I/O 设备的工作状态。对输入设备,“用准备就绪”信号表示待输入的数据是否准备就绪,以确定 CPU是否开始接收数据。对输出设备,则用“忙”信号表示它是否处于空闲状态,以确定 CPU是否开始发送数据,当然, I/O 设备还有其它的状态信号。

3 、控制信息 除数据和定时信息外,主机还要向 I/O 设备发出若干控制信

息,控制信息可选择 I/O 设备工作方式、启动或停止 I/O 设备的工作过程、选择格式、识别操作类型及优先级等。

Page 8: 第八章   接口技术

三、接口电路与端口 通常,主机每连接一个 I/O 设备就需要一个 I/O 接口电路(有时一

个接口可连接几台同类型 I/O 设备)。在 I/O 接口电路中有一组 CPU可寻址的寄存器,它们用来存放完成数据传送所必须的信息——数据、状态和控制信息。这些寄存器被称为端口,用来对来自 CPU或是送往 CPU或内存的数据起缓冲作用的端口,称为数据端口;用来存放 I/O 设备或接口本身的状态的端口,称为状态端口;用来存放由 CPU发出的命令的端口,称为控制端口。各接口电路根据需要设置端口。 CPU对各种端口进行的操作是不相同的,对数据端口可进行读写操作,对控制端口通常只进行写操作,而对状态端口只进行读操作。主机与 I/O 设备之间的通信是通过 I/O 接口电路的端口进行的。通常,每个端口都有一个地址码,以便访问。

Page 9: 第八章   接口技术

四、输入 / 输出寻址方式 当主机执行 I/O 操作时,应先对 I/O 接口中的端口进行寻址,

其寻址方式有如下两种: 1 、标准的 I/O寻址方式 此时, I/O端口单独编址。 CPU指令系统中有专门用于 I/O

操作的指令—— I/O 指令, CPU访问 I/O端口时发出 I/O读命令或写命令,访问内存时发存储器读或写命令。因此,端口地址与存储单元地址可重叠。此时, I/O端口不占用存储空间且与访问 I/O 设备指令有别。

2 、存储器映射 I/O寻址方式 这种寻址方式中,将 I/O端口与存储单元统一编址,即 CPU把 I/O端口作为存储单元对待, I/O端口占用一定的存储空间。采用这种寻址方式的 CPU指令系统中没有专门的 I/O 指令,

Page 10: 第八章   接口技术

所有对存储单元操作的指令都能用于对 I/O端口操作。其优点是程序设计灵活性好, I/O端口地址安排灵活且 I/O端口数目不受限制;缺点是减少了存储空间,执行指令时间较长且在程序中较难区分是存储器操作还是 I/O 操作。MCS-50系列单片机采用的就是这种寻址方式。

五、主机与外设之间的数据传送方式 传送方式有以下四种:

1 、无条件传送方式 采用这种传送方式的前提是外部控制过程的各种动作时间是固定的且是已知的。在进行数据传送时不必查询外设的状态。它总是处于“准备就绪”状态, CPU随时可与外设进行数据传送。这种传送方式的优点是硬件和软件都很简单。无条件传送方式实际上还是有条件的。即数据传送不能太频繁,以保证每次数据传送时外设总是“准备就绪”的。它只适用主机与简单外设(如拔盘或七段 LED 显示器等)之间的数据传送。

Page 11: 第八章   接口技术

2 、查询传送方式 查询传送方式在早期计算机中就已经彩了。在这种方式中主

机输入、输出数据的控制均由主程序完成。主程序反复检测外设的状态,以决定是否可传送数据。由此可, CPU处于主动地位,而 I/O 设备处于被动地位。典型的传送过程如下:主机首先启动外设,接着测试外设的状态,当外设“准备就绪”(输入设备)或“空闲”(输出设备)进行数据传送;否则,主机继续测试外设的状态,进行等待直至其“准备就绪”或“空闲”时为止。查询方式又称为条件传送方式。

3 、中断传送方式 采用中断传送方式时主机在启动外设后不再等待外设的状态,

而继续执行主程序,一旦外设的状态完成,立即就向主机请示中断,主机响应后转入相应的中断服务程序进行数据传送,数据传送完毕继续执行主程序。

Page 12: 第八章   接口技术

4、直接存储器存取( DMA )方式 DMA 是指利用 DM0控制器(简称 DMAC )实现外设与存储器之间的

直接数据传送。在传送过程中不需要 CPU介入。当然,在 DM0操作之前与 DMA 操作结束后仍需要 CPU的控制。

DMAC 在 DM0操作期间替代 CPU,负责控制 DM0传送工作。在微型机系统中 CPU、存储器、外设接口等功能部件均挂在系统总线上。在通常情况下,由 CPU掌握系统总线的控制权,当 CPU响应 DMA请示时,它释放对系统总线的控制权,而由 DMAC 接管对系统总线的控制,于是可在 DMAC 的控制下实现 DMA 操作。当数据传送完毕时, CPU恢复对系统总线的控制。 DMA 传送方式的主要优点是传送速度高,传送速率只受到存储器存取时间的限制,其缺点是硬件开销很大,在 DM0传送期间, CPU不能使用系统总,必须强调指出,采用 DMA 传送方式是有条件的。即 CPU的系统结构允许 DMA 操作。MCS-51 系列单片机中常用的单片机( 8051 、 8031 、 8751 等)不具备 DMA 操作的结构。 8086/8088则具备这个结构。

Page 13: 第八章   接口技术

微型机中常外设有 LED 显示器、 CRT 显示器、键盘、打印机、软磁盘存储器等。单片机应用系统中常设置 LED 显示器、拔盘、键盘、点阵式打印机等外设。

§8-2 键盘及其接口 返回 在微型机系统中,键盘是最常用的输入设备,键盘通常由数

字键和功能键组成,其规模取决于系统的要求。 键盘可分为编码键盘和非编码键盘两种,前者有检测键闭合,去抖动及产生相应键编码的硬件电路,而后者则没有这些硬件,上述功能在有少量的硬件支持下由软件来完成。由此可见编码键盘产生键编码的速度快且基本上不占用 CPU时间,但硬件开销大,电路复杂,成本高;非编码键盘则硬件开销省,电路简单,成本低,但占用 CPU时间较长。

单片机应用系统中为了降低成本,简化硬件电路,大多数采用非编码键盘,在此只介绍非编码键盘。

Page 14: 第八章   接口技术

一、按键及其抖动 按键可分为触点式和非触点式两大类。前者是利用机械触点

的闭合或断开来输入信息,而后者是利用按键动作改变某些物理参数或利用某种效应来输入信息。为了降低成本,在单片机应用系统上的键盘通常采用触点式的。由于机械触点的弹性作用,在闭合及断开瞬间均有一个抖动过程,如图 8-3 所示。抖动时间的长短与开关的机械特性有关,一般为 5ms~10ms,去抖动即可用硬件(最简单的是利用 R-S触发器)也可用软件来实现。在非编码键盘中是采用软 件延时消除抖动的。

图 8-3 按键的抖动

Page 15: 第八章   接口技术

二、非编码键盘工作原理 非编码键盘结构有小键盘结构(一级控制)和大键盘结构(二级控

制)两种。 1 、小键盘结构的工作原理及其接口 在单片机应用系统中常常需要使用简单的键盘完成输入操作,如输

入数据及命令等。按键的数量较少时可用小键盘结构,其接口如图 8-4所示。此接口电路的工作原理很简单,平时无键按下时,并行端口各输入线为电平,当有某键按下,相应的输入线为低电平。 CPU查询此输入口的状态就可知是哪个键闭合。此为一线一键的方法,当按键的数目增加时,将增加输入口的线数,为了减少占用输入线数,可采用矩阵式结构的键盘。

Page 16: 第八章   接口技术
Page 17: 第八章   接口技术

2 、大键盘结构的工作原理及其接口 图 7-5是 4×4键盘接口,它是矩阵式结构,如采用一键一线的小键

盘结构,要占用 16条 I/O 口线,采用矩阵式结构仅需占用 8条 I/O线。减少 I/O 口线是以增加件工作量为代价的。此时非编码键盘的工作是借用于“键盘扫描”程序进行的。键盘扫描程序包括从判断是否有键按下到获取键值并进行相应的键处理的全过程。

( 1 )是否有键按下的识别 首先必须解决如何判断是否有键被按下。开始时使所有行线 X1-X3 均

为低电平。当无键按下时,各行线与各列线相互断开,各列线仍保持高电平。当有键被按下时(如键 6号被按下),则相应的行线( X1 )与列线( Y2 )相连,该列线就变为低电平。由此可见,当各行线均为低电平时,测试各列线的状态即可知是否有键被按下。若各列线均高电平,则无键被按下;否则,有键被按下。

Page 18: 第八章   接口技术

( 2 )键的识别 通常有两种方法可识别被按之键:一种是“行扫描”法;一

种是“反转”法。 1 )行扫描法 依次对每一行进行扫描,选使被扫描的行为低电平,其它所

有的行均为高电平,接着检测各列线的状态(称为“列”)。若各列码均为高电平(即列码为全 1 ),则被按之键不在这行。继续扫描下一行;若列线不全为高电平(即列码为非全 1 ),则被按之在此行。根据行扫描码及列码就可知被按之键的坐标值(即位置码)。再根据位置码通过查表可得到它的键值。查表法的扫描子程序流程图如图 7-6所示。

Page 19: 第八章   接口技术
Page 20: 第八章   接口技术

除查表法外,还可通过简单的计算处理方法来得到键值。由图

7-5可知,键值 =行的首键值 +列值。行的首键值可通过以下方法得到:设置一首键值寄存器,初值为 1 (即为 0行的首键值)。从第 1 行 X1开始扫描,若列码为全 1 ,则扫描下一行,每扫描一行 RX的内容加键盘的列数(本例的列数为 4),直扫描到列码不为全 1 时为止。此时, RX的内容即为被按之键所处行的首键值。同样,列号也可利用 RY得到。再将两个寄存器的内容合并成一个寄存器,就可得到相应的键值。既可节省空间也可省去加法操作。其流程如图 8-7 所示。

Page 21: 第八章   接口技术

计算方法获取键值的程序框图

Page 22: 第八章   接口技术

2 )反转法 采用反转法的接口见图 7-9,反转法的基本思想是先由行线输

出全 0信号,接着由列线输入表示按键状态的代码。若有键被按下,则相应列线一定为 0;若无键被按下,则由列线输入的代码一定为全 1 ,当有键被按下时,将列线输入的代码由列线输出,然后由行线输入表示按键状态的代码。将先后两次输入的表示按键状态的代码组合,即为被按之键的位置码。

Page 23: 第八章   接口技术

反转法获取键值的原理图

Page 24: 第八章   接口技术

三、非编码键盘与 8031 单片机的接口 1 、接口电路

如图 8-9是 8×4非编码键盘与单片机的接口,是通过 8155 芯片与8031 相连。此时 8155PA 口工作于基本输出方式,作为行扫描码输出口,其地址可设为 7F01H, PC 口工作于基本输入方式,作为列码输入口,地址可设为 7F03H。

2 、键扫描子程序 扫描子程序调用三个子程序,即判有键闭合子程序 FSCANK、延时子程序 D20MS 及出错处理子程序 ERORR 。程序如下:

Page 25: 第八章   接口技术

8X4 接口电路如图所示:

Page 26: 第八章   接口技术

ORG 1000HSCANKE :MOV DPTR , #7F00H ;指向 8155 命令寄存器 MOV A , #03 ;设置 8155 命令字 MOV @DPTR, A ;写入命令字KEYDE1 : ACALL FSCANK;调用子程序,以判断是否有键闭

合 JNZ KEYDE1 ;若有键闭合,则转向 KEYDE1

LJMP DISPER ;若无键,则转显示子程序KEYDE1 : LCALL DSPME ;调用显示子程序,延时去抖动 ACALL FSCANK;调用 FSCANK子程序,以判键正常否 JNZ DEYDE2 ;若是正常,则转 KEYDE2

LJMP DISPER ;若是抖动,则转 DISPER

Page 27: 第八章   接口技术

KEYDE2 :MOV R2 , #0FFH ;置行扫描寄存器 R2初值 MOV R3 , #00H ;清键值寄存器 R3SCNEXT :MOV DPTR , #7F01H;指向 8155PA 口

MOV A , R3 ;送行扫描码 MOVX @DPTR , A ;输出行扫描码

INC DPTR ;修改指针 SCDONE : ACALL FSCANK ;判断该键是否释放 INC DPTR ;修改指针,指向 8155的 C 口 MOVX A ,@DPTR ;输入列码,以判该行有键闭合 CJNE A , #0FFH, LSCANR ;若有键,则转 LSCANR MOV A , R2 ;若该行无键,则判一遍扫描结束? JNB ACC.7 , ERROR ;若结束,则转 ERROR RL A ;若未结束,则修改扫描码 MOV R2 , A MOV A , R3 ;修改行首键值

Page 28: 第八章   接口技术

ADD A , #14 MOV R3 , A AJMP SCANEXT LSCANR :MOV B, #04H ;置列计数器 B初值 LSCANK: JNB ACC.1 , SCDONE ;如果该列有键闭合,则转

SCDONE INC R3 ;若无,则键值加A RR A ;列码右移 1位

DJNZ B, LSCANK ;若列检查末完,则转 LSCANK AJMP ERROR ;若检查完,无键闭合则转 ERROR

JNZ SCDONE ;若未释放,则等待 RET ;若已释放,则返回

FSCANK:MOV DPTR , #7F01H ;指向 8155PA 口 MOV A , #00H ;置全扫描码

MOVX @DPTR, A ;输出全扫描码 INC DPTR INC DPTR

Page 29: 第八章   接口技术

MOVX A , @DPTR ;读入列码 CPL A ANL A , #0FH ;列码取反,以便于检测 RET

ERROR :… DISPER :… D20MS :…

Page 30: 第八章   接口技术

§8-3 显示器及接口 返回 在单片机应用系统中最常用的两种显示器是发光二极管显示

器 (LED)和液晶显示器 (LCD)。主要介绍 LED 显示器及接口。 一、 LED 显示器简介

LED 是一种外加电压(阳极电位比阴极电位为高)超过额定电压时发生击穿,从而流过电流并发出可见光的器件。 LED是属于电流型控制器件,使用时必须加限流电阻。由于 LED体积小,功耗小,所以用途较广。

二、简单 LED 显示器接口 一个 LED就是最简单的输出设备,其接口电路如图 8-10所示。由于一般微型机接口芯片不能提供毫安级的电流,故应由驱动器推动。由图 8-10可知,驱动器的地址可设为 7FFFH。

Page 31: 第八章   接口技术

简单 LED 显示器接口原理图:

Page 32: 第八章   接口技术

例 8-1 由图 8-10可知, LED导通(发光)的条件是 P0.7 为 1 ,且 P2.7 , 同时为 1 。先使 LED截止 1分钟。当达到 1分钟时 8031 单片机发相应的信号,使P0.7 为 1 且 P2.7 , 同时为 0,点亮 LED 1秒钟,不断地重复上述操作就能满足题目的要求,相应的程序如下:

ORG 1000HSTART : SETB P0.7

MOV DPTR , #7FFFH;指向 LED 驱动器LOOP : CLR A

MOVX @DPTR , A ;关 LED 1分钟MOV B, 60 ;调用 1秒延时程序

LOOP1 : ACALL DT1S

Page 33: 第八章   接口技术

DJNZ B, LOOP1CPL A ;点亮 LED1秒钟MOVX @DPTR , A ACALL DT1SAJMP LOOP

DT1S :MOV R5, #32H ;延时 1秒钟子程序D20MS :MOV R6, #28H

D500NS :MOV R7 , #0F9H DNLOOP: DJNZ R7 , DNLOOP

DJNZ R6, D500NS DJNZ R5, D20MS RET

END

Page 34: 第八章   接口技术

三、七段 LED 显示器及其接口1 、七段 LED 显示器

在单片机应用系统中通常使用由八个 LED 器件组成的七段 LED显示器,其中七个 LED构成七笔字形,另一个 LED构成小数点(故有时称为八段显示器)。如图 8-10所示,其接法共有两种:共阴极与共阳极,前者是输入高电平有效( LED发光),后者是输入低电平有效。其工作原理是:控制其中各段 LED 的亮与暗即可显示出相应的数字、字母或符号。

Page 35: 第八章   接口技术

七段 LED 显示器进行显示的信息称为七段代码,不同接法的七段代码显然是不相同的,共阴极和共阳极的七段代码的相同字符相加为 FFH。两种代码分别如图所示:

Page 36: 第八章   接口技术

七段代码表(字形码)

字符 字 形 码 字符 字 形 码 字符 字 形 码共阴 共阳 共阴 共阳 共阴 共阳

0 3FH C0H 8 7FH 80H u 3EH C1H

1 06H F9H 9 6FH 90H y 6EH 91H

2 5BH A4H A 77H 88H

3 4FH B0H B 7CH 83H

4 66H 99H C 39H C6H

5 6DH 92H D 5EH A1H

6 7DH 82H E 79H 86H

7 07H F8H F 71H 8EH

Page 37: 第八章   接口技术

2 、七段显示器接口 在单片机应用系统中,通常会有若干位七段 LED 显示器。将每一位的七段 LED 显示器的公共端(阳极或阴极)引线称为“位选”线,而把每一位的引线称为“段选”线,即位选线用于选择所需的七段 LED 显示器,而段选线用来控制该显示器所显示器的内容。 七段 LED 有两种显示方式,即静态显示方式和动态显示方式。不同的显示的方式,位选线和段选线的连接方法不同。通常,静态显示是把各位七段 LED 显示器的位选线连在一起或接地(共阴极)可接电源(共阳接法),而每一位七段 LED 显示器的段选线与相应的 8 位并行输出口(或锁存器)相连,各位是独立显示的。这样,各显示位能同进显示不同的数字或字符, CPU为显示器服务的时间短且软件简单,但硬件接口开销大,接口电路复杂,动态显示是将各显示器的同名段选分别相连,由同一个 8 位并行输出口控制,而各显示器的位选线则分别则输出口线控制,这样各显示位不能同时显示不同的数字或字符。动态显示通常采用扫描的方法即从左到右(或从右到左)依次轮流使每位显示器显示数字或字符并保留一段时间(通常为 1~10ms),以造成视觉暂留效果,这样也可达到

Page 38: 第八章   接口技术

各显示位“同时”显示不同的数字或字符的目的。动态显示的最大优点是硬件开销省,接口电路简单,但它要求 CPU频繁地为显示服务。下面分别介绍静态锁存显示器接口和动态显示器接口。

( 1 )静态锁存显示器接口 在单片机应用系统的静态显示器接口中常采用MC14495 芯片。

它内部有锁存器、地址译码器、七段 ROM阵列及带有限流电阻的驱动电路,可与七段 LED 直接相连,其引脚及逻辑框图如图8-11 所示。

Page 39: 第八章   接口技术

引脚功能如下:DCBA : BCD 码或十六进制码输入;ab…g:七段代码输出; h+i:输入大于等于 10指示位。当输入的数大于或等于 10时为高电平,否则为低电平;

:输入等于 15指示位。当输入的数等于 15时, 输出为高电平,否则为高阻态;

:锁存控制信号。当 为低电平时输入数据,为高电平时将数据锁存。

Page 40: 第八章   接口技术

采用MC14495 芯片的 4 位静态七段 LED 显示器接口电路如图8-12 所示。

Page 41: 第八章   接口技术

例 8-2 :要求存放在内部 RAM中 30H及 31H单元中的 4 位十六进制数在图 8-12 所示的电路从左到右显示出来。试编写程序 解: 其显示程序如下:

ORG 1000HSDELAY: MOV A , 30H

ANL A , #0F0H;截取 30单元高位 BCD 码 MOV P1 , A ;在 1# 位置显示 39H单元中高位 BCD 码

MOV A , 30HSWAP AANL A , #0F0HINC A ;以指向 2#MC14495 芯片MOV P1 , A ;在 2# 位置显示 30H单元中低位 BCD 码MOV A , 31HANL A , #0F0H

Page 42: 第八章   接口技术

ADD A , #02H;以指向 3#MC14495 芯片MOV P1 , A ;在 3# 位置显示 31H单元中高

位 BCD 码MOV A , 31HSWAP AANL A , #0F0HADD A , #03H;以指向 4#MC14495 芯片MOV P1 , A ;在 4# 位置显示 31H单元中低

位 BCD 码RETEND

在静态锁存显示器中也可采用软件译码方法。但要求有锁存器存放相应的七段代码。

Page 43: 第八章   接口技术

(2)动态扫描显示接口 为了节约成本,简化硬件电路,在单片机应用系统中大多采用动态扫描显示。图 8-13 是 6 位动态扫描七段 LED 显示器接口。采软件译码方法。图中的 8155的 PA 口作为位选端口,其地址可设为 7F01H, PB口作为段选端口,地址可为 7F02H。例 :8-3 要求将 8031 单片机内部 RAM中的以 50H为首址的六个连续单元中存放的六个十六进制数在图 8-13 所示的接口电路中从左到右显示出来。

Page 44: 第八章   接口技术

动态扫锚接口电路

Page 45: 第八章   接口技术

解:由图可知,此接口采用软件设码方法。在本程序中采用近程查表获得十六进制数的相应七段代码。程序流程见图 8-14,程序如下:

ORG 1000HINDUP:MOV DPTR , #7F00H ; 8155设定工作方式

MOV A , #03H MOVX @DPTR , A

MOV R1 , #0FFH;置循环计数器初值DISUP: MOV R0, #50H; 置待显示数的地址初值

MOV R3 , #20H; 置位选码的初值(最左位)DISLP0: MOV A , R3

MOV DPTR , #7F01H;指向 8155PA 口MOVX @DPTR, A ; 送位选码INC DPTR ; 指向 8155PB口MOV A , @R0 ; 取将显示的数值

Page 46: 第八章   接口技术

ADD A , #0FH ; 查表取显示代码 MOVC A , @A+PC

MOVX @DPTR , A ; 将显示代码送 PB口进行显示 ACALL D1MS ; 延时 1ms,使显示稳定 INC R0 ; 修改指针,备下次取显示值使用 MOV A , R3 JB ACC.0, DINEND ;如果一遍显示结束,则转移 RR A ;未结束,则准备显示下一位 MOV R3 , A AJMP DISLP0

Page 47: 第八章   接口技术

程序框图如下:

Page 48: 第八章   接口技术

§8-4 D/A、 A/D 转换器及其与单片机的接口 返回

模拟量与数字量的转换技术包括实现两种形式的转换:即 D/A 和 A/D 转换。当计算机用工作控制时,这两种转换是计算机与外部环境联系的主要形式。

通常 D/A 和 A/D 转换是由专用的 D/A 转换器( DAC )与 A/D 转换器( ADC )芯片来实现的。

一、 D/A 转换1 、 D/A 的基本原理:

按二进制数的各位代码的数值,将每一位数字量转换成相应的模拟量,然后将各模拟量迭加,其总和就是与数字量成正比的模拟量。 DAC 的基本电路由四部分构成:参考电源、电阻网络、电子转换开关和运算放大器。如图 8-15所示。

Page 49: 第八章   接口技术

1 )参考电源 VREF:提供数字量转换成相应的模拟量的基准电源;2 )电阻网络:又称解码网络,是 DAC 的关键部件。本图中所示的为 R- 2RT 型网络,具有 4 位数字量输入;3 )电子转换开关:受输入数字量的控制。当该位为 1 ,则接通开关 1 ,

否则接通 0,从而总的输入电流,以形成对应的模拟量;4)运算放大器:将总的输入电流信号变成电压信号。

图中所示的 DAC最终输出电压:

Page 50: 第八章   接口技术
Page 51: 第八章   接口技术

2 、 DAC 的性能指标:1 )分辨率:数字量变化一个 LSB所对应的模拟量的变化量。取决于 DAC 的位数及满刻度值。也可用位数表示,如: 8 位、 12位等等。2 )线性误差: DAC 的实际转换特性与理想转换特性的偏差程序。3 )转换速率:每完成一次转换所需要的时间。也可用转换速率(即每秒钟完成的转换次数)表示。3 、常用芯片 DAC08321 )主要性能:

①输入的数字量为 8 位,能直接与 8 位微处理器或单片机相连 ②采用 CMOS工艺,所有引脚的逻辑电平与 TTL兼容;  ③数字量输入可以采用双缓冲,单缓冲或直通工作方式;④电流稳定时: 1μs;⑤非线性误差: 0.2%FSR(FSR即满量程 );⑥分辨率: 8 位;⑦单一电源, 5-15V,功耗 20mW;⑧参考电压: +10V—-10V。

Page 52: 第八章   接口技术

2 )内部结构及引脚功能 DAC0832 的内部结构框图及引脚排列图如图 8-16所示。

Page 53: 第八章   接口技术

D0-D7 : 8 位数字量输入;ILE :数据输入锁存允许,高电平有效; :片选信号端; :输入寄存器写信号。当以上三个信号有效有, LE1 有效,数据装入输入寄存器,实现数据的第一级缓冲;

:数据传送控制信号,控制从输入寄存器到 DAC寄存器的内部数据传输; : DAC寄存器写信号。当 和 均有效时, LE2 有效,将输入寄存器的数据装入 DAC寄存器并开始 D/A 转换,实现输入数据的第二级缓冲;

Page 54: 第八章   接口技术

:参考电压源,电压范围为 -10V-+10V; :内部反馈电阻接线端; : DAC 电流输出 1 。其值随输入数字量线性变化。当转换数字量为全“ 1” 时,最大,为全“ 0” 时最小; : DAC 电流输出 2 ,与 相加为常数。 :工作电源,其值范围为 +5V-+15,典型值为 +15V。AGND :模拟信号地线;DGND :数字信号地线。

Page 55: 第八章   接口技术

3 )、接口电路与编程DAC0832 与单片机的连接有三种形式:单缓冲方式、

双缓冲方式、直通方式。其中,单缓冲方式为最常用方式。①如图 8-17 所示,为 DAC0832 的单缓冲方式连接,

DAC寄存器处于常通状态。 P0口每送出一次数字量,经过 DAC0832 的转换和运算放大器的 I/V变换,在运算放大器输出端将得到一个与参考电压极性相反的电压输出( 0-5V)。

Page 56: 第八章   接口技术

对于图 1 完成一次 D/A 转换的编程模式为:MOV DPTR , #7FFFH ; P2.7=0, 选中 0832芯片MOV A , #data ;将要转换的数据放入累加器中MOVX @DPTR,A ;数字量从P0口送出,执行写时序,写信号有

效,完成一次数字量输入及 D/A 转换。

对于图 2 的连接方式,完成一次 D/A 转换的编程模式为:MOV DPTR , #0FFFEH ;用 A0 选中 DAC0832MOV A , #data ;装入要转换的数字量MOVX @DPTR, A ;输入数字量并启动 D/A 转换

Page 57: 第八章   接口技术

②双缓冲输出由单片机分两次发出控制信号,分时选通 DAC0832 内部的两个数据寄存器。第一次将转换数据输入并锁存在输入寄存器中,第二次再将数据由前级缓冲器送 DAC寄存器并送到 D/A 转换器完成一次转换输出。图 8-18所示。

Page 58: 第八章   接口技术

该方式的编程模式为:

MOV DPTR , #0FFFEH ;使P0.0=0, 选通 DAC0832MOV A , #data ;准备转换数据

MOVX @DPTR , A ;数据输入并锁存在输入寄存器中MOV DPTR , #0FF7FH;使P0.7=0MOVX @DPTR, A ;选通二级缓冲,并启动转换

在这种模式下 , 执行第二次MOVX指令 ,只是为了送选通信号 ,打开 DAC寄存器 ,此时 ,累加器中的内容将不能进入 0832,因为此时第一级输入寄存器已经关闭 ,A 中的数据无意义。

利用这种模式,可以提高转换的可靠性,同时也可以提高转换速率,另外也可以通过适当的连接将两片 0832 与单片机连接起来,实现二路模拟量同时转换输出。

Page 59: 第八章   接口技术

③直通方式如图 8-19所示,按照 0832 各个控制信号的要求把它们

接入固定的电平,使各个信号都处于有效状态,使两个内部寄存器实际上就成了输入数据的通路。这种方式适用于比较简单的场合。4) D/A 转换的输出形式①单极性与双极性输出②电流型输出

Page 60: 第八章   接口技术

5)应用编程举例:例 8-4:利用图 8-17 ( 1 )的电路,编写如图 8-20所示输出波形的程序

Page 61: 第八章   接口技术

①反向锯齿波输出START : MOV DPTR , #7FFFHDOWN1 : MOV R0, #80HDOWN2 : MOV A , R0

MOVX @DPTR, ADJNZ R0,DOWN2AJMP DOWN1

②正向锯齿波输出 (b):START: MOV DPTR , #7FFFH

MOV R0, #80HUP: MOV A , R0

MOVX @DPTR, AINC ROCJNE R0, OFFH, UPAJMP START

Page 62: 第八章   接口技术

③双向锯齿波( C )START : MOV DPTR , #7FFFH

MOV R0, #00HDA: MOV A , R0

MOVX @DPTR, AINC ROAJMP DA

④三角波输出( d)START : MOV DPTR , #7FFFHDA : MOV R0, #80HUP: MOV A , R0

MOVX @DPTR, AINC ROCJNE R0, #0FFH, UP

DOWN: DEC R0MOV A , R0

Page 63: 第八章   接口技术

MOVX @DPTR , ACJNE R0, #80H, DOWNAJMP DA

Page 64: 第八章   接口技术

5、其它类型的 D/A 转换器简介 除常用的 8 位芯片以外,还有多种系列性能不同的芯片,如表 8-2 所示。

表 8-2 常用 D/A芯片及主要技术参数

型 号 位数 精度 (25)℃

转换时间 电源电压 封装 说 明

DAC0832 8 0.2 1μs +5V~+15V 20脚DAC0808 8 0.39 150ns ±5V~±15V 16脚

AD7520 10 1/2LSB 500ns +5V~+15V 16脚AD7522 10 0.2 500ns +5V~+15V 28脚 并行或串行输入

DAC1003/1008

10 ±1LSB 500ns +5V~+15V 24脚 8位或 10位输入

DAC1208/1210

12 0.012-0.050

1μs 4.75~16V 24脚

DAC1200/1203

12 ±1/2LSB 电流输出 1.5 μs 电压输出 2.5

μs

+5V,±15V 24脚 12位或 3位 BCD码

AD7546 16 ±0.012 10 μs +15V,-5V 40脚

Page 65: 第八章   接口技术

二、 A/D 转换实现 A/D 转换的方法很多,基本上可分为两大类:一类

是直接型 A/D 转换,另一类为间接型 A/D 转换,即首先将模拟量转换成某种中间变量(时间,频率、脉宽等),然后再把中间变量转换成数字代码。1 、逐次比较式 A/D 转换器及其应用 逐次比较式 ADC 的采用比较法,将模拟量输入信号与标准的参考电压进行比较而得到与之对应的数字量。由逐次比较寄存器( SAR )、电阻网络、开关树及比较器组成。如图 8-21 所示。

比较器一端接需转换的输入模拟量,另一端接由标准参考电压经较比较网络而得到的比较信号。如图中假设 V ( REF+)=5V, V( REF- )=0V, VIN=1.5V,ADC工作过程为 :

Page 66: 第八章   接口技术

A/D 转换原理图:

Page 67: 第八章   接口技术

由启动 A/D 转换开始 ,2位 A/D 转换器的高位“ D1” 对应的一组开关中的“ 1” 闭合 ,“D0”位所对应的一组开关中的“ 0”全部闭合 ,此时送到比较器 K端的电压值即是电阻网络上“ B” 点所对应的电压值 ,VB约为 2V,此时 ,VIN<VK,比较不成功 ,需要重新设置数字量 ,于是 A/D 转换器内部控制逻辑发出控制信号 , 使“ D1”位的开关“ 0” 闭合 ,“1”打开 ,比较结果 , 确定“ D1”位为“ 0”,如果 VIN>VK,显然应保留“ D1”位的状态不变 ,则“ D1”位为 1,这样经过一次比较 ,确定一位数字位的值 ,接着进行第二次的比较。

第二次比较开始 ,“D0”位的开关“ 1” 闭合 ,“0” 打开 ,这时VK 上的电压值即是电阻网络上“ C” 点的电压值 ,约为 1V,此时 VIN>VK,于是“ D0”位的开关状态保持不变 ,比较数字量不需修正 ,这样二次比较结果为 :D1D0=01B。

Page 68: 第八章   接口技术

2 、常用的 A/D 转换芯片—— ADC08091 )主要性能①8 位(数字量输出)逐位比较型 A/D 转换器;②带有锁存功能的 8 位模拟转换开关,可对 8路 0-5V模拟量进行分时切换;③输出具有三态锁存功能, TTL 电平兼容;④分辨率: 8 位,转换时间: 100μs;⑤不可调误差:±LSB;功耗: 15mW;

⑥工作电压: +5V,参考电压标准值 +5V;⑦片内无时钟,一般需外加 640KHz以下(不低于 100KHz)的时钟源。

Page 69: 第八章   接口技术

2 )内部结构与引脚功能 ADC0809的内部结构与引脚排列如图 8-22 ( a)、( b)所示,基本上由三部分组成: 8路模拟量输入选择与地址锁存电路、典型 8 位逐比较 A/D 转换器、 8 位数字量输出锁存与缓冲器。

Page 70: 第八章   接口技术

主要引脚功能: ADDA-ADDC : 3 根地址输入线,经译码后选择 8路模拟量中的一路进行 A/D 转换; IN0-IN7 : 8路模拟量输入; ALE :地址锁存允许信号,由低电平到高电平的正跳变有效。在该信号有效期间,锁存地址线的状态,并启动译码电路,选中模拟量输入; START :启动转换信号,正脉冲有效,其上升沿将内部逐位比较寄存器复位,下降沿启动 A/D 转换; EOC :转换结束信号。该信号平时高电平,在 START 信号上升沿之后的 8个时钟周期内, EOC 变为低电平,转换结束,该信号又变为高电平,该信号可用作 A/D 转换器对单片机的中断申请信号,也可将它接到 ADC 的 START端,每次转换结束,重新启动 START ,使转换过程连续进行下去。若采用这种方法,必须先 在 ADC 外部加一个起动脉冲,使转换得以开始; OE :输出允许,高电平有效。该信号有效时,打开芯片的输出锁存器,将转换结果送至数据总线;D0-D7 : 8 位数字量输出端;

:参考电压正、负端;CLOCK: 外部时钟输入端。

Page 71: 第八章   接口技术

3 、接口电路ADC0809与单片机的连接,要能满足 ADC0809转换时序的需要,图 8-23 给出了一种基本的连接电路。

Page 72: 第八章   接口技术

4、编程一定的接口电路与 A/D 转换的编程相结合,便能实现单片机的数据采集功能。对于 ADC0809的转换程序而言,主要的问题是如何判断一次 A/D 转换的结束。通常的判断方法有三种,因而其对应的编程方式也有三种:1 )软件延时方法:8031 完成一次 A/D 转换的一般流程如下:①8031工作寄存器初始化②送通道地址,送启动转换信号③等待转换结束

④送读转换结束信号⑤输出转换结果。

Page 73: 第八章   接口技术

其中,“等待转换结束”是采用软件延时方法,延时时间取决于 ADC 器件完成一次转换所需的时间,这个时间必须通过计算和测试得到。例 8-3 :参照图 8-23 ,采用软件延时的方法分别对 8路模拟信号轮流采集一次,并依次把采集结果转换储到数据存储区中。解:程序如下:

START : MOV R1 , #DATA ; 送数据区首址(结果保存区)

MOV DPTR , #7FF8H;指向 0809通道 0

MOV R7 , #08H;置通道数LOOP: MOVX @DPTR , A ;启动 A/

D 转换 MOV R6, #0AH;软件延时

Page 74: 第八章   接口技术

DLAY: NOP NOP NOP DJNZ R6, DLAY MOVX A ,@DPTR ;读转换结果 MOV @R1 , A ;转储 INC DPTR ;指向下一个通道 INC R1 ;修改数据指针 DJNZ R7 , LOOP;采集 8个通道 RET

Page 75: 第八章   接口技术

2)中断方式这种方式使用 EON转换结束信号作为向 8031 的中断申请 .在主程序中 ,向 ADC 器件发出启动转换信号 , 然后继续执行主程序 .当接收到 EOC 信号后去执行中断服务程序。并启动下一次转换。例8-4 采用中断方式,编写8路模拟量采集程序,其它同例8-3 。解:程序如下:

ADMAIN: MOV R1 , #30HSETB IT1 ;置中断方式SETB EA ;开中断SETB EX1 ;开外部中断MOV R7 , #08H ;置信号通道数MOV DPTR , #7FF8H;指向通道 0MOVX @DPTR , A ;启动转换

Page 76: 第八章   接口技术

LOOP: SJMP $ ;等待中断ORG 0013HAJMP ADINTORG 0030H

ADINT : DJNZ LOOP1SJMP LOOP2

LOOP1 : MOVX A , @DPTR ;保存结果MOV @R1 , A ;转储INC DPTRINC R1MOVX @DPTR , A ;启动下一次转换

LOOP2 : RETI

Page 77: 第八章   接口技术

3 )查询方式 将 A/D 转换器的转换结束信号 EOC 接至单片机的某端口线(如:P3.3)启动转换开始后 ,即可查询该输入端是否出现转换结束信号 ,没有继续查询 ,直到出现结束信号 ,方可读取转换结果 .例 8-5 用查询方式编写采集一路模拟量 IN3 程序。解:程序如下:

START : MOV R1 , #30H; 指向数据区MOV DPTR , #7FFBH;指向 0809的 IN3

MOV @DPTR, A ;开始转换MOV R2 , #20H; 置延时常数

DLAY: DJNZ R2 , DLAY; 延时等待WAIT : JB P3.3 ,WAIT ; 查询转换信号是否产

生MOVX A ,@DPTR ; 读转换结果MOV @R1 , A ; 转存EDN

Page 78: 第八章   接口技术

本 章 小 结

单片机的接口技术是单片机控制系统中的关键技术。常用外围设备有键盘、显示器、 ADC 及 DAC 。本章主要介绍各种外围设备的特点、结构原理、与单片机的联结电路及编程方式。 重点:各种芯片的硬件连接及软件程序设计 难点:硬件电路设计及相应程序设计