您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 实验七--DA与AD转换
实验七D/A与A/D转换专业:微电子学姓名:【实验目的】1.学习D/A转换的基本原理和D/A转换芯片DAC0832的性能及编程方法。2.了解单片机系统中扩展D/A转换芯片的基本方法。3.学习A/D芯片ADC0809的转换性能及编程方法。4.了解A/D转换芯片与写单片机的接口方法。5.通过实验掌握单片机进行数据采集的方法。【实验原理】1.D/A转换是把数字量转换成模拟量的变换,从D/A输出的是模拟信号。实验程序一是通过在D/A的输入端送入有一定规律的数字量,在输出端产生锯齿波、三角波、正弦波的波形,通过示波器观察来直观地了解D/A的转换功能。产生锯齿波、三角波只需由A存放的数字量(送入D/A的输入寄存器)的增减来控制;要产生正弦波,较简单的方法是造一张正弦数字量的表,取值范围为一个周期,采样点愈多,精度愈高。如果电压幅值为M,D/A转换器的位数是N位,那么其精度计算公式为:M/(2N-1)。图6-1D/A转换逻辑例如,D/A转换器的位数是8位,电压幅值为5V,则转换精度为,5/(28-1)=0.0196(V)在EL-8051-III实验台上DAC0832与单片机的连接图6-1所示。由图可以看出,输入寄存器占偶地址端口(A0=0),DAC寄存器占较高的奇地址端口(A0=1)。两个寄存器均对数据独立进行锁存。要把一个数据通过0832输出,要经两次锁存。典型的程序如下:MOVDPTR,#PORTMOVA,#DATAMOVX@DPTR,AINCDPTRMOVX@DPTR,A其中,第二次写入是一个虚拟写的过程,其目的是产生一个/WR信号,启动D/A。2.A/D转换是把模拟量转变为数字量的变换。A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。本实验用的是ADC0809属逐次逼近法A/D转换器,是八位的A/D转换器。每采集一次需100us。实验电路如下图:图6-2A/D转换逻辑ADC0809的START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号。实验电路中将二者相连,以便同时锁存通道地址并开始A/D采样转换,故启动A/D转换只需两条指令:MOVDPTR,#PORTMOVX@DPTR,AA中是什么内容是不重要的,这是一次虚拟写,其目的是产生一个/WR信号。A/D转换期间EOC脚(A/D转换结束信号输出端口)为低电平,一旦转换结束时输出高电平。如果我们把EOC脚接至一个反相器的输入端,反相器的输出端就得到一个负跳变的触发信号,它正好可以用来作为8051的外中断源的边缘触发信号。在一个数据转换完毕后,我们向ENABLE脚送一个高电平,用以打开三态数据锁存器,就可以读出数据,因此可以使用如下指令读取A/D转换结果:MOVDPTR,#PORTMOVA,@DPTR【实验内容】1.利用DAC0832编程产生锯齿波、三角波、正弦波。三种波形轮流显示。连线方法:0832的CS0832接CS0。输出DAOUT接示波器探头,示波器探头地线接实验板地线。程序清单见D61.ASM。2.A/D转换实验:用中断方法来读取AN0的输入模拟电压,通过P1口输出到LED上显示。运行程序后,读出LED上显示的数据(灯亮表示1,化为十六进制数)。用万用表测量AN0的输入模拟电压,与读出的LED上显示的数据进行比较。连线方法:,1、0809的片选信号CS0809接CS0。2、电位器的输出信号AN0接ADC0809的ADIN0。3、EOC接CPU板的INT0。4、P1.0-P1.7连L1-L8。程序清单见D62.ASM。3.用查EOC电位法作上述测量,调节电位器的值进行连续不断地测量(数据不用存储),测量的数据在LED数码管上显示(两位16进制数)。编写程序上机运行。然后,修改程序用中断法再作测量,再运行程序。【实验程序与实验现象】程序一实验程序及注释:;D61.asmORG4000HLJMPMAINORG401BHLJMPDELAYPORTEQU0CFA0HORG4100HMAIN:MOVTMOD,#10H;定时器1工作在定时方式,方式1SETBEASETBET1MOVTL1,#0AFHMOVTH1,#3CH;置定时0.1S的初值SETBTR1DISP:MOVR1,#50HLCALLPRG1;调用产生锯齿波子程序MOVR1,#50HLCALLPRG2;调用产生三角波子程序MOVR1,#50HLCALLPRG3;调用产生正弦波子程序LJMPDISPDELAY:CLRTR1;中断服务程序MOVTL1,#0AFHMOVTH1,#3CHDECR1SETBTR1RETI;PRG1:MOVA,#00H;产生锯齿波子程序开始.LOOP:MOVDPTR,#PORT;输入寄存器端口地址#PORTMOVX@DPTR,A;送出数据INCDPTR;DAC寄存器端口地址#PORT+1MOVX@DPTR,A;启动转换INCA;数据加1CJNER1,#00H,LOOP;计数值减到00H了么?RET;没有则继续产生锯齿波.;PRG2:MOVA,#00H;产生三角波子程序LP1:MOVDPTR,#PORT;上升部分MOVX@DPTR,AINCDPTRMOVX@DPTR,AINCACJNEA,#0FFH,LP1MOVR2,ALP2:MOVDPTR,#PORT;下降部分MOVA,R2MOVX@DPTR,AINCDPTRMOVX@DPTR,ADJNZR2,LP2CJNER1,#00H,LP1RETPRG3:MOVR2,#02H;产生正弦波子程序MOVR4,#0FFH;一个正弦周期的数据个数SJMPSUBDATALP3:MOVDPTR,#PORTMOVX@DPTR,AINCDPTRMOVX@DPTR,AINCR2DJNZR4,SUBDATAMOVR4,#0FFHMOVR2,#02HCJNER1,#00H,SUBDATARETSUBDATA:MOVA,R2MOVCA,@A+PCSJMPLP3DATA0:;产生正弦波的数据(256个)DB80H,83H,86H,89H,8DH,90H,93H,96HDB99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEHDB0B1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5HDB0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H,0D8HDB0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9HDB0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5HDB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDHDB0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFHDB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDHDB0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6HDB0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAHDB0E9H,0E7H,0E5H,0E3H,0E1H,0DEH,0DDH,0DAHDB0D8H,0D6H,0D4H,0D1H,0CFH,0CCH,0CAH,0C7HDB0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1HDB0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99HDB96H,93H,90H,8DH,89H,86H,83H,80HDB80H,7CH,79H,76H,72H,6FH,6CH,69HDB66H,63H,60H,5DH,5AH,57H,55H,51HDB4EH,4CH,48H,45H,43H,40H,3DH,3AHDB38H,35H,33H,30H,2EH,2BH,29H,27HDB25H,22H,20H,1EH,1CH,1AH,18H,16HDB15H,13H,11H,10H,0EH,0DH,0BH,0AHDB09H,8H,7H,6H,5H,4H,3H,2HDB02H,1H,0H,0H,0H,0H,0H,0HDB00H,0H,0H,0H,0H,0H,1H,2HDB02H,3H,4H,5H,6H,7H,8H,9HDB0AH,0BH,0DH,0EH,10H,11H,13H,15HDB16H,18H,1AH,1CH,1EH,20H,22H,25HDB27H,29H,2BH,2EH,30H,33H,35H,38HDB3AH,3DH,40H,43H,45H,48H,4CH,4EHDB51H,51H,55H,57H,5AH,5DH,60H,63HDB69H,6CH,6FH,72H,76H,79H,7CH,80HEND实验结果记录:连接示波器后,在示波器上轮流显示锯齿波、三角波、正弦波三中波形。实验分析:实验结果与实验要求完全符合。实验达到预期效果,实验成功。程序二:实验程序与注释:;D62.ASMORG4000H;设置程序起始地址LJMPMAIN;跳转到MAINORG4003H;设置中断端口地址LJMPINTX0;跳转到中断程序INTX0PORTEQU0CFA0H;将PORT等值为0CFA0HORG4050H;设置主程序起始地址MAIN:MOVR0,#50H;将50H送到R0MOVP3,#0FFH;将FFH送P3SETBEA;将EA置一SETBEX0;将EX0置一SETBIT0;将IT0置一START:MOVDPTR,#PORT;将PORT值送DPTR单元MOVA,#0;将0送到累加器AMOVX@DPTR,A;将累加器A的值送DPTR指向的单元ACALLDEL;调用子程序DELSJMPSTART;跳转到STARTINTX0:CLREA;将EA单元清零MOVXA,@DPTR;将DPTR指向的单元的值送累加器A,取出转换的数据CPLA;将累加器A的值取反MOVP1,A;将累加器A的值送P1MOV@R0,A;将累加器A的值送R0寄存器指向的单元SETBEA;将EA单元置一EXIT:RETI;返回;DEL:MOVR7,#15;将十进制数15送R7,实现1.5秒延迟DEL1:MOVR6,#130;将十进制数130送R6DEL2:MOVR5,#200;将十进制数200送R5DEL3:DJNZR5,DEL3;令R5减一,若减一后不为零,跳转到DEL3DJNZR6,DEL2;令R6减一,若减一后不为零,跳转到DEL2DJNZR7,DEL1;令R7减一,若减一后不为零,跳转到DEL1RET;返回程序END;程序结束实验结果:旋转控制模拟电压大小的旋钮,8个LED灯的亮暗会变化,表示相应的模拟电压值。其中部分结果如下:序号12345LED显示0000000000111110010011101001110011011000相应电平/V01.2151.5283.0584.233万用表读数/v0.0051.2131.5363.0014.255实验偏差--0.18%0.46%1.88%0.52程序三:实验程序:ORG4000HLJMPMAINORG4003HLJMPINTX0ORG400BHLJMPT0INTORG4070HPORT1EQU0CFA0HPORT2EQU0CFA8HMAIN:ACALLSTART2MOV53H,#00HMOV54H,#00HMOV55H,#00HMOV56H,#00HMOV57H,#00HMOVTMOD,#01HMOVTH0,#0F6HMOVTL0,#3CHSETBEASETBEX0SETBET0SETBIT0SETBPX0SETBTR0START:MOVDPTR,#PORT1MOVX@DPTR,AACALLDELAYSJMPSTARTINTX0:PUSHACCPUSHDPHPUSHDPLMOVDPTR,#PORT1MOVXA,@DPTRACALLGET_CHARPOPDPLPOPDPHPOPACCRETIGET
本文标题:实验七--DA与AD转换
链接地址:https://www.777doc.com/doc-6069202 .html