单片机数模转换1

合集下载

单片机数模转换器DAC0832设计实验报告(附程序)

单片机数模转换器DAC0832设计实验报告(附程序)

实验名称:数模转换器DAC0832设计实验学生姓名:xx 学号:xx 班级:测控xx班时间:课程名称:微机机原理及应用教师:成绩:一、实验目的1)了解DAC0832芯片引脚、内部结构及工作原理;2)掌握应用单片机I/O端口控制DAC0832实现数模转换的方法;二、实验内容1. 通过单片机I/O端口控制DAC0832实现数模转换,控制方式采用单缓冲方式,通过按键TRI/SIN选择输出,分别产生锯齿波、方波、正弦波。

1)绘制DAC0832与单片机接口电路原理图;2)参考PPT课件内容,设计程序,实现信号选择输出功能;2. 扩展功能:增加按键,通过按键控制调节输出信号的频率变化。

接口电路图设计参考下图所示:三、设计参考:正弦信号数据表:uchar code sine_tab[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0 xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6, 0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4, 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5, 0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8, 0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xa e,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80, 0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x 51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29 ,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0 x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x0 6,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c, 0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x 43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6 f,0x72,0x76,0x79,0x7c,0x80};四.实验报告①实现调频功能的中断程序:void int0() interrupt 0//外部中断0,用以控制调节延时程序次数,达到调节频率的作用{counter++; //外部中断0触发一次,延时程序调用次数加1}②延时程序:void delay(){int i;for(i=0;i<10;i++){}} //延时子程序③锯齿波程序:#include<reg51.h>sbit MR=P2^7;void main (void){int num;int j;MR=0;while(1){for(num =0; num <=255; num++){ P1=num;for(j=0;j<counter;j++)delay(); //调用延时子程序}}}运行截图:调频前:调频后:④正弦波程序#include<reg51.h>sbit MR=P2^7;void main (void){unsigned char code sine_tab[256]= //正弦波字表{0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0 xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6, 0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4, 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5, 0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8, 0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xa e,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80, 0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x 51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29 ,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0 x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x 00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x0 6,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c, 0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x 43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80};int num;int j;MR=0;while(1){for(num =0; num <=255; num++){ P1=sine_tab[num];for(j=0;j<counter;j++)delay(); //调用延时子程序}}}运行截图:调频前:调频后:⑤方波程序:#include<reg51.h>sbit MR=P2^7;void main (void){ int num;int j;MR=0;while(1){int b;for(num=0;num<=255;b++){if(num<128){ P1=0x00;for(j=0;j<counter;j++)//当counter小于128时,P1输出0x00对应低电平delay();}else{P1=0xFF;//当num大于或等于128时,P1输出0xFF对应高电平for(j=0;j<counter;j++)delay();}}}调频前:调频后:主程序#include<reg51.h>sbit MR=P2^7;sbit P2_0=P2^0;sbit P2_1=P2^1;int counter=0;//设置延时程序次数变量counter,调节频率unsigned char code sine_tab[256]= //正弦波字表{0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0 xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6, 0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4, 0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5, 0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8, 0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xa e,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0 x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x5 1,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29, 0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,0x0d,0x 0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x0 0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06, 0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x 1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43 ,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0 x72,0x76,0x79,0x7c,0x80}; //正弦转换字符void delay(){int i;for(i=0;i<10;i++){}}//延时子程序void int0() interrupt 0//外部中断0,用以控制调节延时程序次数,达到调节频率的作用{counter++;//外部中断0触发一次,延时程序调用次数加1}void main(){int num;int j;EA=1;//中断总允许使能EX0=1;//外部中断0使能IT0=1;//外部中断0下降沿触发MR=0;//P2^7输出低电平,芯片正常工作while(1){if(P2_0==0&&P2_1==1) //P2_1为高电平,P2_0为低电平输出锯齿波{for(num=0;num<256;num++){P1=num; //P1直接输出numfor(j=0;j<counter;j++)delay(); //调用延时子程序}}if(P2_0==1&&P2_1==0)//P2_1为低电平,P2_0为高电平输出正弦波{P1=sine_tab[num];//P1端口输出正弦波字符数组for(j=0;j<counter;j++)delay(); //调用延时子程序}}if((P2_0==0&&P2_1==0)||(P2_0==1&&P2_1==1))//P2_1为低电平P2_0为低电平以及P2_1为高电平P2_0为高电平时输出矩形波for(num=0;num<256;num++){if(num<128)//当num小于128时,P1输出0x00对应低电平{P1=0x00;for(j=0;j<counter;j++)delay();}else{P1=0xFF;//当num大于或等于128时,P1输出0xFF对应低电平for(j=0;j<counter;j++)delay();}}}}五.总结在该实验的设计过程中,首先单独写出锯齿波、正弦波以及方波的程序,并写出延时程序以及外部中断0程序。

单片机c语言程序设计---DA转换实验报告

单片机c语言程序设计---DA转换实验报告

单片机c语言程序设计---D/A转换实验报告课程名称:单片机c语言设计实验类型:设计型实验实验项目名称: D/A转换实验一、实验目的和要求1.掌握数模转换的概念2.掌握D/A转换芯片DAC0832的功能及特点,掌握与单片机的接口3.掌握D/A转换芯片DAC0832的c语言编程实例二、实验内容和原理实验1.信号发生器功能:使用DAC0832用作信号发生器,编写产生锯齿波、三角波和方波的程序。

本次项目中,DAC0832采用单缓冲单极性的线选法接线方式,其选通地址为7FFFH。

(1)硬件设计使用P1口接3个独立的按键S01、S02、S03,当按下S01时输出锯齿波,按下S02时输出三角波,当按下S03时输出方波。

电路原理图如下仿真所需元器件(2)proteus仿真通过Keil编译后,利用protues软件进行仿真。

在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。

启动仿真,观察仿真结果。

三、实验要求:1.完成信号发生器实验。

具体包括绘制仿真电路图、编写c源程序、进行仿真并观察仿真结果,需要保存原理图截图,保存c源程序,总结观察的仿真结果。

完成思考题。

四、操作方法与实验步骤1.按照硬件设计在protues上按照所给硬件设计绘制电路图。

2.在keil上进行编译后生成“xxx.hex”文件。

3.编译好的“xxx.hex”文件加入AT89C51。

启动仿真,观察仿真结果。

五、实验结果与分析void main(){while(1){while( K01==0 ) //生成锯齿波{for(cDigital=0;cDigital<=250;cDigital++){TransformData(cDigital);//进行数模转换}}while( K02==0 ) //生成三角波{for(cDigital=0;cDigital<=250;cDigital++){TransformData(cDigital);//进行数模转换}for(cDigital=250;cDigital>=0;cDigital--){TransformData(cDigital);//进行数模转换}}while( K03==0 ) //生成方波{TransformData(0);//进行数模转换Delay(500);TransformData(250);//进行数模转换Delay(500);}}}六、讨论和心得。

串行模数数模转换实验报告

串行模数数模转换实验报告

串行模数/数模转换实验报告一.实验目的:1、掌握 TLC549同步串行接口的ADC模块的特性、编程原理,了解TLC5620的4种时序图以及产生波形幅度的计算方法。

2、能实现TLC549、TLC5620与MCS-51单片机的连接,分别进行数据采集和波形观测。

3、能采用Proteus ISIS软件进行串行模数转换的电路设计。

4、能运用MCS-51单片机汇编语言进行串行模数/数模转换实验的软件设计。

二.实验要求:1、将TLC549 与MCS-51单片机进行连接,利用汇编语言编写出数据采集程序,将转换的模拟电压以二进制的形式通过单片机的P0口输出显示。

1)将单片机的P0口与LED1~LED8连接起来,作为输出显示。

由于LED采用灌电流方式驱动,所以要将数据取反后再输出显示,以获得“正逻辑”效果2)利用P1口与TLC549的控制信号进行连接,TLC549的基准电压REF+端与基准电压+5V相连,将电位器的上端连接VCC、下端连接GND,抽头与TLC549的模拟输入ANIN连接。

在运行程序时,不断地调节电位器,使其抽头电压连续变化,通过LED1~LED8的状态观察ADC转换的结果。

3)运用Proteus ISIS软件完成串行模数转换实验的硬件电路设计。

4)实现KeilC与Proteus软件的联调。

2、设计软件程序,用单片机的I/O口控制TLC5620实现D/A转换,使其通道1产生一个三角波,而通道2产生一个和通道1周期、幅度均相同的方波。

1)短接B7区的电源供给跳线JP16,调节B7区的电位器W3,使其输出接线柱Verf的电压为2.6V。

2)将A2区P16、P17、T0、T1分别连接到B9区的CLK、DAT、LDAC、LOAD,将B7区Verf连接到B9区REF接线柱,短接B9区电源跳线JP13。

3)运行光盘中的相应程序,用双踪示波器的两个探头观察DACA、DACB输出的波形。

三.流水灯硬件电路图四.软件程序1. 串行模数实验程序流程图2.程序清单 1) 串行模数:SDO BIT P1.0 ;数据输出CS BIT P1.1 ;片选SCLK BIT P1.2 ;时钟ORG 8000HAJMP MAINORG 8100HMAIN: MOV SP,#60HLOOP: ACALL TLC549_ADCCPL A ;累加器A取反MOV P0,A ;数据给P0口ACALL DELAYSJMP MAINTLC549_ADC: PUSH 07HCLR A ;清零CLR SCLKMOV R6,#08H ;计数器赋初值CLR CS ;选中TLC549LOOP1:SETB SCLK ;SCLK置位,数据输出NOPNOPMOV C,SDORLC A ;累加器A循环左移CLR SCLK ;SDO=0,为读出下一位数据作准备 NOPDJNZ R6,LOOP1 ;R6-1→R6,判断R6=0SETB CS ;禁止TLC549,再次启动AD转换 SETB SCLKPOP 07HRETDELAY: PUSH 00HMOV R0,#00HDJNZ R0,$POP 00HRETEND2)串行数模:SCLA BIT P1.6SDAA BIT P1.7LOAD BIT P3.5LDAC BIT P3.4VOUTA DATA 30HVOUTB DATA 31HORG 8000HAJMP MAINORG 8100HMAIN:MOV SP,#60HNOPCLR SCLACLR SDAASETB LOADSETB LDACMOV R3,#0A2HMOV R4,#00HMOV VOUTA,#00HMOV R5,#0A2HMOV R6,#00HMOV VOUTB,#00HDACHANG:MOV R1,#01HMOV R2,VOUTALCALL DAC5620DJNZ R3,CONTINUEAMOV R3,#0A2HMOV A,R4CPL AMOV R4,ACONTINUEA:CJNE R4,#OFFH,CONTINUEB DEC R2SJMP CONTINUEC CONTINUEB:INC R2CONTINUEC:MOV VOUTA,R2MOV R1,#03HMOV R2,VOUTBLCALL DAC5620DJNC R5,CONTINUEDMOV R5,#042HMOV A,R6CPL AMOV R6,A CONTINUED:CJNE R6,#0FFH,CONTINUEE MOV R2,#OA2HSJMP CONTINUEF CONTINUEE:MOV R2,#00H CONTINUEF:MOV VOUTB,R2LJMP DACHANG DAC5620:MOV A,R1CLR SCLAMOV R7,#08HLCALL SENDBYTEMOV A,R2CLR SCLAMOV R7,#08HLCALL SENDBYTECLR LOADSETB LOADCLR LDACSETB LDACRETSENDBYTE:SETB SCLARLC AMOV SDAA,CCLR SCLADJNZ R7,SENDBYTE RETEND五.实验结果观察实验结果,可知道通过调节电位器,数字量在对应的发生改变。

基于单片机片内dac数模转换器的产生正弦波信号的应用编程

基于单片机片内dac数模转换器的产生正弦波信号的应用编程

基于单片机片内dac数模转换器的产生正弦波信号的应用编程在基于单片机的应用中,使用片内DAC(数模转换器)产生正弦波信号是一个常见的需求。

下面是一个基本的步骤和代码示例,展示了如何使用单片机和DAC来生成正弦波信号。

步骤概览1. 配置单片机:初始化单片机,配置DAC和其他必要的硬件。

2. 计算正弦波数据:根据所需的频率和幅度,计算正弦波的样本值。

3. 发送数据到DAC:将计算出的样本值发送到DAC以生成正弦波。

示例代码(伪代码)```cinclude <>include <>define SAMPLE_RATE 44100 // 采样率,可以根据需要调整define FREQUENCY 440 // 频率,单位Hzdefine PI // 圆周率define MAX_AMPLITUDE 1023 // DAC的最大幅度,根据DAC规格调整// 初始化DAC和其他硬件void init_hardware() {// ...}// 计算正弦波样本值int calculate_sine_wave(int sample_number) {double angle = 2 PI sample_number / SAMPLE_RATE;return (int)(MAX_AMPLITUDE sin(angle)); // 返回-MAX_AMPLITUDE 到 MAX_AMPLITUDE 的值}// 主函数int main() {init_hardware(); // 初始化硬件for (int sample_number = 0; sample_number < SAMPLE_RATE; sample_number++) {int sine_wave_sample = calculate_sine_wave(sample_number); // 计算正弦波样本值// 将sine_wave_sample发送到DAC以生成正弦波// ...}return 0;}```注意事项硬件配置:具体配置单片机和DAC的代码取决于你所使用的硬件平台和开发环境。

单片机vdda供电

单片机vdda供电

单片机VDDA供电单片机中,VDDA(Voltage at the Digital to Analog Converter)通常是模拟电压供电引脚,用于提供模拟电压给数字模拟转换器(DAC)或其他模拟电路。

单片机的VDDA供电是整个芯片正常工作的关键之一。

下面将详细讨论单片机VDDA供电的相关方面。

1.VDDA的基本概念1.1 数字和模拟电源单片机通常需要两种不同的电源:数字电源(VDD)和模拟电源(VDDA)。

VDD主要供给数字电路,而VDDA则主要用于模拟电路,如ADC(模数转换器)和DAC。

1.2 模拟电路的需求VDDA通常用于模拟部分的电源,以确保模拟电路的精确性和稳定性。

ADC和DAC是模拟电路的关键组成部分,它们需要稳定的模拟电源来实现精确的模数转换和数模转换。

2.VDDA供电的重要性2.1 精准模数转换ADC是单片机中的一个重要功能,用于将模拟信号转换为数字信号。

VDDA的稳定供电对于实现高精度和准确的模数转换至关重要。

2.2 数模转换DAC用于将数字信号转换为模拟信号。

VDDA的稳定性直接影响DAC的性能,尤其是输出的精确性和稳定性。

3.VDDA供电电路3.1 过滤和稳压VDDA通常需要通过过滤电路和稳压器来提供稳定的电源。

这有助于降低电源噪声,确保ADC和DAC在工作时获得稳定的模拟电源。

3.2 外部元件外部元件如电容器、电感等也可能用于帮助提供稳定的VDDA电源。

4.VDDA供电设计考虑因素4.1 电源噪声电源噪声可能对模拟电路产生不良影响。

因此,设计VDDA供电电路时需要考虑如何降低电源噪声。

4.2 稳定性VDDA供电电路的稳定性直接影响到ADC和DAC的性能。

因此,在设计中需要确保VDDA电源的稳定性,尽量减小电源波动和漂移。

5.VDDA的实际应用5.1 数据手册和参考设计在单片机的数据手册和参考设计中,通常会提供有关VDDA供电的详细信息,包括推荐的供电电路和稳压器的选择。

单片机实现5v电压ad数模转换

单片机实现5v电压ad数模转换

Stc12c5a60s2系列单片机的A/d数模转换模块实验摘要:与时间成连续函数的物理量,一般都称之为模拟量。

人们在工业生产及科研过程中遇到的被测量绝大部分是模拟量。

例如:电压,电流,温度,压力,位移,速度等。

计算机技术是测量与控制自动化与智能化的关键,是现代测控技术的核心技术之一。

现代计算机是数字计算机,它无法直接处理模拟信号,因此欲实现基于计算机的测量与控制,必须具备将连续变化的模拟信号转变成计算机能够识别及处理的数字信号的手段。

为此模/数转换技术应运而成,并成为现代测控技术中的重要组成部分。

将模拟量转换为一定码制的数字量称为模/数转换。

Stc12c5a60s2系列单片机作为微型控制芯片的一种,其自身自带a/d装换口:P1(p1.0-p1.7),可实现数模转换功能。

实验目的:以Stc12c5a60s2单片机以及1602液晶显示屏做一个简易的”电压测量器“,测量线性稳压电源提供的直流电压,精度0.01v,通过调节电位器,将输入的电压转换为数字量实时显示在1602lcd上。

实现过程:1.理论学习:(1)在掌握1602lcd工作原理及使用方法的基础上,查阅Stc12c5a60s2单片机数模转换模块应用介绍,弄清楚a/d转换器的结构,了解a/d转换器是如何工作的。

(2)理解与a/d转换器相关的寄存器的设置,会根据实际需要设置相关的寄存器。

(3)了解如何配置a/d转换口,如何取出转换结果。

以十位结果为例,计算公式如下:Vcc即单片机实际工作电压,我们用单片机工作电压做模拟参考电压,则输出的实际电压vin=result(结果寄存器中的值)×vcc(单片机工作电压5v)/1024。

2.需注意的问题:(1)Stc12c5a60s2单片机的参考电压源是输入的工作电压vcc,所以一般不用外接参考电压源,如果单片机是采用电池供电,电池电压会在一定范围内漂移,所以vcc就不固定,这时候就需要在8路a/d转换的一个通道外接一个稳定的参考电压源,来计算此时的工作电压vcc,再计算出其他几路a/d转换通道的电压。

单片机中数据类型的强制转换

单片机中数据类型的强制转换

单片机中数据类型的强制转换
在单片机中,数据类型的强制转换是指将一种数据类型转换为另一种数据类型。

常见的数据类型强制转换包括以下几种:
1. 显式强制转换:通过强制转换运算符来实现,将一种数据类型转换为另一种数据类型。

例如:(int)num 将num转换为int
类型。

2. 隐式强制转换:是指编译器自动进行的类型转换,不需要显示地使用强制转换运算符。

例如,将一个char类型数据赋值
给一个int类型变量,编译器会自动将char类型转换为int类型。

3. 整数提升:在一些运算中,如果参与运算的两个数的数据类型不一致,编译器会将较低精度的数据类型提升为较高精度的数据类型。

例如,将一个char类型和一个int类型进行运算时,编译器会将char类型提升为int类型。

4. 类型截断:当将一个较高精度的数据类型赋值给一个较低精度的数据类型时,编译器会自动进行类型截断,只保留赋值变量能表示的范围内的值。

例如,将一个int类型赋值给一个
char类型的变量,编译器会将int类型的值截断为char类型能
表示的范围。

需要注意的是,数据类型的强制转换可能导致数据的丢失或截断,因此在进行数据类型强制转换时,需要谨慎考虑数据精度的问题,避免数据错误或产生意外结果。

单片机DA与DA

单片机DA与DA

AD:模数转换,将模拟信号变成数字信号,便于数字设备处理。

DA:数模转换,将数字信号转换为模拟信号与外部世界接口。

具体可以看看下面的资料,了解一下工作原理:1. AD转换器的分类下面简要介绍常用的几种类型的基本原理及特点:积分型、逐次逼近型、并行比较型/串并行型、∑-Δ调制型、电容阵列逐次比较型及压频变换型。

1)积分型(如TLC7135)积分型AD工作原理是将输入电压转换成时间(脉冲宽度信号)或频率(脉冲频率),然后由定时器/计数器获得数字值。

其优点是用简单电路就能获得高分辨率,但缺点是由于转换精度依赖于积分时间,因此转换速率极低。

初期的单片AD转换器大多采用积分型,现在逐次比较型已逐步成为主流。

2)逐次比较型(如TLC0831)逐次比较型AD由一个比较器和DA转换器通过逐次比较逻辑构成,从MSB开始,顺序地对每一位将输入电压与内置DA转换器输出进行比较,经n次比较而输出数字值。

其电路规模属于中等。

其优点是速度较高、功耗低,在低分辩率(<12位)时价格便宜,但高精度(>12位)时价格很高。

3)并行比较型/串并行比较型(如TLC5510)并行比较型AD采用多个比较器,仅作一次比较而实行转换,又称FLash(快速)型。

由于转换速率极高,n位的转换需要2n-1个比较器,因此电路规模也极大,价格也高,只适用于视频AD转换器等速度特别高的领域。

串并行比较型AD结构上介于并行型和逐次比较型之间,最典型的是由2个n/2位的并行型AD转换器配合DA转换器组成,用两次比较实行转换,所以称为Half flash(半快速)型。

还有分成三步或多步实现AD转换的叫做分级(Multistep/Subrangling)型AD,而从转换时序角度又可称为流水线(Pipelined)型AD,现代的分级型AD中还加入了对多次转换结果作数字运算而修正特性等功能。

这类AD速度比逐次比较型高,电路规模比并行型小。

4)∑-Δ(Sigma?/FONT>delta)调制型(如AD7705)∑-Δ型AD由积分器、比较器、1位DA转换器和数字滤波器等组成。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第九章 数∕模 与 模∕数转换
测量对象和被控对象,是连续变化的模拟量,
具有模拟量输入和模拟量输出的MCS —51应用系统结构如图:
开关量
模拟量
物理量:位移,加速度,速度;
压力,温度,湿度;
光强,颜色;
磁场强度,磁通量;
A/D 与D/A 电路已经集成化, 掌握其参数,合理的选用
§9.1 D/A 转换器的工作原理及指标 一、 工作原理
D/A 转换器:输入数字量: D n-1 D n-2 … D 1 D 0
实际物理量(非电量) 传感器 及变换电路 单 片
机 模拟信号 AD 转 换 器
D/A
转换器
输出模拟量: Vo
Vo = D • Vr Vr 为参考电压
D = D n-1• 2n-1
+ D n-2 • 2
n- 1
… + D 1 • 2 + D 0
实现方法很多,介绍两种 1. 权电阻D/A 转换法
位切换开关 权电阻 Vr :基准电压
构成:模拟电子开关,运算放大器 模拟电子开关:Di=1 接通
Di=0 断开
运算放大器:反向放大求和 输出电压:Vo =(
R D 80+R D 41+R D 22+R
D 3
) • R F • Vr 2.R —2R T 型电阻网络D/A 转换器 框图:
T 型解码网络
求和放大器
参考电压 模拟电子开关
D0 D1 Dn-1
T 型电阻网络D/A 转换器框图
T 型电阻网络D/A 转换原理图
由R-2R 网络、模拟开关、运算放大器构成 从每个节点看,等效电阻为:R 从D3、D2、D1、D0看,等效电阻为 3R ; 从每一模拟开关流入的电流为:I=
R
Vr
3 ; 电流经电阻网络分流后,进入运算放大器的电流为: D3:2
1I D2:4
1I
二进制输入
D1:81I D0:16
1I
Vo = R
Vr Rf 3∙(D 3 • 2-1 + D 2 • 2-2 + D 1 • 2-3 + D 0 • 2-4

=
16
3∙∙R Vr Rf (D 3 • 2-3 + D 2 • 2-2 + D 1 • 2-1 + D 0 • 20

D/A 转换器件提供的是电流,需要加运算放大器进行放大和转换。

输出的电压与运算放大器的反馈电阻Rf 及参考电压Vf 有关。

R-2R 电阻网络实现容易,实用上大量采用 如:DAC0832 DAC0808 AD7520 二、D/A 转换器的性能指标
1. 分辨率
最小输出电压(对应输入数字量只有最低位为1)与最大输出电压(对应输入数字量全部为1)之比,与该数模转换器的位数有关:
10位,最小输出电压:Vmin = 00 0000 0001Vr 最大输出电压:Vmax = 11 1111 1111Vr 分辨率:
10231≈ 0.001 即 102
1 位数越高,输出电压最小值越小,分辨率越高,灵敏度越高; 以D/A 转换器的位数来表示其灵敏度,位数越高,灵敏度越高; 如:DAC083
2 8位
分辨率为:
82
1
≈ 0.004
2.建立时间
D/A中的输入代码有满刻度值的变化时,其输出模拟信号达到满度值±LSB/2所需时间;
3.精度
通常以最大转换误差的形式给出,包括非线性误差,比例误差,漂移误差等。

精度与分辨率不同:
4.线性度
实际输出值对D/A转换器理想输入/输出曲线的接近程度,通常以非线性误差的大小表示线性度;
1LSB
以最低位的分数来表示,LSB ,
2
还有:输出电压范围,输入电平类型,温度系数,工作温度,功耗三、D/A转换器的分类
1.按速度(建立时间)分类
1MHz以上为高速
THS8133 5ns
2.按输出信号类型分类
电流型:后面加运放I—V转换
电压型:直接得到电压
3.按接口类型分类:
并行:DAC0832,AD7520,
串行:MAX531, TLV5638(双12位)
4.参考源类型
内部和外部
5.供电电源类型:
单电源和双电源
四、D/A转换器的选择
考虑各种参数
所用的场合情况
§9.2 模数转换器DAC0832与MCS-51接口
一、DAC0832结构及特性
DAC0800系列:DAC0830\DAC0831\DAC0832可以完全代换1.主要特性参数:
●分辨率:8位
●电流稳定时间:1µs
●可以单稳态、双稳态或直接数字输入
●单一电源供电(+5V ─+15V)
●输入电平:TTL
●功耗:20mW
2.结构框图
DAC0832数模转换器框图
两个数据锁存器、一个T型网络D/A转换器、控制电路
8位输入寄存器
由8D锁存器组成,用来作为输入数据的缓冲寄存器,可以直接与微机相连,LE1为其控制输入,
LE1=1:D触发器接受信号,
LE1=0: D触发器锁存信号
8位DAC寄存器
也由8D锁存器组成,8位输入数据只有通过DAC寄存器才能送到D/A转换器去转换;控制端LE2;
LE2=1: 输出跟随输入
LE2=0:锁存
8位D/A转换器
采用T型网络,电流输出,
3.引脚说明:(共20脚)
DI0 ─ DI7: 数字量数据输入;
ILE:数据锁存允许;
CS:输入寄存器选择,低电平有效;
WR1: 输入寄存器选通信号,低电平有效;
ILE=1, CS=0:
WR1=0, 则:LE1=1, 输入寄存器的输出随输入变化;
WR1=1, 则:LE1=0, 数据锁存在输入寄存器中;
XFER:数据转移控制信号,低电平有效;
WR2: DAC寄存器选通信号;
XFER、WR2同时为低时,LE2=1, 8位DAC寄存器的输
出随输入而变化,WR2的上升沿锁存;
Vref: 基准电压输入;
Rfb:运算放大器反馈信号输入,芯片内已有反馈电阻;
Iout1 Iout2: 电流输出,Iout1+Iout2=常数;
Iout1随DAC寄存器的内容线性变化;
Vcc: 工作电源,
DGND:数字地,工作电源地、数据地、控制信号地;
AGND:模拟地,基准电压地、模拟信号地;
在D/A和A/D系统中,模拟地和数字地应分开,以保证转换精度,提高系统的抗干扰能力。

二、DAC0832与8051的接口设计
1.单缓冲方式
输入寄存器、DAC寄存器直接送D/A转换器
单路模拟量输出电路
ILE=+5V, 片选信号CS与XFER一起接P2.7,
WR1和WR2接在一起与8051的WR信号相连,既完成了数据的锁存,又完成了D/A转换,
0832的地址为:7FFFH
完成一次D/A转换的指令为:
MOV DPTR, #7FFFH ; 选中DAC0832
MOV A , #DATA ; 要转换的数据
MOVX @DPTR , A ; 输入数据
利用0832产生各种波形:
锯齿波:
ST: MOV DPTR ,#7FFFH ; 选中DAC0832 MOV A , #00H ; 取初值
LP: MOVX @DPTR , A ; 转换
INC A ;A A+1
SJMP LP ;
输出波形为:
V
t 三角波:
ST: MOV DPTR ,#7FFFH ; 选中DAC0832
MOV A , #00H ; 取初值
UP: MOVX @DPTR , A ; 转换
INC A ;A A+1
JNZ UP ; 上升结束?
DOWN: DEC A ; 下降
MOVX @DPTR , A ; 转换
JNZ DOWN ; 下降结束?
SJMP ;完成一个周期,重复
波形图:
V
t
矩形波:
ST : MOV DPTR ,#7FFFH ; 选中DAC0832 LP: MOV A , #DATA1 ; 高电平
MOVX @DPTR , A ; 转换
ACALL DELAY_H ; 延时1
MOV A , #DATA2 ; 低电平
MOVX @DPTR , A ;
ACALL DELAY_L ; 延时2
SJMP LP ; 循环
V
如何产生正弦波?
2.双缓冲方式
需要多路数模同时输出时,可用双缓冲方式:
双路输出0832与8051接口
P2.5: 第一片0832输入寄存器地址,DFFFH
P2.6: 第二片0832输入寄存器地址,BFFFH
P2.7: 两片0832DAC寄存器地址,7FFFH
双缓冲原理:
MOV DPTR ,#DFFFH ; 选中第一片DAC0832
MOV A , #DATA1 ;
MOVX @DPTR , A ; 锁存DATA1
MOV DPTR ,#BFFFH ; 选中第二片DAC0832
MOV A , #DATA1H ;
MOVX @DPTR , A ; 锁存DATA2
MOV D PTR ,#7FFFH ; 选中两片DAC寄存器
MOVX @DPTR , A ; 两路同时输出。

相关文档
最新文档