项目7学习A/D接口和D/A接口任务1用DAC0832实现方波、三角波、锯齿波波形发生器任务2用ADC0809实现数字电压表任务1用DAC0832实现方波、三角波、锯齿波波形发生器任务分析任务实现相关知识任务分析图7.1信号发生器波形任务实现步骤1—认识转换元器件图7.2DAC0832芯片引脚图图7.3DAC0832芯片的内部结构图步骤2—硬件电路设计图7.4波形发生器电路图波形发生器电路元器件清单如表7.1所示。步骤3—准备元器件并制作电路板表7.1波形发生器电路元器件清单元器件名称参数数量元器件名称参数数量IC插座DIP401电阻10kW1单片机89C511电阻5.1kW1晶体振荡器12MHz1电解电容22µF2瓷片电容22pF2可变电阻10kW3集成运放LM3241IC插座DIP201数/模转换器DAC08321IC插座DIP141图7.5集成运放LM324芯片的引脚图图7.6波形发生器电路板硬件实物锯齿波编程思路:先输出二进制最小值00H,然后按+1规律递增,当输出数据达到最大值FFH时,再回到00H重复这一过程。源程序如下:步骤4—编写波形发生程序;************锯齿波程序*******************;程序名:锯齿波程序PM7_1_1.asm;程序功能:产生锯齿波信号输出ORG0000HAJMPSTARTSTART:MOVDPTR,#7FFFH;输入寄存器地址AA:MOVA,#00H;送转换初值BB:MOVX@DPTR,A;D/A转换NOP;延时NOPCJNEA,#0FFH,CC;判断最大值到否SJMPAACC:INCAAJMPBBEND正弦波编程思路:源程序如下:;**********正弦波程序***************;程序名:正弦波程序PM7_1_2.asm;程序功能:产生正弦波输出,周期约256ms,幅度约2.5VORG0000HLJMPMAINORG0100HMAIN:MOVSP,#6FHPUB0:MOVR4,#00HPUB1:MOVDPTR,#TAB;确定表首地址MOVA,R4MOVCA,@A+DPTR;查表取输出参数MOVDPTR,#7FFFHPUB2:MOVX@DPTR,ALCALLDELAY_1msINCR4CJNER4,#00H,PUB1;判断一个周期到否LJMPPUB0TAB:DB80H,83H,86H,89H,8DH,90H,93H,96H,99H,9CH,9FH,0A2H,0A5H,0A8H,0ABH,0AEHDB1H,0B4H,0B7H,0BAH,0BCH,0BFH,0C2H,0C5H,0C7H,0CAH,0CCH,0CFH,0D1H,0D4H,0D6H0D8HDB0DAH,0DDH,0DFH,0E1H,0E3H,0E5H,0E7H,0E9H,0EAH,0ECH,0EEH,0EFH,0F1H,0F2H,0F4H,0F5HDB0F6H,0F7H,0F8H,0F9H,0FAH,0FBH,0FCH,0FDH,0FDH,0FEH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFHDB0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FEH,0FDH,0FDH,0FCH,0FBH,0FAH,0F9H,0F8H,0F7H,0F6HDB0F5H,0F4H,0F2H,0F1H,0EFH,0EEH,0ECH,0EAH,0E9H,0E7H,0E5H,0E3H,0E1H,0DFH,0DDH,0DAHDB0D8H,0D6H,0D4H,0DlH,0CFH,0CCH,0CAH,0C7H,0C5H,0C2H,0BFH,0BCH,0BAH,0B7H,0B4H,0B1HDB0AEH,0ABH,0A8H,0A5H,0A2H,9FH,9CH,99H,96H,93H,90H,8DH,89H,86H,83H,80HDB80H,7CH,79H,76H,72H,6FH,6CH,69H,66H,63H,60H,5DH,5AH,57H,55H,51HDB4EH,4CH,48H,45H,43H,40H,3DH,3AH,38H,35H,33H,30H,2EH,2BH,29H,27HDB25H,22H,20H,1EH,1CH,1AH,18H,16H,15H,13H,11H,10H,0EH,0DH,0BH,0AHDB09H,08H,07H,06H,05H,04H,03H,02H,02H,01H,00H,00H,00H,00H,00H,00HDB00H,00H,00H,00H,00H,00H,01H,02H,02H,03H,04H,05H,06H,07H,08H,09HDB0AH,0BH,0DH,0EH,10H,11H,13H,15H,16H,18H,1AH,1CH,1EH,20H,22H,25HDB27H,29H,2BH,2EH,30H,33H,35H,38H,3AH,3DH,40H,43H,45H,48H,4CH,4EHDB51H,55H,57H,5AH,5DH,60H,63H,66H,69H,6CH,6FH,72H,76H,79H,7CH,80H;**************延时1ms子程序***************;程序名:DELAY_1ms;程序功能:延时1msDELAY_1ms:PUSHACC;249×4µs+4µs=1msNOPCLRAPD:NOPINCACJNEA,#0F9H,PD;#F9H=249DPOPACCRETEND方波编程思路:源程序如下:;************方波程序*********;程序名:方波程序PM7_1_3.asm;程序功能:产生方波信号输出ORG0000HAJMPSTARTSTART:MOVDPTR,#7FFFH;输入寄存器地址AA:MOVA,#00H;送转换最小值00HMOVX@DPTR,A;D/A转换LCALLDELAY_1ms;延时1msMOVA,#0FFH;送转换最大值FFHMOVX@DPTR,A;D/A转换LCALLDELAY_1ms;延时1msAJMPAAEND将硬件电路板和单片机开发系统连接好,进行以下操作。①输入源程序。②编译源程序。③将输出Vo与示波器连接。④运行程序,用示波器观察输出电压波形。步骤5—调试并运行程序①锯齿波、正弦波、方波程序的流程图如图7.7、图7.8、图7.9所示。步骤6—程序分析总结图7.7锯齿波程序的流程图图7.8正弦波程序的流程图图7.9方波程序的流程图相关知识1.D/A转换器的性能指标(1)分辨率(2)建立时间2.D/A转换器芯片DAC0832功能图7.10运算放大器接法3.接口方式与编程(1)直通方式图7.11直通方式接线的原理示意图【例7.1】DAC0832芯片直通方式下的信号发生器。用采用直通方式连接的DAC0832芯片产生一个周期为1kHz的方波信号。(1)题意分析在直通方式下,直接将要转换的二进制数输出即可获得相应的模拟电压。因此,先输出二进制最小值00H,延时0.5ms,再输出二进制最大值FFH,延时0.5ms,然后不断重复这一过程即可产生方波。(2)程序设计用汇编语言实现的程序如下:;***********直通方式下的方波信号发生器*************;程序名:DAC0832芯片直通方式的方波信号发生器EX7_1.asm;程序功能:1kHz的方波信号发生器ORG0000HAJMPSTARTSTART:MOVP1,#00H;送转换最小值00HLCALLDELAY1;延时0.5msMOVP1,#0FFH;送转换最大值FFHLCALLDELAY1;延时0.5msAJMPSTART;*************延时0.5ms子程序***************;程序名:DELAY1;程序功能:延时0.5msDELAY_1ms:PUSHACC;124×4µs+4µs=0.5msNOPCLRAPD:NOPINCACJNEA,#7BH,PD;#7BH=124DPOPACCRETEND(2)单缓冲方式图7.12DAC0832单缓冲方式接口1图7.13DAC0832单缓冲方式接口2(3)双缓冲方式图7.14DAC0832芯片双缓冲方式连接图【例7.2】DAC0832芯片双缓冲方式下的信号发生器。假定图7.14所示的电路中输入寄存器地址为FEH,DAC寄存器地址为FFH。请利用该电路设计一个任意周期的锯齿波发生器。(1)题意分析先输出二进制最小值00H,然后按+1规律递增,当输出数据达到最大值FFH时,再回到00H重复这一过程。由于输入寄存器地址为FEH,DAC寄存器地址为FFH,因此在程序中使用MOVX@R0,A和MOVX@R1,A两条传送指令,才能完成一个数字量的模拟转换。(2)程序设计源程序如下:;**************锯齿波程序**************;程序名:DAC0832芯片双缓冲方式的锯齿波程序EX7_2.asm;程序功能:产生锯齿波信号输出ORG0000HAJMPSTARTSTART:MOVR0,#0FEH;装入输入寄存器地址MOVR1,#0FFH;装入DAC寄存器地址AA:MOVA,#00H;送转换初值BB:MOVX@R0,A;转换数据送输入寄存器MOVX@R1,A;数据通过DAC寄存器CJNEA,#0FFH,CC;判断最大值到否SJMPAACC:INCAAJMPBBEND任务2用ADC0809实现数字电压表任务分析任务实现相关知识任务分析图7.15数字电压表电路框图任务实现步骤1—认识转换元器件图7.16ADC0809芯片的引脚图表7.2通道选择表ADDCADDBADDA选择的通道000001010011100101110111IN0IN1IN2IN3IN4IN5IN6IN7表7.3简易数字电压表元器件清单步骤2—硬件电路设计步骤3—准备元器件并制作电路板元器件名称参数数量元器件名称参数数量IC插座DIP401电阻10kW2IC插座DIP141电阻5kW(可调)1晶体振荡器12MHz1模数转换ADC08091瓷片电容22pF2双D触发器74LS741七段数码管2或非门74LS021单片机89C511图7.17简易数字电压表电路图图7.18数字电压表电路板硬件实物源程序如下:;************简易数字电压表程序************;程序名:简易数字电压表程序PM7_2.asm;程序功能:显示0.0~5.0V测量电压值,分辨率0.1VORG0000HAJMPMAINORG0030HMAIN:MOVSP,#60HLP:LCALLADCHN;调用取A/D转换电压数据子程序LCALLDATAPR;调用数据处理子程序LCALLDISP1;调用显示子程序AJMPLPEND步骤4—编写控制程序;*********A/D转换子程序ADCHN**********;子程序名:ADCHN;功能:读取A/D转换电压值;入口参数:无;出口参数:A,存放转换后8位数字量ADCON:SETBP0.2NOPNOPCLRP0.2;A/D转换器清0NOPNOPSETBP0.2;A/D转换启动JBP0.3,$;查询转换是否结束?CLRP0.2;允许读取转换结果NOPNOPMOVP1,#0FFHMOVA,P1;从P1端口读取转换数据RET(1)单片机与A/D转换器接口子程序ADCHN设计思路;********显示数据处理子程序DATAPR*************;子程序名:DATAPR;功能:将A中的数据转换成0.0~5.0之间的十进制数。;出口参数:显示数据存放在40H、41H单元中,40H单元存放整数,41H单元存放小数。(2)数据处理子程序设计思路HE:MOVR2,#00HMOVR3,AMOVR6,#00HMOVR7,#0AHLCALLMULDMOVR6,#00HMOVR7,#33H;把51送到R7LCALLDIVDMOVA,R3LCALLHBCDMOV41H,AANL41H,#0FH;把个位的数送到40H单元SWAPAANLA,#0FHMOV40H,A;把十位的数送到40H单元RET;*