版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章基于总线的I/O接口设计8.1基于ISA总线的I/O接口设计8.2基于PCI总线的I/O接口设计8.3基于USB总线的I/O接口设计习题8.1基于ISA总线的I/O接口设计
例8.18位ISA总线接口。图8.1是一个8位ISA总线上的接口,该接口利用可编程并行接口芯片8255实现。当对8255芯片作适当的初始化后,该接口就可以作为8/16位I/O端口实现数据传输。该接口采用部分地址译码,端口地址为B8H~BFH。若要从I/O端口(假设为8255的A、B联合口)获得16位数据,则在8位ISA总线上的操作可为:
图8.1一个8位ISA总线接口
MOVAL,92H;初始化8255,OUT0B3H,AL;A、B口方式0,输入INAL,0B1H ;从8255B口读入数据高8位MOVAH,ALIN AL,0B0H;从8255A口读入数据低8位
…图8.2一个16位ISA总线接口
若要从I/O端口(假设为U1和U2的A口)输出16位数据,则在16位ISA总线上的操作可为:
MOVDX,0F006HMOVAL,89HOUTDX,AL ;初始化U1,A口方式0,输出MOVDX,0F007HMOVAL,89HOUTDX,AL ;初始化U2,A口方式0,输出
MOVDX,0F000HMOVAX,5555HOUTDX,AX ;16位数据从U1和U2的A口同时送出
…若要从I/O端口(假设为U1和U2的A、B口)输出32位数据(假设高16位在IFOH存储单元中,低16位在IFOL存储单元中),则在16位ISA总线上的操作可为:
MOVDX,0F006HMOVAX,8989HOUTDX,AX ;初始化U1和U2,A、B口方式0,输出
MOVDX,0F000HMOVAX,IFOLOUTDX,AX ;低16位数据从U1和U2的A口同时送出MOVDX,0F002HMOVAX,IFOHOUTDX,AX ;高16位数据从U1和U2的B口同时送出
…8.1.1LED接口
1.LED数码管
LED数码管是工业控制系统中十分常见的一种显示装置。它价格便宜,显示简洁、醒目。它可以显示数字或字符,可以一位或多位组合。
LED数码管分为共阳和共阴两种结构。在封装上有将一位、二位或更多位封装在一起的。由于篇幅限制,这里只介绍一位共阳封装的LED数码管,如图8.3所示。
图8.3共阳LED数码管的示意图
2.接口电路
1)用通用并行接口芯片作接口在6、7章中介绍的锁存器、三态锁存器及可编程并行接口8255均可作为LED的接口器件。在此,利用锁存器74LS273作为输出接口,并用开路集电极门7406作为驱动器和LED数码管相连,用三态门74LS244作为按钮S的输入接口,连接电路如图8.4所示。
图8.4LED数码管及按钮的一种接口电路
在图8.4中,要使数码管显示某数字或符号,必须用软件来产生相应的数据,这是因为接口电路中没有硬件译码器。例如,要显示数字3,则LED的a、b、c、d、g各段应亮而e、f应不亮。结合图8.4,则应向74LS273写数据4FH。为了方便,可在内存中建立有关显示的数字(或符号)与相对应输出数据的对应表。下面一段程序可判断按钮的状态。当S闭合时数码管显示3;当S断开时显示6。
START:MOV DX,00F1HIN AL, DXTEST AL,01HJNZ KOPENMOV DX,00F0HMOV AL,4FHOUT DX,ALJMP STARTKOPEN:MOV DX,00F0HMOV AL,7DHOUT DX,ALJMP START
2)用LED译码器作接口目前有许多芯片生产商提供了将BCD数据或十六进制数据直接转换成7段LED数码管显示信息的译码器芯片。为了方便用户设计,这类芯片大多集成了锁存器与驱动器,使得它们可以直接作为LED数码管与计算机系统(总线)间的接口。
(1)DM9368——7段译码驱动锁存器。DM9368是由FairchildSemiconductor公司生产的一款7段译码驱动器,在其内部加入了输入锁存电路和用于直接驱动共阴极型LED显示的恒流输出电路。该芯片如图8.5所示。
图8.5DM9368芯片(a)引脚图;(b)引脚功能描述
表8.1DM9368芯片的真值表
利用DM9368实现的一种LED数码管接口电路如图8.6所示。
图8.6利用DM9368实现LED数码管接口电路
若利用图8.6电路中的4个数码管,实现将存储单元BUF中的4位十六进制数加以显示,并每经过1秒,重新读取BUF单元数据,更新显示,则控制程序如下:
MOVCL,4RP:MOVAX,BUFMOVBL,AL
ANDAL,0FH
OUT0A0H,AL
MOVAL,BL
ANDAL,0F0HSHRAL,CLOUT0A1H,ALMOV
AL,AHANDAL,0FHOUT0A2H,ALMOV
AL,AHAND
AL,0F0HSHRAL,CLOUT0A3H,ALCALLDLY1s ;DLY1s为1s延迟程序JMPRP
(2)MM74C912/917——6位数字BCD/Hex显示控制驱动器。MM74C912/917是另一类可用于LED接口的器件。MM74C912/917是NationalSemiconductor公司生产的6位BCD/Hex数字显示的控制与驱动器。与DM9368一个芯片驱动一个7段数码管不同,一个MM74C912/917芯片可控制驱动6个8段数码管。
MM74C912/917显示控制器是带有存储器的接口元件,可驱动6个数位的8段LED显示。显示控制器通过5个数据输入A、B、C、D和DP接收数据信息,并通过3个地址输入K1、K2和K3接收数位信息。
MM74C912/917芯片的引脚如图8.7所示,真值表见表8.2,显示字符格式见表8.3,工作时序如图8.8所示。
图8.7MM74C912/917芯片的引脚图
表8.2真
值
表
表8.3显示字符格式
图8.8MM74C912/917的工作时序
MM74C912段译码器将BCD数据转换成7段格式,MM74C917将二进制数据转换成十六进制格式。
MM74C912/917显示控制器利用CMOS技术制造,5V供电,所有输入是TTL兼容的,段输出通过限流电阻直接驱动LED显示。数位输出设计为直接驱动一个发射极接地的数位晶体管的基极,而不需要达林顿(Darlington)结构。正如图8.9所示,显示控制器包含6个5位寄存器,其中任何一个可以被随机地写。内部的多路转换开关扫描寄存器并刷新显示。对于超负荷微处理器而言,这种只写存储器与自扫描显示的结合使显示控制器成为一种“刷新典范”,且使LED动态显示的设计实现变得十分简便。
图8.9MM74C912/917显示控制器的内部电路框图
利用MM74C912/917实现的一种LED数码管接口电路如图8.10所示。若图8.10电路中采用MM74C912芯片作为LED数码管接口,可实现十进制数显示。现在在以DATA为首地址的存储单元中存放有一个6位非压缩型BCD数(十进制数),高4位为整数部分,低两位为小数部分,数码高位放在高地址中,依次排列。将这个带有小数点的6位数加以显示的控制子程序如下:
LEDDISPLAY:PUSHSIPUSHDXPUSHAXLEASI,DATAMOVDX,02F8HMOVAL,[SI+5]OUTDX,AL;千位数输出到数码管1INCDXMOVAL,[SI+4]OUTDX,AL;百位数输出到数码管2INCDXMOVAL,[SI+3]OUTDX,AL
;十位数输出到数码管3INCDXMOVAL,[SI+2]ORAL,10HOUTDX,AL;个位数+小数点输出到数码管4INCDXMOVAL,[SI+1]OUTDX,AL;十分之一位数输出到数码管5INCDXMOVAL,[SI]OUTDX,AL;百分之一位数输出到数码管6POPAXPOPDXPOPSIRET若图8.10电路中采用MM74C912芯片作为LED数码管接口,可实现十进制数显示。假设在以DATA为首地址的存储单元中存放有一个6位非压缩型BCD数(十进制数),高4位为整数部分,低两位为小数部分,数码高位放在高地址中,依次排列。将这个带有小数点的6位数加以显示的控制子程序如下:
LEDDISPLAY:PUSHSIPUSHDXPUSHAXLEASI,DATAMOVDX,02F8HMOVAL,[SI+5]OUTDX,AL;千位数输出到数码管1INCDXMOVAL,[SI+3]OUTDX,AL;十位数输出到数码管3INCDXMOVAL,[SI+2]ORAL,10HOUTDX,AL;个位数+小数点输出到数码管4INCDXMOVAL,[SI+1]OUTDX,AL;十分之一位数输出到数码管5INCDXMOVAL,[SI]OUTDX,AL;百分之一位数输出到数码管6POPAXPOPDXPOPSIRET图8.10MM74C912/917实现的LED数码管接口电路
8.1.2键盘接口
1.非编码式键盘
1)键盘的基本结构一般非编码式键盘采用矩阵结构,如图8.11所示。图中采用6×5矩阵,可接30个按键。微处理器通过对行和列进行扫描来确定有没有键按下,是哪一个键按下。然后将按下的键的行、列编码送处理器进行处理。
图8.11矩阵式键盘及其接口
在30个按键中,16个(0~F)是十六进制键,其余则是功能键。每个键占有惟一的行与列的交叉点,每个交叉点分配有相应的键值。只要按下某一个键,经键盘扫描程序和接口,并经键盘译码程序,就可以得到相应的键值。也就是说,微处理器知道了是哪一个键被按下,就可以作相应的处理。如按下2行、
4列的按键(十六进制“4”键),则经键盘扫描和键盘译码以后,就可以在寄存器AL中得到对应的键值04H。在图8.11中,按键对应的键值被标注在交叉点的旁边。
2)键盘接口该键盘有6条行选择线和5条列选择线。使用一个输出口作为行选择线输出,其对应关系如下:
同样,用一个输入口作为列选择线输入,其对应关系为:
根据上述关系,我们选用一块8D锁存器作为行输出口,其各位输出经反相后与键盘的各对应行选择线相连接。选择一块8输入/输出的三态门作为列输入口,它的各位输入与键盘的各对应列选择线相接。行、列线的端口地址分别为DIGLH和KBSEL。电路的具体连接见图8.11。
矩阵式键盘的扫描过程如下:在初始状态时,所有行线均为高电平。扫描开始,首先给第0行加一个低电平(由锁存器输出高电平加至反相器而得到),其余行加高电平,即扫描第0行。然后检查一下各列信号,看是否有哪一列输出变成了低电平(当键被按下时,行线和列线通过键接触在一起,行线的低电平就传送到对应的列线),如果其中有一列变为低电平,那么根据行、列号即可知道是哪一个键被按下了。如果未发现有变为低电平的列线,则接着扫描下一行。这时,使第0行变高,第1行变低,然后再检查各列线情况……如此循环扫描,只要有键被按下,就可以检测出。
在扫描键盘过程中,应注意如下问题:
(1)键抖动。按键会产生机械抖动,这种抖动经常发生在键被按下或抬起的瞬间,一般持续几毫秒到十几毫秒,随键的结构的不同而不同。在扫描键盘过程中,必须想办法消除键抖动,否则会引起错误。消除键抖动可以用硬件电路来实现,如图8.12所示。它利用触发器来锁定按键状态,以消除抖动的影响。较简单的方法是用软件延时来消除键的抖动。也就是说,一旦发现有键按下,就延时20ms以后再去检测按键的状态。这样就避开了键发生抖动的那一段时间,使CPU能可靠地读取按键状态。
图8.12按键的硬件消抖电路
(2)串键。串键是指一个以上的按键被同时按下而产生的不确定或错误问题。解决串键可采取的方法有:
一是无效处理,当发现有一个以上按键同时被按下时,认为此次按键输入无效;二是等待释放,将最后释放的按键作为有效键处理;三是硬件封锁,当发现有一按键被按下时,硬件电路即刻封锁其他按键的输入,直到该键处理完毕。
(3)应防止按一次键而产生多次处理的情况。这种情况的发生是由于键扫描速度和键处理速度较快,当某一个按下的按键还未释放时,键扫描程序和键处理程序已执行了多遍。这种程序执行和按键动作的不同步,将造成按一次键有多个键值输入的错误状态。为了避免发生这种情况,必须保证按一次键,CPU只对该键作一次处理。为此,在键扫描程序中不仅要检测是否有键按下,在有键按下的情况下,作一次键处理;
而且在键处理完毕后,还应检测按下的键是否抬起,只有当按下的键抬起以后,程序才继续往下执行。这样每按一次键,只作一次键处理,使两者达到了同步,消除了一次按键有多次键值输入的错误情况。
3)键值的确定由图8.11可知,键的行、列号不是该键所对应的键值。那么,CPU如何根据行列号得到所按下键的键值呢?最方便的方法是利用按键所在行列号,形成一个查表值,然后查表得到相应的键值。如图8.11所示,当某一个键被按下时,根据该键所处的行、列号,CPU可以通过接口得到相应的行寄存器值及列寄存器值,如表8.4所示。
表8.4行、列寄存器值一览表
例如,键“8”处于3行,3列。那么,当按下该键时,行寄存器和列寄存器的值分别为08H和17H。为了简化键值表,我们将行寄存器和列寄存器两个字节的值拼成一个字节。拼字的规律是:
(FFH-行号)×16+列寄存器值
从而得到查表值。例如,键“8”查表值可按上述规律计算得:
键“8”查表值=(FFH-03H)×16+17H=C0H+17H=D7H键值表如表8.5所示。表中列出了28个按键的查表值。表的首地址为KYTBL。表8.5键
值
表
4)键盘扫描及译码程序键盘扫描及译码程序的流程图如图8.13所示。首先向行寄存器送FFH,由于锁存器输出加有反相器,故使所有行线置为低电平。然后读列输入端口,看是否有某一条列线变成低电平(只要有键按下,总有一条列线为低电平),即列输入口的b0~b4位中有某一位为0。
图8.13键盘扫描及译码程序流程图
如果有键按下,则进行键盘扫描;否则就说明无键按下,就跳过键盘扫描程序。当发现有键按下时,就进行逐行扫描。首先使L0行线置成低电平(行寄存器b0位送1),其他行线L1~L5均为高电平(行寄存器b1~b5位送0)。然后读列输入端口,看是否有某一条列线是低电平(表示有键按下)。如果有的话,根据所在行、列号即可从键值表中查得按下键的对应键值。如果所有列线都是高电平,则说明按下的键不在当前扫描的那一行。接着就扫描L1行,使L1行变低,L0、
L2~L5行线均为高电平。如此循环,最终可以对所有键扫描一次。为了消除键抖动,当判断出键盘上有键按下时,应先延时20ms,然后再进行键盘扫描。用汇编语言编写的键盘扫描程序如下:
;键盘扫描程序DECKY:MOV AL,3FH MOV DX,DIGLHOUT DX,AL ;行线全部置为低电平MOV DX,KBSELIN AL,DXAND AL,1FHCMP AL,1FH ;判有无键闭合JZ DISUP ;无键闭合转显示程序CALL D20MS ;消除键抖动,D20MS为20ms延时子程序MOV BL,01H ;初始化行扫描值
KEYDN1:MOV DX,DIGLHMOV AL,BLOUT DX,AL ;行扫描MOV DX,KBSELIN AL,DX ;该行是否有键闭合AND AL,1FH ;有则转译码程序CMP AL,1FHJNZ KEYDN2SHL BL,1MOV AL,40HCMP AL,BL ;所有行都扫描完否JNZ KEYDN1 ;未完JMP DISUP ;扫描完转显示
KEYDN2:MOV CH,00H ;键盘译码程序KEYDN3:DEC CHSHR BL,1JNZ KEYDN3SHL CH,1SHL CH,1SHL CH,1SHL CH,1ADD AL,CH ;实现(FFH-行号)×16+列MOV DI,OFFSETKYTBL ;端口值
KEYDN4:CMPAL,[DI] ;寻找键值
JZ KEYDN5
INCDI
INCBL ;表序号加1
JMPKEYDN4KEYDN5:MOVDX,KBSELKEYDN6:IN AL, DX
ANDAL,1FH
CMPAL,1FH ;检测键是否释放
JNZ KEYDN6 ;未释放继续检测
CALLD20MS ;消除键抖动
MOV
AL,BL ;键值送AL…2.编码式键盘
1)与系统的连接方式目前,微机系统采用的101/102键盘或104键盘均属于编码式键盘。由于这类键盘的按键较多,如果仍采用非编码式键盘的处理方法的话,可以看出,为了要及时发现键盘中的按键是否按下,CPU必须定时或不断地利用软件(扫描程序)对键盘进行扫描,这样CPU的开销太大,降低了CPU的工作效率。为了提高CPU的工作效率,有关厂家专门开发了用于键盘接口的大规模集成电路芯片,例如8279、SSK814。这两种芯片适用于矩阵式键盘接口,它们共同的特点是:键盘扫描及键码读取都是由这些接口的硬件动作完成的,无需CPU进行干预;只有在有键按下时,接口才向CPU提出中断请求,要求CPU将键码读入。这样CPU的工作效率就可大大提高。因此,编码式键盘大多是通过专用键盘接口与系统进行连接的。
2)专用键盘接口芯片
8279是一种通用可编程键盘和显示器接口芯片。它可为64个触点和键盘矩阵提供扫描式接口。只要按下一个键就会产生一个表示键位置的6位编码,它和键盘有关状态信息一起存入先进先出(FIFO)寄存器中。当FIFO寄存器中有数据时,8279就会向CPU提出中断请求,等待CPU将键编码取走。消除键抖动及键封锁也是由8279本身的硬件实现的。只要开始对8279进行初始化,此后就可按指定的功能要求实现CPU与键盘的接口。利用8279芯片作为键盘接口的框图如图8.14所示。
SSK814芯片也是专门用于键盘接口的大规模集成电路芯片。它与8279一样,也可以方便地与8×8键盘矩阵接口。但是,与8279最主要的区别是,SSK814芯片是用4条线以串行通信方式与CPU交换信息的。这种信息传送方式的好处是,SSK814往往可以和键盘配置在一起,利用串行通信线和CPU进行通信。这样键盘可以考虑离CPU远一些,在结构设计时要方便得多。而8279由于以系统总线方式和CPU接口,因此一般都放在CPU板附近。利用SSK814作为键盘接口的框图如图8.15所示。
图8.14利用8279作为键盘接口的框图
图8.15利用SSK814作为键盘接口的框图
3)PC键盘所有的PC键盘都是完全可互换的,它是PC中少数的几个从不会与其他部件发生冲突的设备之一。PC键盘采用智能接口与微机相连,该智能接口在微控制器(即单片机)的控制下实现按键检测、键码识别及与微机双向通信等功能。
XT键盘是最老的PC键盘,总键数为83个。AT键盘增加了键盘指示灯或数据键块,总键数为84个,它使XT键盘基本上在一夜之间便消失了。AT增强型键盘新增了一些功能键,在主键和附加键块之间有独立的光标控制,它是目前能买到的惟一老式键盘,总键数为101个。目前流行的键盘是Windows键盘,它是AT键盘的变种,它增加了特定的Windows键:两个启动菜单键和一个与按鼠标右键等同的菜单键,总键数为104个。
AT键盘接口采用专用控制器负责键盘扫描。若有闭合键,则将其扫描码存入FIFO缓冲器(16/20字节)。当主机允许键盘输入时,扫描码经串行接口送往主机的键盘接口8042。Intel8042/8742是一种通用微控制器,用来构成PC扩展键盘接口,它将来自串口的键盘扫描码转换成与XT键盘兼容的系统扫描码,送至CPU。键盘接口与CPU间的通信是利用键盘缓冲区以中断方式完成的,其接口框图如图8.16所示。
图8.16AT键盘接口框图
8.1.3光电隔离接口
1.光电隔离器件光电隔离器件的种类很多,但其基本的原理是完全一样的。典型的光电隔离器件的电原理图如图8.17所示。图中,光电隔离器件由两部分组成:发光二极管和光敏三极管。当发光二极管通过一定的电流时,它就会发光。该光被光敏三极管接收,就使它的C、E两端导通;当发光二极管内没有电流流过时,就没有光照射到光敏三极管上,从而使三极管截止,C、E两端开路。用此方法就可以将逻辑值以光的有无方式从左端传到右端。
图8.17
光电隔离器件的电原理图
2.光电隔离输入/输出接口电路光电隔离器件只是用于实现电路之间在不共地的情况下进行电气连接的部件,因此它不能单独作为接口部件。光电隔离输入接口电路可利用三态门与光电隔离器件组合而成,型电路如图8.18(a)所示。三态门对外设信息的输入时刻进行控制,光电隔离器件则完成弱电设备(如微机)与强电设备(大电流或高电压外设)的不共地连接。光电隔离输出接口电路可由锁存器与光电隔离器件组合而成,典型电路如图8.18(b)所示。锁存器在规定的时间为外设提供稳定的输出,而光电隔离器件完成微机与强电外设的不共地连接。
图8.18光电隔离输入、输出接口电路(a)输入接口;(b)输出接口
3.光电隔离接口应用举例继电器是工业控制系统中常用的设备,利用它可以实现电源的通/断、
阀门的开/关、
设备的启/停等控制。继电器内部由电磁铁、金属簧片与两个触点构成。在继电器不工作时,常开触点处于断开状态,常闭触点处于接通状态。当继电器工作时,电磁铁上的线圈被通以一定额度的电流,电磁铁具有了磁性,于是吸合金属簧片,使继电器内部的常开触点处于接通状态,常闭触点处于断开状态,实现继电器触点的一次状态转换。
光电隔离输入接口通常用于接收强电设备信息或强电设备动作的状态反馈。这种信息或反馈可能是电信号形式,也可能是机械触点的断开或闭合形式。这里我们假定状态反馈的是继电器常闭触点的断开或闭合,则光电隔离输入接口电路的具体实例如图8.19所示。当继电器的常闭触点闭合时,12V电源经限流电阻R3为发光二极管提供一个工作电流。为使该发光二极管正常发光,流过它的工作电流一般要求为10mA左右。发光二极管发出的光使光敏三极管导通,从而使光敏三极管的集电极c变成低电平,再经三态反相缓冲器74LS240,变成高电平送到CPU的数据总线上。三态缓冲器为光电隔离器件与CPU总线提供了一个数据缓冲。只有CPU的地址选通信号SL1加到该缓冲器的选通端时,光电隔离器件的状态才能加至数据总线并读到CPU内部。
光电隔离输出接口一般是CPU和大功率执行机构(如大功率继电器、电机等)之间的接口。控制信息通过它才能送到大功率的执行机构。CPU与继电器之间的接口如图8.19所示,它也是光电隔离输出接口的一个实例。图8.19中的输出控制用一块
8位锁存器进行缓冲,再经一块反相器与发光二极管的负端相接。该反相器可以用OC门,也可以用吸收电流较大的TTL门(如74LS240)。
图8.19光电隔离输入/输出接口电路实例
当继电器的工作电流不太大(小于50mA)时,光敏三极管的集电极可以串接一个继电器线包,以直接驱动继电器工作。当所接的继电器的工作电流较大时,需要加一级驱动放大电路(可以用一级前置继电器,也可以用一级晶体管放大电路)。与继电器线包并联的二极管起阻尼作用,在继电器断电时,它为在线圈中的工作电流提供一个低电阻通路,以防止光敏三极管被反向电压击穿。利用图8.19电路,可实现对加热器加电20min、断电10min的循环控制,并在继电器不能正常工作时给出异常指示(假定将FLG单元设置为AAH),同时停止对加热器的控制。控制程序如下(假定三态门的端口地址为1000H,锁存器的端口地址为1001H):
FLG DB?START:MOV DX,1001HMOVAL,01HOUT DX,AL;加热器通电CALL DLY10ms;DLY10ms为10ms延迟程序,等待吸合MOV DX,1000HIN AL,DXAND AL,80HJNZ ERRCALL DLY10min ;延时10minCALL DLY10minMOV DX,1001HMOV AL,00HOUT DX,AL ;加热器断电CALL DLY10msMOV DX,1000HIN AL,DXAND AL,80HJZ ERRCALL DLY10minJMP STARTERR: MOV FLG,0AAHNOPHLT
4.应注意的几个问题
(1)由于光电耦合器件在工作过程中需要进行电→光→电的两次物理量的转换,而这种转换是需要时间的,因此输入/输出速率有一定限制,一般在几十到几百千赫兹左右。
(2)当光电隔离器件的一端具有高电压时,为避免输入/输出之间被击穿,要选择有合适的绝缘电压的光电耦合器件。一般常见的电压为0.5~10kV。
(3)光电隔离器件的两边在电气上是不共地的。因此,在设计电路时应确保这一点,
特别是供电电源,两边都应是独立的,否则将功亏一篑。
(4)光电隔离输出接口通常用于对大功率执行机构的控制,这种控制要求非常可靠。为了使微机应用系统确知控制动作已经执行,一般在每一个控制动作执行后,应有一个相应的状态信息反馈给CPU。在编写程序时,应使控制动作和反馈检测互锁,即在一个控制动作未完成以前,下一个控制动作不应该执行。
(5)对光电隔离输入/输出接口电路中的电阻要进行适当的选择。R1、R2与R3为限流电阻,一般选择几百欧姆;R为保护电阻,一般选择十几欧姆到几千欧姆。
8.1.4A/D与D/A变换器接口
1.数字到模拟(D/A)变换器
1)D/A变换器的基本原理及技术指标典型的D/A变换器芯片通常由模拟开关、权电阻网络、缓冲电路等组成,其框图如图
8.20所示。
图8.20典型D/A变换器芯片的组成框图
数字量输入的每一位都对应一个模拟开关。当某位为1时,与其相对应的模拟开关接通,参考电压通过权电阻网络,在输出端产生与该位二进制数相对应的权值电压。当有多位为1时,其相应的各位权值电压经电阻网络求和输出,从而实现数模转换,即其中,Di=0或1(i=0,1,2,...,n-1)。
D/A变换器的主要技术指标有:分辨率、精度、变换时间和动态范围。
(1)分辨率。分辨率表示D/A变换器的一个LSB(最低有效位)输入使输出变化的程度,通常用D/A变换器输入的二进制位数来描述,如8位、10位、12位等。对于一个分辨率为n位的D/A变换器来说,当D/A变换器输入变化1LSB时,其输出将变化满刻度值的2-n。例如,当
10位D/A变换器的输出电压为0~+5V时,则其分辨率为4.88mV;
而当
12位D/A变换器的满刻度值仍为+5V时,则其分辨率为1.22mV。可见,位数愈高,分辨率愈好。
(2)精度。精度表示由于D/A变换器的引入,变换器的输出和输入之间产生的误差。
D/A变换器的误差主要由下面几部分组成:①非线性误差。在满刻度范围内,偏离理想的转换特性的最大值称为非线性误差。②温度系数误差。在使用温度范围内,温度每变化1℃,D/A内部各种参数(如增益、线性度、零漂等)的变化所引起的输出变化量称为温度系数误差。③
电源波动误差。由标准电源及D/A芯片的供电电源之间的波动在其输出端所产生的变化量称为电源波动误差。
误差的表示方法有两种:绝对误差和相对误差。绝对误差用D/A变换器的输出变化量来表示,如几分之几伏;也有用D/A变换器最低有效位LSB的几分之几来表示的,如(1/4)LSB。相对误差是将绝对误差除以满刻度的值并乘以100%。例如绝对误差为±0.05V,输出满刻度值为5V,则相对误差可表示为±1%。完整的D/A变换电路还应包括与D/A芯片输出相接的运算放大器,这些器件也会给D/A变换器带来误差。考虑到这些因素是相对独立的,因此D/A变换器的总精度可用均方误差来表示,可写为:
标准差为:
(8-1)(8-2)若某系统要求D/A变换电路的总误差必须小于
0.1%。已知某D/A芯片的最大非线性误差为
0.05%。那么根据式(8-1)可以确定,电源波动、温度漂移和运算放大器所引起的均方误差为:
又假设,后三者是相等的,则经计算可得:
由此误差分配,我们就可以选择合适的电源及运算放大器,使其满足D/A变换电路的精度要求。
当然,反过来也可以已知其他各种误差,再来推算D/A芯片的非线性误差,最后再根据此误差来选择合适的D/A芯片。需要特别指出的是,D/A芯片的分辨率会对系统误差产生影响,因为它确定了系统控制精度,即确定了控制电压的最小量化电平。这种影响是系统固有的。为了消除(近似消除)这种影响,一般在系统设计中应这样来选择D/A变换器的位数,即使其最低有效位1位的变化所引起的误差远远小于D/A芯片的总误差。如上例所述,系统要求D/A变换电路的误差小于0.1%,那么D/A芯片的位数应选择为12位,因为12位D/A的最低有效位(1位)的变化所引起的误差为0.02%(1/4096)。
(3)变换时间。当数字信号满刻度变化时,从数码输入到输出模拟电压达到其满刻度值±(1/2)LSB所需的时间称为变换时间。该时间限制了D/A变换器的速率,它表征了D/A变换器的最高转换频率。例如,后面要提到的DAC0832的变换时间为1μs,表明其最高变换频率为1MHz。各种D/A芯片都具备各自的变换时间。需要注意的是,因为D/A变换电路还包括输出电路中的运算放大器,所以D/A变换电路的变换时间应为D/A芯片的变换时间和运算放大器的建立时间之和。例如D/A芯片的变换时间为
1μs,运算放大器的频率响应为
1MHz(建立时间为
1μs),那么整个D/A变换电路的变换时间为2μs。如果系统要求的D/A变换时间是
1μs,则应重新选择速度更高的D/A芯片和运算放大器。
(4)动态范围。所谓动态范围,就是D/A变换电路的最大和最小的电压输出值范围。D/A变换电路后接的控制对象不同,其要求也有所不同。
D/A芯片的动态范围一般决定于参考电压UREF的高低,参考电压高,动态范围就大。参考电压的大小通常由D/A芯片手册给出。整个D/A变换电路的动态范围还和输出电路的运算放大器的级数及连接方法有关。有时,即使D/A芯片的动态范围较小,但只要适当地选择相应的运算放大器作输出电路,就可扩大变换电路的动态范围。
2)典型的D/A变换器芯片举例目前各国生产的D/A变换器的型号很多,如按数码位数分有8位、10位、12位等;
如按速度分又有低速、高速等。但是,无论是哪一种型号的芯片,它们的基本原理和功能是一致的,其芯片的引脚定义也是雷同的。一般都有数码输入端和模拟量的输出端。其中模拟量的输出端有单端输出和差动输出两种,有电流输出(最常见)与电压输出之分。D/A芯片所需参考电压UREF由芯片外电源提供。为了使D/A变换器能连续输出模拟信号,CPU送给D/A变换器的数码一定要进行锁存保持,然后再与D/A变换器相连接。有的D/A变换器芯片内部带有锁存器,那么此时D/A变换器可作为CPU的一个外围设备端口,挂在总线上。在需要进行D/A变换时,CPU通过片选信号和写控制信号将数据写至D/A变换器。
(1)引脚及其功能。D/A变换器DAC0832的引脚及内部结构分别如图8.21和8.22所示。
图8.21DAC0832的引脚
图8.22DAC0832的内部结构
(2)工作时序。D/A芯片DAC0832的工作时序如图8.23所示。从DAC0832芯片的内部结构图可以看出,D/A变换是分两个步骤进行的。首先,CPU将要变换的数据送到D0~D7端,使ILE=1,CS=0,WR1=0,这时数据可以锁存到DAC0832的输入寄存器中,但输出的模拟量并未改变。为了使输出的模拟量与输入的数据相对应,接着应使WR2、XFER同时有效。在这两个信号的作用下,输入寄存器中的数据才被锁存到变换寄存器中,再经过变换网络,使输出模拟量发生一次新的变化。
图8.23DAC0832的工作时序
(3)DAC0832的几种典型输出连接方式。D/A芯片将数字量转换为模拟量时有两种输出形式,即电流型与电压型。一般微机应用系统往往需要电压输出,当D/A变换器输出为电流时,就必须进行电流至电压的转换。
①
单极性输出电路。单极性输出电路如图8.24所示。D/A芯片输出的电流i经输出电路转换成单极性的电压输出。图8.24(a)为反相输出电路,其输出电压为:
UOUT=-iR(8-3)图8.24单极性输出电路(a)反相输出;(b)同相输出
图8.24(b)是同相输出电路,其输出电压为:
(8-4)②
双极性输出电路。在某些微机应用系统中,要求D/A的输出电压是双极性的,例如要求输出-5~+5V电压。在这种情况下,D/A的输出电路要作相应的变化。图8.25就是DAC0832双极性输出电路的实例。
图8.25双极性输出电路
如图8.25所示,D/A变换器的电流输出经运算放大器A1和A2的偏移和放大后,在运放A2的输出端可得到双极性-5~+5V的输出。图8.25中UREF为A2提供偏移电流,且UREF的极性选择应使偏移电流的方向与A1输出电流的方向相反。再选择R3=R4=2R2,以便使偏移电流恰好为A1输出电流的一半,从而使A2的输出特性在A1输出特性的基础上上移1/2的动态范围。由电路参数计算可得到最后的输出电压表达式为:
UOUT=-2U1-UREF
(8-5)设U1为0~-5V,则选取UREF为+5V。那么:
UOUT=(0~10V)-5V=-5~5V(8-6)
(4)DAC0832与8088微处理器的连接。DAC0832是一种8位的D/A芯片,片内有两个寄存器作为输入和输出之间的缓冲,这种芯片可以挂接到微机系统总线(如ISA)上。图8.26是0832与8位ISA总线连接的电路图。图8.26中的双极性输出端为UOUT。当D/A变换器输入端的数据在00H~FFH之间变化时,UOUT输出将在-5~+5V之间变化。如果想要单极性0~+5V输出,那么只要使UREF=-5V,然后直接从运算放大器A1的输出端输出即可。在图中的输出端UOUT接一个680~6800pF的电容是为了平滑D/A变换器的输出,同时也可以提高电路抗脉冲干扰的能力。
由于D/A芯片是挂接在微机系统总线上的,因此在编制D/A驱动程序时,只要把D/A芯片看成是一个输出端口就行了。向该端口送一个8位的数据,在D/A输出端就可以得到一个相应的输出电压。设D/A的端口地址为
278H,则用
8086汇编语言书写的、能产生锯齿波的程序如下:
;用D/A产生锯齿波的程序DAOUT:MOV DX,278H ;端口地址送MOV AL,00H ;准备起始输出数据LOOP:OUT DX,ALDEC ALJMP LOOP ;循环形成周期锯齿波
图8.26DAC0832与PC/XT总线的连接图
很显然,利用图8.26电路编写不同的驱动程序,可以产生各种各样的波形,例如方波、三角波、阶梯波、梯形波乃至正弦波等。在图8.26的基础上,请阅读下面的程序,判断UOUT的波形。
START:MOV DX,0278HNEXT1:INC ALOUT DX,ALCMP AL,0FFHJNE NEXT1NEXT2:DEC ALOUT DX,ALCMP AL,00HJNE NEXT2JMP NEXT1
2.模拟到数字(A/D)变换器
A/D变换器与D/A变换器一样,是微机应用系统的一种重要接口。数据采集器中就包含有这种接口。它可以把外界的模拟量,通过A/D变换器变成数字量,送给微机。
A/D变换器的种类很多,如计数式A/D变换器、双积分式A/D变换器、逐次反馈型A/D变换器等。考虑到精度及变换速度的折中,实际中常采用逐次反馈型A/D变换器。
1)A/D变换器的基本工作原理及结构
(1)A/D变换器的基本工作原理。逐次反馈型A/D变换器的基本工作原理及变换过程和用天平称某一物体重量的过程十分相似。例如,某一个12位的A/D变换器,其输入的模拟电压最大为5V。那么,该A/D变换器输出的对应值就为FFFH。其最低有效位
1位所代表的模拟电压值称为量化间隔Δ(或称当量)。Δ的定义为:
(8-7)在本例中,
(8-8)现在如果在A/D变换器的输入端加0~5V的任意一个模拟电压,其变换过程如下所述。首先输入电压减去二进制位最高位的权值电压(12位A/D的最高位为D11,最低位为D0,权值电压就是该位二进制位的权值乘以当量),如果够减,则该位就置“1”,然后用差值再与次高位的权值电压比较;如果不够减,则该位就置“0”,并再将原值与次高位进行比较。按此规律,一直比较到最低有效位为止。这样就可以得到变换后的二进制数码。
现设输入模拟电压为4.5V,其具体变换过程如下:
位序号比较表达式 二进制值D11 4.5V-2048×1.22mV=2V >0 1D10 2V-1024×1.22mV=0.75V >0 1D9 0.75V-512×1.22mV=0.125V >0 1D8 0.125V-256×1.22mV <0 0D7 0.125V-128×1.22mV <0 0D6 0.125V-64×1.22mV=0.046V >0 1D5 0.046V-32×1.22mV=0.0069V>0 1D4 0.0069V-16×1.22mV <0 0D3 0.0069V-8×1.22mV <0 0D2 0.0069V-4×1.22mV=0.0021V>0 1D1 0.0021V-2×1.22mV <0 0D0
0.0021V-1×1.22mV
>0 1
(2)A/D变换器的结构框图。一种逐次反馈型A/D变换器的结构框图如图8.27所示。从图中可以看到,它由5大部分组成:接口控制逻辑、逐次变换寄存器、D/A变换器、比较器及三态驱动器。在有的A/D变换器芯片中,还包含有参考电源等其他附属电路。上述电路的工作过程完全和前述一样。在启动脉冲控制下,接口控制逻辑在时钟脉冲的驱动下,首先使逐次变换寄存器的最高位置“1”,其输出经D/A变换器后形成权值电压,并在比较器中与输入电压相比较。当输入电压大于D/A变换器输出电压时,比较器输出就控制变换寄存器,使其最高位保持为“1”,接着使次高位置“1”;当输入电压小于D/A变换器的输出电压时,比较器输出便控制变换寄存器,使其最高位置“0”,并使次高位接着置“1”。这样逐位比较下去,直至最低位比较结束为止。变换结束后,在逐次变换寄存器中所存放的二进制数码就是与输入电压对应的变换后的二进制数据。
图8.27逐次反馈型A/D变换器的结构框图
2)A/D变换器的主要技术指标
(1)精度。A/D变换器的总精度由各种因素引起的误差所决定。这些误差有:①
量化误差。A/D变换器的量化误差决定于A/D变换器的转换特性。一般的A/D变换器的转换特性如图8.28所示。当模拟量的值在0~0.5V范围变化时,数字量输出为000B;当模拟量的值在0.5~1.5V范围变化时,数字量输出为
001B。这样,在给定数字量情况下,实际模拟量与理论模拟量之差最大为±0.5V。这种误差是由转换特性造成的,是一种原理性误差,也是无法消除的误差。该A/D转换特性表明,其量化间隔Δ为
1V。由此可以推出,量化误差用绝对误差可表示为:
用相对误差可表示为:
也有人用LSB/2来表示量化误差。
这样,一旦A/D变换器的位数确定以后,其量化误差也就随之确定了。
②
非线性误差。A/D变换器的非线性误差是指在整个变换量程范围内,数字量所对应的模拟输入信号的实际值与理论值之差的最大值。理论上图8.28的纵坐标与横坐标的关系应是一条直线;而对于实际的A/D变换器,两者的关系则可能是一种一定形状的曲线。所谓非线性误差,就是由于关系的非线性而偏离理想直线的最大值,常用LSB来表示。例如AD574的非线性误差为±1LSB。
图8.28A/D变换器的转换特性
③电源波动误差。由于A/D变换器中包含有运算放大器,有的还利用外接电源产生参考电压,因此,供电电源的变化就会直接影响A/D变换器的精度。A/D变换器对电源变化的灵敏度可用相对误差来表示,但在更多的情况下可用绝对误差(LSB)来表示。例如,手册中给出AD574的电源灵敏度为:+13.5V≤VCC≤+16.5V ±2LSB-16.5V≤VDD≤-13.5V ±LSB/2+4.5V≤VLOGIC≤+13.5V ±2LSB④温度漂移误差。温度漂移误差是由于温度变化而使A/D变换器发生的误差。⑤零点漂移误差。零点漂移误差是由于输入端零点漂移而引起的误差。⑥
参考电源误差。有的A/D变换器需使用者外接参考电源。由于参考电源在A/D变换器中相当于用天平称重时的砝码,因此它的误差将直接影响到A/D变换器的精度。通常选用参考电源时,要求其精度要比由量化误差引起的精度高一个数量级以上。
上述这些误差构成了A/D变换器的总误差。在计算A/D变换器总误差值时,应用各种误差的均方和的根来表示。例如,总误差可表示为:
(8-9)其中,ε1~ε5为各因素引起的误差,ε总为A/D变换器的总误差。
(2)变换时间(或变换速率)。完成一次A/D变换所需要的时间为变换时间。变换速率(频率)是变换时间的倒数。例如AD574KD的变换时间为35μs,其变换速率为28.57kHz。变换时间是A/D变换器的重要参数。目前,有变换时间为数百毫秒到1纳秒的各种A/D变换器可供我们选用。所选A/D变换器的最大变换时间应不大于采样频率的倒数,即采样周期。
(3)输入动态范围。一般A/D变换器的模拟电压输入范围大约为
0~5V或0~10V。在某些A/D变换器芯片中备有不同的模拟电压输入范围的引脚。例如AD574的10VIN引脚可输入0~10V电压,而20VIN引脚可输入0~20V电压。
3)A/D变换器芯片及应用在这里仅介绍两块典型的A/D变换器的应用。(1)12位A/D变换器芯片AD574。①
AD574的引脚及功能。AD574变换器的引脚如图8.29所示。
图8.29AD574的引脚图
各引脚的定义如下:
REFOUT:内部参考电源电压输出(+10V)。
REFIN:参考电压输入。
BIP:偏置电压输入。
10VIN:±5V输入或0~10V输入。
20VIN:±10V输入或0~20V输入。
DB0~DB11:高字节为DB8~DB11,低字节为DB0~DB7。
STS:“忙”信号输出,高电平有效。
12/8:变换输出字长选择端,输入为高电平时,变换字长输出为12位;输入为低电平时按8位输出。
CS:片选信号。
A0:字节地址控制输入,在启动A/D时(R/=0),用来控制转换长度。A0=0时转换长度为12位,A0=1时转换长度为8位。在变换数据输出时,在12/=0的情况下,A0=0,输出高8位数据DB4~DB11;A0=1时,输出低4位数据DB0~DB3。
R/C:数据读输出和转换控制输入。
CE:工作允许信号,高电平有效。+15V、-15V:+15V、-15V电源输入端。
AGND:模拟地。
DGND:数字地。
②AD574的工作时序。AD574的控制功能如表8.6所示。
表8.6AD574的控制功能
A/D变换器芯片内部集成有高精度参考电压形成电路,可满足12位A/D变换的要求。同时,其内部还集成有变换时钟电路,故无需外接时钟。这些都为使用者提供了很大的方便。
AD574的一次变换时间大约为15~35μs,该时间随型号的不同而有所区别,其变换过程的时序关系如图8.30所示。
图8.30AD574的工作时序
③AD574的应用。下面对以AD574芯片构成的A/D变换器电路实例进行说明。通过实例使读者能较清楚地了解设计A/D变换器电路的基本内容和方法。
a.AD574的模拟输入电路。●模拟输入电路的极性选择。由AD574引脚图可知,它有两个模拟电压输入引脚,即10VIN和20VIN,具有10V和20V的动态范围。这两个引脚的输入电压可以是单极性的也可以是双极性的,可通过改变输入电路的连接形式来进行选择,如图8.31所示。
●
输入路数的扩展。一般A/D芯片只有一个或两个模拟输入端。但是,实际的系统往往需要对多路模拟输入信号进行A/D变换。利用多块A/D芯片虽可解决这个问题,但从价格上讲是不可取的。为了充分发挥A/D芯片的作用,可以采用模拟开关来对输入路数进行扩展。
图8.31AD574的模拟电压输入(a)单极性输入;(b)双极性输入
模拟开关有多个模拟输入端和一个模拟输出端。在某一时刻究竟哪一个输入端和输出端相通取决于路地址输入端的输入状态。例如,H1508是一个8路的模拟开关,如图8.32所示。它有
8路模拟输入端IN0~IN7,1个模拟输出端OUT,3个路地址输入端A0~A2和一个选通端EN。当EN=1,A2A1A0=000B时,IN0输入端和OUT输出端接通。同理,当EN=1,A2A1A0=001B时,IN1与OUT接通。当EN=0时,OUT为高阻。这样,只要将输出端OUT和AD574的模拟输入端相连接,在变换前给H1508送一个EN有效和路地址信号,则可对相应路的模拟输入信号进行A/D变换,从而将1路模拟输入扩展为8路模拟输入。
如想扩展成64路,则在该H1508的各输入端IN0~IN7上再各接一块H1508,将每个输入端再扩展为8路就可以了。这样一来,9块H1508就可以将一路模拟输入扩展为64路模拟输入。请读者注意,这种扩展并不是可以无限延伸的。每个模拟开关在导通时都是有内阻的,串联级数多了,内阻相应就会增大,精度也就随之降低。一般的串联不要超过两级。
图8.328路模拟开关H1508引脚图
●采样保持电路。A/D变换器从变换开始到结束需要一段时间,这段时间的长短随各种变换器速度的不同而不同。在变换器工作期间一般要求输入电压保持不变,否则就会造成不必要的误差。为此,在A/D变换器输入端之前总要插入一个采样保持电路,如图8.33所示。在启动变换器时,对模拟输入电压进行采样,采样保持电路的输出就一直保持采样时的电压不变,从而为A/D变换器的输入端提供一个稳定的模拟输入电压。当然,采样保持电路的电压保持时间是有限的,但与变换时间相比,已是足够长了。显然,若在A/D变换时间内,模拟输入信号的变化对所要求的精度产生的影响可以忽略,则可以不用采样保持电路。
●
滤波电容的连接。为了平滑输入模拟电压和减小干扰,在A/D变换器的模拟输入端与地之间通常接有一个滤波电容。其电容值的大小应不至于对正常变化产生太大影响,即由模拟信号源内阻与该滤波电容所构成的时间常数的倒数,应大于模拟信号中有用分量的最高频率分量。例如,模拟信号的最高频率分量为2kHz,那么该时常数应选择为:
图8.33采样保持电路的连接
另外,滤波电容的连接点也应该仔细选择,否则会造成很大的人为误差。一般应接在模拟信号输入的最外端。例如,在图8.32中,我们可以将滤波电容接在H1508的OUT端,也可以接在H1508的IN0~IN7各输入端。前者只要接1个,后者却要接8个。
到底哪一种接法好?在前一种情况下,假设IN0输入电压为5V,IN1的输入电压为0V,
当对IN0路的输入进行A/D变换时,接于OUT端的滤波电容被充电至5V。当IN0路变换结束,紧接着对IN1路进行变换时,由于滤波电容上已充有5V电压,要放电到
0V电压需要一定的时间,因此很可能在没有放电到0V时A/D变换器已经启动,从而对IN1路的输入变换精度带来不利的影响。如果滤波电容按第二种情况连接,就不会产生这种不利的影响。
b.AD574与CPU的连接。
AD574是12位A/D变换器,它可以和16位CPU相连接,也可以和8位的CPU相连接。只要适当地改变AD574某些控制引脚的接法就可以实现上述要求。
AD574可以通过简单的三态门、锁存器接口与微机的系统总线相连接,也可以通过可编程接口(如8255)与系统总线相连接。由表8.6可见,AD574可以工作在8位,也可以工作在12位。下面就以8255为接口芯片,将工作于12位下的AD574接到8位ISA系统总线上,其连接如图8.34所示。
图8.34中,简化的连接可使CE和12/8恒为高电平,而使CS和A0接地。此时只用R/来启动,查询STS状态可判断变换是否完成。对应图8.34的采集变换程序如下:
;对8255初始化,此段程序放在应用程序开始的位置上INTI55:MOV DX,0063HMOV AL,10011010BOUT DX,AL ;控制字写入8255的CRMOV AL,00000001BOUT DX,AL ;位控方式,使PC0=1;以下是对输入信号进行一次变换的程序ACQUQ:MOV DX,0062H MOV AL,00HOUT DX,ALMOV AL,01HOUT DX,AL ;由PC0输出负R/脉冲启动变换NOPNOPWAITS:IN AL,DX ;取STS状态AND AL,80H ;判断变换结束否?JNZ WAITS ;未结束等待MOV DX,0060HIN AL,DX ;读A口,取得A/D变换低8位MOV BL,ALMOV DX,0061HIN AL,DXAND AL,0FH ;读B口,取得高4位MOV BH,ALRET图8.34AD574经8255与8位ISA系统总线相连接
(2)8位A/D变换器芯片ADC0809。ADC0809的引脚定义如图8.35所示。它共有28个引脚。D0~D7:输出数据线。IN0~IN7:8路模拟电压输入端。ADDA、ADDB、ADDC:路地址输入,ADDA是最低位,ADDC是最高位。START:启动信号输入端,下降沿有效。ALE:路地址锁存信号,用来锁存ADDA、ADDB、ADDC的地址输入,上升沿有效。EOC:变换结束状态信号,高电平表示一次变换已结束。OE:读允许信号,高电平有效。CLK:时钟输入端。UREF(+)、UREF(-):参考电压输入端。VCC:5V电源输入。GND:地。
图8.35ADC0809的引脚图
ADC0809需要外接参考电源和外接时钟。外接时钟频率为10kHz~1.2MHz。在时钟为640kHz时,一次变换时间为100μs,且随时钟的降低而增加。ADC0809的时序关系如图
8.36所示。从该图可以看到,在进行A/D变换时,路地址应先送到ADDA~ADDC输入端,然后在ALE输入端加一个正跳变脉冲,将路地址锁存到ADC0809内部的路地址寄存器中。这样对应路的模拟电压输入就和内部变换电路接通。为了启动A/D变换,必须在START端加一个负跳变信号,此后变换工作就开始进行。标志ADC0809正在工作的状态信号是EOC,它由高电平(闲状态)变成低电平(工作状态)。一旦变换结束,EOC信号就又由低电平变成高电平。此时只要在OE端加一个高电平,即可打开数据线的三态缓冲器而从D0~D7数据线读得一次变换后的数据。
图
8.36ADC0809工作时序图
由上述过程可以看到,ADC0809的一个显著特点是,其芯片内部集成了一个8选1的模拟门,且利用ADDA~ADDC三个信号的编码来选择相应的模拟输入。将ADC0809连接到系统总线上有多种方法。由于ADC0809输出数字信号的过程是经由OE控制的三态门完成的,故ADC0809可以直接与系统总线相连接,占用
8个接口地址。它也可以像前面AD574那样经可编程并行接口8255与总线相连接。这些方法我们不再说明,留给读者思考。若以三态门、锁存器为接口,将ADC0809接到系统总线上,其连接电路如图8.37所示。
图8.37ADC0809的一种接口电路
在图8.37中,我们未画出ADC0809参考电压的形成电路和时钟形成电路。前者可买现成的芯片来产生,而后者常从系统总线上取时钟信号经分频来产生。结合图8.37,并假定系统初始化时已将
74LS273的Q7初始化为
0,则采集程序如下:
ACQ09:MOV AX,SEGDATAMOV DS,AXMOV SI,OFFSETDATAMOV BL,0MOV CL,8GOON:MOV AL,BL
MOV DX,007AHOUT DX,AL ;送出路地址OR AL,80HOUT DX,AL ;送ALE上升沿AND AL,7FHOUT DX,AL ;输出STARTNOPMOV DX,0079HPWAT:IN AL,DX ;读EOC状态AND AL,01HJZ PWATMOV DX,007AHMOV AL,BLOR AL,40HOUT DX,AL ;使OE=1MOV DX,0078HIN AL,DX ;读A/D变换器数据MOV
SI],AL ;存入内存INC SIINC BLDEC CLJNZ GOONMOV DX,007AHMOV AL,0OUT DX,ALRET
3.数据监测与控制系统
A/D与D/A变换器是构成数据监测与控制系统的核心部件。数据监测可利用数据采集系统实现,它主要完成对模拟或数字信号的获取。目前数据采集系统均是利用微机应用系统实现的。采集到的数据最终将以数字形式存储于计算机中或在计算机中加以处理。但由于模拟信号与计算机可接收的数字信号形式不符,因而需用A/D变换器完成模/数转换工作。
计算机强大
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旋转开合桌子课程设计
- 如何保护商业设备免受损坏和窃取
- 工业工程课程设计论文
- 生成式人工智能与知识生产方式的革命
- 智能轮椅课程设计背景
- 电气安装技术手册
- 有线通信电子课程设计
- 区域性养老服务中心项目建设方案
- UG NX12.0机电产品三维数字化设计实例教程 课件 草图设计
- 智能消防栓课程设计
- 人民代表大会第次会议代表议案专用表
- 统编版语文三年级上册第六单元训练卷含答案
- Web程序设计(第4版)-第5章
- 微习惯:自我管理法则
- 《中国“居里夫人”》
- 互联网+政务服务PPT
- 重庆市渝中区重点中学2022-2023学年九年级上学期期末数学试卷(含答案)
- 公路水运工程施工安全标准化指南 pdf
- 房颤患者的护理
- 2023学年度四川省南充市九年级(上)期末化学试卷
- 2023安全生产责任制考核制度附考核表
评论
0/150
提交评论