1、微机原理与接口技术中国水利水电出版社主编主编 李云强李云强第10章 定时/计数计数 本章导读本章导读 定时与计数技术在计算机系统中具有极其重要的定时与计数技术在计算机系统中具有极其重要的作用。微机系统都要为作用。微机系统都要为CPU和外部设备提供定时控和外部设备提供定时控制或对外部事件进行计数。例如,分时系统的程序制或对外部事件进行计数。例如,分时系统的程序切换,向外部设备输出周期性定时控制信号,定时切换,向外部设备输出周期性定时控制信号,定时时间到发出中断申请,外部事件统计达到规定值发时间到发出中断申请,外部事件统计达到规定值发出控制信号或提出中断请求等。因此,微机系统必出控制信号或提出中断
2、请求等。因此,微机系统必须有定时技术。本章须有定时技术。本章以以8253为例介绍它的基本工作为例介绍它的基本工作原理,以及跟它有关的一些应用。原理,以及跟它有关的一些应用。第10章 定时/计数计数 10.1 基本概念 10.2 定时/计数器芯片Intel 8253 10.3 8253的初始化变成 10.4 8253的应用10.1 基本概念10.1.1 定时定时/计数计数1定时 定时和计时是最常见和最普遍的问题,一天24小时的计时,称为日时钟。长时间的计时(日、月、年直至世纪的计时)称为实时钟。2计数 计数使用得更多,在生产线上对零件和产品的计数;对大桥和高速公路上车流量的统计,等等。定时/计数
3、器8253内部最基本的单元也是减1计数器。3定时与计数的关系 计时的本质就是计数,只不过这里的“数”的单位是时间单位。如果把一小片一小片计时单位累加起来,就可获得一段时间。计时的本质就是计数,把计数作为定时的基础来讨论。10.1.2 频率一声音一音乐 从定时、计数问题还可以引出或派生出一些其他的概念和术语。例如,频率频率的概念。由频率可以引出声音,频率高,声音的音调高;频率低,声音的音调低。微机系统中的定时,可分为内部定时和外部定时微机系统中的定时,可分为内部定时和外部定时两类两类。内部定时内部定时是计算机本身运行的时间基准或时序关系,计算机每个操作都是按照严格的时间节拍执行的;外部定时外部定
4、时是外部设备实现某种功能时,本身所需要的一种时序关系,如打印机接口标准Centronics就规定了打印机与CPU之间传送信息应遵守的工作时序。10.1.3 微机系统中的定时10.1.4 定时方法1软件定时 它是利用CPU内部定时机构,运用软件编程,循环执行一段程序而产生的等待延时。这是常用的一种定时方法,主要用于短时延时。这种方法的优点是不需增加硬设备,只需编制相应的延时程序以备调用。缺点是CPU执行延时等待时间增加了CPU的时间开销,延时时间越长,这种等待开销越大,降低了CPU的效率,浪费CPU的资源。并且,软件延时的时间随主机频率不同而发生变化,即定时程序的通用性差。2硬件定时硬件定时 它
5、是采用可编程通用的定时/计数器或单稳延时电路产生定时或延时。这种方法不占用CPU的时间,定时时间长,使用灵活。尤其是定时准确,定时时间不受主机频率影响,定时程序具有通用性,故得到广泛应用。目前,在微机系统中都采用通用可编程的定时器/计数器芯片。使用灵活、定时时间长,通过编程即可改变定时时间或工作方式。初始化编程后,就按设定的方式工作,不占用CPU的时间。通用的定时器/计数器蕊片种类很多,如MC6840-PTM、Intel 8253/8254等。IBM-PC/XT内定时/计数系统的核心元件就采用8253。而PC/AT使用 8254。8253和8254的引脚及操作方式完全相同,但8254的计数频率
6、比8253高,8253可以达到5MHz,而8254-2可10MHz。另外,8254将8253控制字的最高两位D7D6=11的不用状态,设置成一种有效控制字。Intel 8253是8086微机系统常用的定时/计数器芯片,它具有定时与计数两大功能。10.2 定时/计数器芯片Intel 825310.2.1 8253的芯片功能的芯片功能其主要功能特性有:采用NMOS工艺,用单一的+5V电源供电。片内有3个独立的16位减法计数器(或计数通道),每个计数器又可分为2个8位的计数器。计数频率为05MHz。两种计数方式,即2进制或BCD方式计数。6种工作方式,既可对系统时钟脉冲计数实现定时,又可对外部事件进
7、行计数。可由软件或硬件控制开始计数或停止计数。10.2.2 8253的内部结构 8253的内部结构如右图所示。由计数器、控制寄存器、读/写控制逻辑和数据总线缓冲器4部分和内部数据总线构成。(1)数据总线缓冲器。数据总线缓冲器。8位双向三态的缓冲器,可直接挂在数据总线上,CPU通过它,一方面可以向控制寄存器写入控制字,向计数器写入计数初值;另一方面CPU也可通过该缓冲器读出计数器的当前计数值。A1A0操作功能操作功能PC/XT计算机端口计算机端口00010写计数初值到T0计数器40H00110写计数初值到T1计数器41H01010写计数初值到T2计数器42H01110写控制器字到控制寄存器43H
8、00001读T0计数器计数值40H00101读T1计数器计数值41H01001读T2计数器计数值42H(2)读读/写控制逻辑。写控制逻辑。读/写逻辑的功能是接收来自CPU的控制信号,包括读信号RD#、写信号WR#、片选信号CS#和芯片内部寄存器寻址信号A0Al,完成对8253各计数器的读/写操作。片选信号接I/O端口译码电路,A0、A1接CPU地址总线低2位进行片内3个计数通道和控制寄存器的端口的选择,读/写信号(RD#/WR#)接CPU的IOR#/IOW#。8253的读/写操作与基地址如表10-1所示。(3)控制寄存器。控制寄存器。接收从CPU来的控制字,并由控制字的D7、D6位的编码决定控
9、制字写入哪个计数器的控制寄存器。此寄存器只能写入,不能读出。(4)计数器计数器。8253有3个计数器通道:计数器0、计数器1和计数器2。每个计数器有3根信号线;即2根输入信号,时钟信号CLK和门控GATE信号;1根输出信号OUT。3个计数器其内部操作完全相同,区别仅在于计数器是由计数脉冲(间隔不一定相同)进行减1计数,而定时器是由周期一定的时钟脉冲作减1计数。作计数器用时,要求计数的次数可直接作为计数初值预置到减1计数器中。计数初值NC的计算公式:NC=fCLK/fOUT,其中fCLK是输入时钟脉冲的频率;fOUT是输出波形的频率。作定时器用时,计数初Nt值即定时系数定时系数应根据要求定时的时
10、间t和时钟脉冲周期TCLK进行如下换算得出:Nt=要求定时的时间/时钟脉冲周期=t/TCLK=t*fCLK。其中,t为要求定时的时间,fCLK为时钟脉冲频率。除此以外,各计数器还可用来产生各种脉冲序列,如方波发生器和复杂波形发生器等。10.2.3 8253的外部引脚 1.8253与与CPU的接口引脚的接口引脚(如图如图10-3)D0D7:三态双向数据线,和CPU数据总线相连,用于传递CPU与8253之间的数据信息、控制信息和状态信息。CS#:片选信号,输入,低电平有效,表示8253被选中,允许CPU对其进行读,写操作。此脚连接译码电路输出端。WR#:写信号,输入,低电平有效。用于控制CPU对8
11、253的写操作,可和A1、A0信号配合以决定是写入控制字还是计数初值。RD#:读信号,输入,低电平有效。用于控制CPU对8253的读操作,可和Al、A0信号配合读确定的计数器。A0,A1:地址输入线,用来寻址8253内部的4个端口,即3个计数器和1个控制字寄存器。与CPU系统地址线相连。2.8253与外设的接口引脚与外设的接口引脚CLK0.1.2:时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。CLK可以是系统时钟脉冲,也可以由系统时钟分频或者其他脉冲源提供。当用于定时时,这个脉冲必须是均匀的、连续的、周期精确的,而用于计数时,这个脉冲可以是不均匀的、断续的、周期不定的。GATE0.1.2:门
12、控输入端,用于外部控制计数器的启动计数和停止计数的操作。两个或两个以上计数器连用时,可用此信号来同步,也可用于与外部某信号的同步。OUT0.1.2:计数输出端,当计数器从初值开始完成计数操作时,OUT引脚上输出相应的信号(详见8253工作方式)。8253共有6种工作方式(方式0方式5),产生6种波形发生器。各方式下的工作状态是不同的,输出的波形也不同。总规律是:先写控制字,再写计数初值,输出先复位,减1到0再翻转。门控信号有讲究,触发方式各不同:方式0、4为电平触发;方式1、5为正沿触发;方式2、3为电平、正沿触发均可用。每个通道均可以通过编程选择6种工作方式之一,下面分别予以介绍。10.2.
13、4 8253的工作方式方式0(计数结束中断(Out Signal on End of Count)计数结束输出低到高翻转)方式1可重触发的单稳态触发器(Hardware Retriggrerable one-shot)方式2速率发声器(Rate Generator)方式3方波发生器(Square Ware Output)方式4软件触发选通(Soft Triggered Strobe)方式5硬件触发选通(Hardware Triggered Strobe)8253的6种工作方式比较如表10-2所示。表10-2 8253的6种工作方式的比较方式方式0方式方式1方式方式2方式方式3方式方式4方式方式
14、5OUT输出状态写入控制后变0,计数结束变1,并维持至重写控制字或计数初值写入控制后变1,GATE上升沿触发变0,开始计数,计数结束变1写入控制字后变1,计数到1变0,维持一个Tclk变1 写入控制字后变0,装入计数初值且GATE=1则OUT变1,计数到时变0,重装计数初值维持计数,技术到时则反向写入控制字后变1,计数结束变0,维持一个写入控制字后变1写入控制字后变1,GATE上升沿触发开始计数,计数结束输出一个宽度为Tclk的负脉冲(单次)初值自动重装无无计数到0重装根据计数初值的奇偶分别重装无无计数过程中改变计数初值立即有效GATE触发后有效计数到1或 GATE触发后有效计数结束或 GAT
15、E触发后有效立即有效GATE触发后有效GATE信号的作用0禁止计数无影响禁止计数禁止计数禁止计数无影响下降暂停计数无影响停止计数停止计数停止计数无影响上升继续计数从初值开始重新计数从初值开始重新计数从初值开始重新计数从初值开始重新计数从初值开始重新计数1允许计数无影响允许计数允许计数允许计数无影响10.3 8253的初始化编程 对于每个计数通道进行初始化时,必须先写控制字,然后写入计数初值。这是因为计数初值的写入格式是由控制字的D5、D4两位编码决定的。写入计数初值时,必须按控制字的D5、D4两位编码规定的格式进行写入。例如,若控制字D5、D4两位编码规定的计数初值写人格式只写低8位,就只能给
16、所选通道写入低8位计数值;若控制字D5、D4两位编码规定的写入格为16位,就必须写入16位的计数值,且先写低8位,再写高8位。10.3.2 8253的控制字1、写入方式控制字 图9-15 通信线状态寄存器10.3.3 初始化编程例子【例10-1】设8253的端口地址为:04H0AH,要使计数器1工作在方式0,仅用8位二进制计数,计数值为128,进行初始化编程。控制字为:01010000B=50H初始化程序:MOV AL,50HOUT 0AH,ALMOV AL,80HOUT 06H,AL 例例10-2 设8253的端口地址为F8HFEH,若用通道0工作在方式1,按二十进制计数,计数值为5080H
17、,进行初始化编程。控制字为:00110011B=33H初始化程序:MOV AL,33HOUT 0FEH,ALMOV AL,80HOUT 0F8H,ALMOV AL,50HOUT 0F8H,AL10.3.4 8253的读出操作 在8253的实际使用中,有时需要读出计数通道的当前计数值,以便进行实时显示、实时检测或对计数值进行处理等。由CPU访问每个通道的输出锁存器OL,即可实现读出每个通道计数值的操作。读出时使用的端口地址与写入计数初值时使用的端口地址是同一个。如果是8位计数,则只需读一次;如果是16位计数,则对同一端口地址要读两次,第一次读出的是计数值的低8位,第二次读出的是计数值的高8位。读
18、操作必须严格按控制字D5D4两位规定的格式进行。1读之前先暂停计数 这种方法是在读之前利用GATE信号使计数过程暂停,或由外部逻辑禁止所要读出计数l通道的CLK脉冲输入,然后再进行读出。这就要求软件和硬件的配合,即先使GATE信号为低电平或禁止CLK脉冲输入,使计数器暂停计数,然后再执行下面所给程序段,即可实现指定的读出操作。设8253的端口地址为48H4BH,要读出通道0的16位计数值。IN AL,48H ;读计数通道0的低8位 MOV BL,AL ;存于BL IN AL,48H ;读计数通道0的高8位 MOV BH,AL ;存于BH2读之前先送计数值锁存命令 8253的每个计数通道都有一个
19、16位的输出锁存器OL,用于锁存计数值的高8位和低8位。当没有接到锁存命令之前,在计数器的计数过程中,输出锁存器的值随计数执行部件CE计数值的变化而变化;当接到锁存命令后,OL中的计数值就被锁存住了,不再随CE计数值的变化而变化。OL中的数值一直保存到数据被读出或对该计数通道重新编程为止。当CPU读出OL中的数据或对该计数通道重新编程后,OL解除锁存,又开始跟随CE计数值变化。在锁存和读出计数值的过程中,计数执行部件仍在不停地作减1计数。这样,CPU就可以在任何时刻先送锁存命令再读计数值,而对计数器现行计数过程没有任何影响。计数值锁存命令是8253控制字的一种特殊形式,所以写入的端口地址应是控
20、制寄存器的端口地址,再由锁存命令本身的D7D6编码,决定锁存哪一个通道的计数值。而锁存命令的 D5D4必须为00,这是锁存命令的专门标识。锁存命令的低四位(D3D0)可设定为全0。这样3个计数通道的锁存命令分别为:计数通道000H,计数通道140H,计数通道280H。假设8253的端口地址为E8HEBH,现要读计数通道1的16位计数值,并假定在此之前已设置读/写格式为“先读/写低8位,再读/写高8位”,则只要执行下面的程序段,即可实现指定的读出操作。MOV AL,40H ;锁存目录为40HOUT 0EBH,AL ;写入通道1控制寄存器(控制寄存器的端口地址EBH)IN AL,0E9H;读低8位
21、(0E9H为通道1大口地址)MOV BL,AL ;存于BLIN AL,0E9H;读高8位MOV BH,AL;存于BH10.4 8253的应用10.4.1 8253进行脉冲计数编程【例10-3】实验电路如图10-11所示,要求利用8253实现对按键产生的脉冲计数,同时将计数的结果通过8255的C口送到8位发光二极管显示。另外还要将定时/计数通道的OUT0输出信号接另一发光二极管,以观察计数过程及结束后电平的变化。设8253端口地址为200H203H;8255的端口地址为208H20BH。这是8253采用通道0,工作于计数方式的应用。8253的0通道设为工作方式0,字读写方式,2进制计数。8255
22、的A口和B口工作于方式0,C口为输出。程序代码如下:code segmentassume cs:code mov dx,20bh;8255控制字 mov al,10000000b;8255的200H端口 out dx,al mov dx,203h;8253的控制端口 mov al,00010000b out dx,al mov dx,200h mov al,8 out dx,aI nopA0A1M/IOA9A2RDWRD7D0片选译码图10-11 8253脉冲计数实验电路图RDWRD7D0CSA0A1GATE0OUT0CLK08253CPU硬件核RDWRD7D0CSA0A1PC7PC08255
23、74LS2455V5V5V驱动电路display:mov dx,203h ;8253 mov al,00000000b out dx,al nop mov dx,200h ;8253 in al,dx mov bl,al mov al,8 sub a1,bf mov dx,20ah;8255 not al out dx,al jmp display code ends end 10.4.2 PC微机中8253的应用 8253的3个计数器在IBM PC/AT机中有专门的应用,其初始化由BIOS完成。上图是8253在PC系列微机中的应用硬件连接图。8253中3个计数器通道在该定时系统中的作用和有关
24、信号的定义如下表。表10-3 8253的3个计数器各自的作用和信号规定计数器0计数器l计数器2功能时钟信号发生器刷新清求发生器音频信号发生器工作方式方式3方式2方式3GATE+5V+5V程序控制CLK1.1931816MHz1.1931816MHz1.1931816MHzOUT8259A IRQ08237 DREQ0扬声器控制字36H54H0B6H计数初值0180533H端口地址40H41H42H 3个计数器的定时时钟输入CLK相同,都由PCKL二分频产生,其频率为1.1931816MHz。系统将040H042H的3个地址分别作为计数器0计数器2的地址。043H为控制寄存器端口地址。计数器0的
25、初始化设置程序如下:MOV AL,36H ;设置通道0为方式3;先写处置低字节再写高字节,2进制格式MOV DX,043HOUT DX,ALMOV AL,0;计数初值为0000,即为216MOV DX,040H OUT DX,AL ;向计数初值寄存器低字节写00HOUT DX,AL ;向计数初值寄存器高字节写00H计数器1的初始化设置程序如下:MOV AL,54H ;00110110二进制,设置通道1为方式2 ;只写初值低字节;2进制格式 MOV DX,043H OUT DX,ALMOV AL,18 ;计数初值为18DMOV DX,041H ;向l通道计数初值寄存器低字节写12H OUT DX
26、,AL 它将计数器2编程为方式3,作为方波发生器输出896Hz的方波,经滤波驱动后推动扬声器发声。其程序如下:BEEP PROC NEAR MOV AL,0B6H MOV DX,043H ;设置通道2为方式3;先写初值低字节再写高字节,2进制格式OUT DX,AL ;写入控制寄存器MOV AX,533H ;装入计数初值(分频系数)MOV DX,042H;向通道2计数初值寄存器低字节写入OUT DX,ALMOV AL,AH ;向遍道2计数初值寄存器高字节写入OUT DX,AL MOV DX,061H ;读入8255的B口原有内容IN AL,DXMOV AH,AL;将原输出值保留于AH中OR AL
27、,03H ;仅设置8255的B口PB1和PB0为1,保留其它位的原状态OUT DX,AL;打开GATE2门输出方波到扬声器MOV CX,900;CX循环计数序LP:LOOP LP;循环延时DEC BL;子程序入口条件JNZ LP ;BL的值为控制长短声,BL6(长),BL1(短)MOV AL,AH;恢复8255的B口原有内容并停止发声OUT DX,ALRET BEEP ENDP10.4.3 8253为A/D转换提供采样频率发生器 在A/D转换子系统中,利用8253的3个计数通道,不仅可设置采样频率,而且还能决定采样持续时间。设计数器0工作于方式2(分频器),计数器1工作于方式1(单稳),计数器
28、2工作于方式3(方波发生器)。L、M、N分别为计数器0、计数器1、计数器2的计数初值,F为时钟脉冲频率。由图10-13可见,由于将计数器2的输出OUT2作为计数器1的时钟脉冲输入,所以计数器1的时钟脉冲CLK1的频率为F/N;又由于计数器1工作于方式1(单稳),因此输出信号OUT1的负脉冲宽度(即单稳的输出宽度)为MN/F;而计数器0工作于方式2(分频器),它的输出信号OUT0的脉冲频率为F/L;另外,计数器0的门控输入CATE0又受到OUT1的控制。如右图所示,在A/D转换子系统中,利用8253的3个计数通道,不仅可设置采样频率,而且还能决定采样持续时间。设计数器0工作于方式2(分频器),计
29、数器1工作于方式1(单稳),计数器2工作于方式3(方波发生器)。L、M、N分别为计数器0、计数器1、计数器2的计数初值,F为时钟脉冲频率。由右图可见,由于将计数器2的输出OUT2作为计数器1的时钟脉冲输入,所以计数器1的时钟脉冲CLK1的频率为F/N;又由于计数器1工作于方式1(单稳),因此输出信号OUT1的负脉冲宽度(即单稳的输出宽度)为MN/F;而计数器0工作于方式2(分频器),它的输出信号OUT0的脉冲频率为F/L;另外,计数器0的门控输入CATE0又受到OUT1的控制。设8253的端口地址为80H 83H,并设L、N为8位二进制数,M为16位BCD数,则初始化程序段如下:MOV AL,
30、00010100B;将计数器0设置为方式2(分频器),二进制计数OUT 83H,AL ;控制字端口83HMOV AL,L ;设置计数器0的计数初值L(二进制)OUT 80H,AL ;计数通道0端口地址80HMOV AL,01110011lB ;将计数器1设置为方式1(单稳),BCD计数OUT 83H,AL;控制字端口83HMOV AX,M ;设置计数器1的计数初值为M(BCD数)OUT 81H,AL ;计数通道1端口地址81H,输出M低字节MOV AL,AH OUT 81H,AL ;输出M高字节MOV AL,10010110B ;将计数器2设置为方式3(方波),二进制计数OUT 83H,AL
31、MOV AL,N ;设置计数器2的计数初值N(二进制)OUT 82H,AL 10.4.4 Windows控制系统精确计时机制研究1.Windows系统常用计时方法和原理 在微机系统中,系统的时钟芯片每54.925毫秒(约每秒18.2次)会对CPU做一次中断请求,触发08H及01CH中断。在基于DOS系统的软件开发中,可以改写08H或01CH中断的中断处理程序(ISR,Interrupt service Routine)来达到在程序中计时或进行规律性操作的目的。2.Windows系统精确计时原理与实现 操作系统提供的定时器函数是基于8253定时器/计数器电路,可以直接对8253定时器/计数器电路
32、进行控制来达到计时/定时目的。在对8253定时/计数器电路进行编程时,计数器的控制字和计数器是通过不同的端口地址写入的。锁存器的数值也是通过端口地址进行读取的。因此只要有读写指定端口地址的函数就可以利用8253完成精确定时和计时的任务。Win95/98和window NT系统由于运行在保护模式下,系统不允许对端口进行直接读取。在C+Bullder发环境中可以应用嵌入汇编编写相应的读取/写入端口的函数。具体实现代码如下:Void outPortb(unsigned,short int Port,unsigned char value)asm mov dx,*(&Port):mov al,*(&v
33、alue);out dx,al;unsigned char inPortb(unsigned short int port)unsignedcharvalue;asmmove dx,*(&port):in ai,dx;mov*(&value),al:Return value;假设我们使用8253的计数器2,工作于方式2,按2进制计数,计数值为80H,8253端口地址为0407H。读写端口的函数为inportb(PortNum),outportb(portNum,Number)。以下代码可用于启动计数器,写入计数值。outportb(07h,B4h);/写入控制字以启动计数器.outportb(
34、06h,80h);/写入计数值outportb(07h,84h);/84H为计数器的锁存命令值Int vall=Inportb(06h);/读取当前计数值可以通过在满足条件时,再次调用:outPortb(07h,84h);int val2=inportb(06h);取得目前的计数值val2,(val2-val1+80h)mod 80h除以定时器工作频率就可以得到特定任务的耗费时间。定时器的触发时机可以视需要使用窗口消息、回调函数、布尔变量,甚至mutex或event核心对象。具体工程应用可以采用多线程技术实现计时跟图形界面操作分。3.工程应用实例 在汽车发动机综合性能检测软件开发过程中,检测发
35、动机的功率首先需要得到发动机的转速。发动机每转一圈产生固定个数的数字脉冲。将发动机转动过程中产生的数字脉冲信号输入某一端口,如300H,那么测量发动机转速的问题就可以转化为求脉冲信号的周期T的问题。1/nT即是发动机的转速,n为发动机每转一圈产生数字脉冲的固定个数。测转速的程序流程如下(以方式2启动计数定时器):whi1e(测试未结束)得到前一个上升沿的计数值Tl;得到后一个上升沿的计数值T2;T=(T2T1+计数值)mod计数值)/计数器频率;/计算脉冲信号的周期T根据T值计算转速值;显示转速;如果需要结束,则设置测试结束标志;读者可以根据此原理将其应用到对计时精度要求高的控制领域。再见!再
36、见!微机原理与接口技术中国水利水电出版社中国水利水电出版社主编主编 李云强李云强第11章 模拟接口技术本章导读本章导读 并行接口和串行接口都是数字接口,是计算机中普遍采用的计算机与外设连接的桥梁。数字接口处理的是数字量信息,然而在现实世界中有很多信息例如声音、电压、电流、流量、压力、温度、位移和速度等都是不数字量的,它们都是连续变化的物理量,所谓连续,一是从时间上来说,这些信息是随时间连续变化的;二是这些信息的数值也是连续变化的。将这些连续变化的物理量称为模拟量。计算机是处理数字量信息的设备,要处理模拟量信息就必须有一个模拟接口,通过这个模拟接口,将模拟量信息转换成数字量信息,以供计算机运算和
37、处理;然后,再把计算机处理过的数字量信息转换为模拟量信息,以实现对被控制量的控制。了解和掌握数字与模拟接口的相关概念及其设计方法具有十分重要的意义。本章主要讨论数/模、模/数转换的基本原理,模拟量的8位D/A转换器DAC0832与8位A/D转换器ADC0809的接口技术和性能参数,同时介绍各自与微机接口时应考虑的事项。第11章 模拟接口技术 11.1 概述 11.2 D/A(数/模)转换器 11.3 A/D(模/数)转换器11.1 概述 将数字量转换成相应模拟量的过程称为数字/模拟转换,简称数/模转换,或D/A转换(Digital to Analog Conversion),完成这种转换的装置
38、称为D/A转换器(Digital to Analog Converter,DAC);反之,将模拟量转换成相应数字量的过程称为模拟/数字转换,简称模/数转换,或A/D转换(Analog to Digital Conversion)。完成这种转换的装置称为A/D转换器(Analog to Digital Converter,ADC)。A/D转换和D/A转换在控制系统和测量系统中有非常广泛的用途,图11-1是一个计算机自动控制系统的方块图。在生产或实验的现场,有多种物理量,如温度、压力、流量等,它们先通过传感器转换成电信号(电流或电压信号),然后经过滤波放大后送到A/D转换器去,模拟量被转换成数字量
39、,再送给微型计算机。微型计算机对这些数字量进行处理加工后,再由D/A转换器转换成模拟信号,在对这些模拟信号进行一定的调理后,由执行部件产生相关的控制信号去控制生产过程或实验装置中的各种参数,这就形成了一个计算机闭环自动控制系统。图11-1 计算机自动控制系统11.2 D/A(数模)转换器11.2.1 D/A转换器的工作原理 D/A转换器一般由基准电基准电压源、电阻解码网络、运算放压源、电阻解码网络、运算放大器和数据缓冲寄存器大器和数据缓冲寄存器等部件组成。各种D/A转换器都可用图11-2所示的结构框图来概括,其中电阻解码网络电阻解码网络是其核心部件,是任何一种D/A转换器都必须具备的组成部分。
40、图11-2 D/A转换器结构框图 1.权电阻网络型权电阻网络型D/A转换器转换器(1)电路的构成及各部分的作用。权电阻D/A转换器的电路原理图如图11-3所示,它由双向电子开关、基准电压源、权电阻网络和运算放大器等部分组成。1)双向电子开关Sn-1,Sn-2,Sl S0。双向电子开关通常由场效应管构成,每位开关分别受对应的输入二进制数码bn-1,bn-2,bl b0的控制。每一位二进制数码bi(0或1)控制一个相应的开关Si(i=0,1,n-1)。当bi=1时,开关上合,对应的权电阻与基准电压源UR相接;当bi=0时,开关下合,对应的权电阻接“地”。也就是说,开关的状态由相应二进制数码来控制。
41、如4位二进制数码是1010,则开关S0接“地”,S1接基准电压源,S2接“地”,S3接基准电压源。数字bn-1,bn-2,bl b0来自一个数据缓冲寄存器。图11-3 权电阻网络D/A转换器电路原路图 2)基准电压源UR。UR是一个稳定性很高的恒压源。3)权电阻网络R,2R,22R,23R,。流过权电阻网络中每个电阻的电流与对应位的“权”成正比,这些分电流在权电阻网络的输出端处汇总加至运算放大器的反相端,总电流I与输人数字量成正比。对应的位越高,相应的电阻值越小(bn-1为最高位,电阻值20R最小)。由于电阻值和每一位的“权”相对应,所以称为权电阻网络。4)运算放大器。运算放大器和权电阻网络构
42、成反相加法运算电路。输出电压U0与I成正比,亦即与输入数字量成正比。运算放大器还能起缓冲作用,使U0输出端负载变化时不影响I。调节反馈电阻Rf的大小,可以很方便地调节转换系数,使U0的数值符合实际需要。例例11-1 设UR=10 V,试分别求出与二进制数码0001、0010、0100相对应的模拟输出量U0。解:根据式(11-3),可得:与000l相对应的模拟输出量U0=10(0/21+0/22+0/23+l/24)V=0.625 V;与0010相对应的模拟输出量U0=10(0/21+0/22+1/23+0/24)V=1.25 V;与0100相对应的模拟输出量U0=10(0/21+1/22+0/
43、23+0/24)V=2.5 V。可见,输出模拟量与输人数字量成正比。这种电路只用R和2R两种电阻来接成倒T型电阻网络。4位倒T型电阻网络D/A转换器如图11-4所示。该电路的特点如下。当输入数字量的任何一位为1时,对应的开关将2R电阻支路接到运算放大器的反相端;而当该位为0时,对应开关将2R电阻支路接地。因此,无论输入数字信号每一位是“1”还是“0”,2R电阻要么接地,要么虚地,其中流过的电流保持恒定,这就从根本上消除了在动态过程中产生尖峰脉冲的可能性。2.倒倒T型电阻网络型型电阻网络型D/A转换器转换器图11-4 倒T型电阻网络D/A转换器 1分辨率 分辨率是指D/A转换器的输出模拟量对输入
44、数字量的敏感程度。一般有两种表示法,一种是用输入二进制位数来表示,如分辨率为n位的D/A转换器就是输入的二进制代码为n位;另一种方法是以最低有效位(LSB)所对应的模拟电压值来表示。如果输入为n位,则最低有效位对应的模拟电压值是满量程电压的1/2n。11.2.2D/A转换器的主要技术指标2精度 精度(即误差)表明D/A转换的准确程度,它可分为绝对精度和相对精度。绝对精度是指输入给定数字量时,其理论输出模拟值与实际所测得输出模拟值之差。它是由D/A转换器的增益误差、零点误差、线性误差和噪声等综合因数引起的。相对精度是指满量程值VFS校准以后,任一数字输入的模拟量输出与它的理论值之差相对于满量程值
45、的百分数情况,有时也以最低有效位(LSB)的分数形式给出。例如:相对精度0.1指的是最大误差为VFS的0.1。如满量程值VFS为10 v时,则最大误差为K=10 mV。3建立时间 D/A转换器的建立时间是指从输入数字信号起到输出电压(或电流)达到稳定输出值所要的时间。当输出形式是电流时,这个时间很短;当输出形式是电压时,则建立时间取决于算放大器所需要的时间。建立时间一般为几十纳秒至几微秒。除以上几个主要技术指标外,还有温度系数、功率消耗、零点误差、标度误差等,使用时可查阅有关资料。11.2.3 DAC0832芯片 1.芯片简介 DAC0832芯片是具有两级输入数据寄存器的8位单片D/A转换器,
46、它能直接与微机相连接,采用二次缓冲方式,可以在输出的同时采集下一个数据,从而提高转换速度,能够在多个转换器同时工作时实现多通道D/A的同步转换输出。主要的特性参数如下:(1)8位分辨率。(2)电流稳定时间为1s。(3)功耗低,约为200mW。(4)逻辑输入电平与TTL兼容。(5)可双缓冲、单缓冲或直通数据输入。(6)单电源供电(+5V+15V)。2.引脚功能及逻辑结构DAC0832的引脚如图11-6(a),内部逻辑结构由8位锁存器、8位DAC 寄存器和8位D/A转换器构成,见图11-6(b)。DAC0832各引脚的功能如下:D0D7:8位数字输入,D0为最低位。ILE:数据锁存允许信号,高电平
47、有效。CS#:片选信号,它与ILE结合起来用于控制是否起作用。WR1#:写信号1,输入寄存器的“写”选通信号,低电平有效。WR2#:写信号2,DAC寄存器“写”选通信号,低电平有效。XFER#:传送控制信号,用于控制是否起作用。在控制多个DAC0832同时输出时特别有用。VREF:基准电压输入,可超出10V范围。RFB:反馈电阻,该电阻被制作在芯片内,用作运算放大器的反馈电阻。Iout1:DAC输出电流1,它是逻辑电平为1的各位输出电流之和。Iout2:DAC输出电流2,它是逻辑电平为0的各位输出电流之和。VCC:逻辑电源,5V5V,最佳用15V。DGND:数字地,芯片数字信号接地点。AGND
48、:模拟地,芯片模拟信号接地点。3.DAC0832的工作原理 图11-6中有两个独立的数据寄存器,即“8位输入寄存器”和“8位DAC寄存器”。8位输入寄存器直接与数据总线连接,当ILE、和有效时,8位输入寄存器的为高电平。此时该寄存器的输出状态随输入状态变化;当=0时,数据锁存在寄存器中,但此时还没有转换。当和有效时,8位DAC寄存器的为高电平,输入寄存器中的数据送到DAC寄存器并输出;当=0时,则将这个数据锁存在DAC寄存器中,并开始转换。4.DAC0832的工作方式 有3种工作方式,通过改变WR1#、WR2#、XFER#、CS#的接入方式,可以使DAC0832进入3种工作方式之一。(1)直通
49、方式。顾名思义,直通就是使DAC0832的两级锁存器一直处于直通状态,做到这一点很容易,只需将5个控制信号一直保持有效即可:ILE=1,WR1#=WR2#=XFER#=CS#=0。(2)单缓冲方式。将DAC0832的两级锁存器中的任一级一直处于直通状态,而另一级处于锁存器状态,就构成单缓冲方式。通常,将DAC0832的第二级锁存器,即DAC寄存器设置成直通状态,即ILE=1,WR2#=XFER=0。第一级输入锁存器的有效锁存脉冲由、CS#、WR1#同时有效决定,见图11-7。图11-7 DAC0832单缓冲接口电路图11-8 DAC0832的电压输出电路 (3)双缓冲方式。CPU分两次写指令对
50、DAC0832进行写操作,第一次写指令将数字量锁存到第一级输入锁存器,第二次写指令将第一级输入锁存器输出数字量锁存到DAC寄存器,只有将数字量锁存到DAC寄存器,才真正启动新一轮D/A转换模拟量输出。通常将CPU的写信号WR#与DAC0832的WR1#、WR2#相连,XFER#与CS#分别与地址译码 器的不同译码输出相连,ILE为高电平。当执行写第一级输入锁存器端口指令时,WR1#、CS#同时有效;当执行写第二级DAC寄存器端口指令时,WR2#、XFER#同时有效。5DAC0832的模拟输出 DAC0832的输出是电流型的,如果需要电压输出,只要使用运算放大器即可实现,如图11-8所示。其中V