51单片机AD转换电路设计实现

关于AD转换的原理,大家在《数字电子技术》中已经学过,这里做过多的介绍,本文介绍一款经典的8位AD转换芯片ADC0804,基于51单片机设计AD转换电路,并完成测量值的转换。

1 芯片引脚介绍

CS:片选信号,低电平有效,即CS=0时候芯片才能正常工作,单独一个ADC0804芯片时候直接置零。当有多个芯片时候可以通过片选信号实现分时复用。

WR:低电平有效,当WR信号由高到低时候实现一次ADC转换。

RD:低电平有效,RD=0时候可以读取数据。

Vin+:模拟电压输入端。

Vin-:一般接地,当模拟电压是双边输入时候Vin+和Vin-分别接模拟电压的正负极。

VREF/2:参考电压接入引脚,可悬空或接外界电压。接外电压时候芯片的参考电压为所接电压的两倍。悬空时候芯片参考电压为VCC。

CLKR/CLKIN:外接RC电路产生转换所需的时钟信号,CLK=1/1.1RC。

AGND和DGND:模拟和数字地。

INTR:中断请求信号输出引脚,当完成一次AD转换后该引脚为低电平,一般与单片机的中断信号相连。

DB0~DB7:输出转换后的八位二进制结果。

2 ADC0804的一般接法:

Proteus仿真电路:

3 ADC0804的工作时序:

启动转换时序

先将CS置低电平,芯片开始工作,WR随后置低,经过一段时间的低电平之后,WR拉高,AD转换启动,经过1-8个A/D时钟周期后,模数转换完成,INTR引脚拉低,通知单片机本次转换完成。

数据读取时序

当INTR为低电平时,先将CS置低,接着RD置低,经过一段时间后数字输出口上的数据达到稳态,此时单片机可以读取数据,读取完成后将RD拉高,最后将CS拉高。INTR自动变化,无需人为操作。一般在只有一片ADC0804芯片时候,可以一直将CS置低。

4 仿真实现

51单片机读取ADC0804数据的方式有两种,一种是通过不断扫描的方式读取;另一种是将ADC0804的INTR引脚接单片机的中断引脚,当AD转换完成后,通过外部中断的方式通知单片机读取数据。

4.1 扫描的方式

Proteus仿真电路图

源代码:

#include <reg51.h>
#include <intrins.h>
sbit CS=P3^5;
sbit adrd=P3^7;
sbit adwr=P3^6;
unsigned char code display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char com[]={0x01,0x02,0x04,0x08};
unsigned char num,num2=0,time[4]={0,0,0,0},val;
float val2;
unsigned int val3;void main()
{TMOD=0x01;TH0=(65536-917)/256;       TL0=(65536-917)%256;;      EA=1;ET0=1;TR0=1;CS=0;while(1){adwr = 1;//_nop_();adwr = 0;//_nop_();adwr = 1;//P1 = 0xff;//adrd = 1;//_nop_();adrd = 0;//_nop_();val = P1;//adrd = 1;//val2=((val*1.0/255)*5.0);val3=val2*1000;time[0]=val3/1000;time[1]=val3%1000/100;time[2]=val3%100/10;time[3]=val3%10;}
}void Timer0() interrupt 1
{TH0 = (65536-917)/256;        TL0 = (65536-917)%256;;    num++;if(num==10){      num=0;P0=~com[num2];P2=0xff;if(num2==0){P2=display[time[num2]]|0x80;}else         {P2=display[time[num2]];}num2++;if(num2>=4)num2=0;  }}

4.2 外部中断的方式

Proteus仿真电路

源代码:

#include <reg51.h>
#include <intrins.h>
sbit CS=P3^5;
sbit adrd=P3^7;
sbit adwr=P3^6;
unsigned char code display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned char com[]={0x01,0x02,0x04,0x08};
unsigned char num,num2=0,time[4]={0,0,0,0},val;
float val2;
unsigned int val3;void Delay50ms()      //@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 3;j = 26;k = 223;do{do{while (--k);} while (--j);} while (--i);
}void main()
{TMOD=0x01;TH0=(65536-917)/256;       TL0=(65536-917)%256;;      EA=1;ET0=1;TR0=1;EX0=1;IT0 = 0;CS=0;while(1){adwr = 1;//_nop_();adwr = 0;//_nop_();adwr = 1;//Delay50ms(); }
}void Timer0() interrupt 1
{TH0 = (65536-917)/256;        TL0 = (65536-917)%256;;    num++;if(num==10){      num=0;P0=~com[num2];P2=0xff;if(num2==0){P2=display[time[num2]]|0x80;}else         {P2=display[time[num2]];}num2++;if(num2>=4)num2=0;  }
}void Init0() interrupt 0
{adrd = 1;//_nop_();adrd = 0;//_nop_();val = P1;//adrd = 1;//val2=((val*1.0/255)*5.0);val3=val2*1000;time[0]=val3/1000;time[1]=val3%1000/100;time[2]=val3%100/10;time[3]=val3%10;
}

51单片机电路原理图_51单片机AD转换电路设计实现相关推荐

  1. 51单片机电路原理图_51单片机最小系统电路设计

    51单片机最小系统具有体积小.质量轻.功能强.功耗低.性价比高等特点.由芯片.系统时钟.I/O端口设备及复位电路等构成. 电子学习资料大礼包​mp.weixin.qq.com 51单片机是STC公司开 ...

  2. c语言编程TLC2543AD采集,51单片机驱动12位AD转换TLC2543电路图+程序

    51单片机驱动12位AD转换TLC2543电路图+程序 2015-06-18 16:51:15   来源:51hei void resultvolt() { volt=volt*5000.0/4334 ...

  3. STC89C52R单片机以及CF85911的AD转换

    第一章 器件清单以及器件介绍 表1 器件清单 序号 器件 型号 数量 1 51开发板 MCS-51 1 2 AD/DA转换模块 PCF8591P 1 3 杜邦线 15cm 11 4 指示灯 \ 8 5 ...

  4. 基于51单片机TLC2543芯片实现AD转换

    #include<reg52.h> //头文件 sbit TCL2543_EOC = P1^0; //转换结束标志IO口 sbit TCL2543_CLK = P1^1; //I/O时钟输 ...

  5. AVR单片机中ATmega8的AD转换探究

    AD采集最好要满足的条件:采样频率不小于被采集信号最高频率的两倍,则采样输出信号就可以无失真的重新啊还原输入信号,通常的实际应用中,采样频率为采集最高频率的5-10倍. AD芯片的数据输出方式有串行和 ...

  6. 51单片机电路原理图_单片机晶振的必要性

    单片机工作时,是一条一条地从ROM中取指令,然后一步一步地执行.单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准.一个机器周期包括12个时钟周期.如果一个单片机选择了12MHZ晶振,它 ...

  7. 51单片机冒泡排序_51单片机片外冒泡排序

    D:\Keil\ASM\danpianjizuoye.asm Page 1 1   /*-------------------------------------------------------- ...

  8. 单片机定时器_51单片机的定时器如何计算初值?

    在学习单片机的时候,我们发现很多功能都是通过中断来实现的.之前也举过烧水的例子来阐述中断,今天就讲解一下定时器赋初值的方法.8位的定时器最大可计数2的8次方为256,16位的定时器最大可计数2的16次 ...

  9. ad stm8l 热电偶_[转载]STM8S单片机入门3(AD转换及锂电池管理)

    锂电池以其容量大.充电性能好的优点,已经得到了广泛引用,特别在小型的需电池供电的电子设备上.但是锂电池的充电和使用条件比较严格,比如充电必须以恒流恒压方式,使用时电压不能低于3V等,所以用锂电池供电的 ...

  10. 关于AD转换设计的一些经验总结(转载)

    关于AD转换设计的一些经验总结 2017-04-01 12:51 看到一片关于AD转换设计中的基本问题整理博文,特地转载过来和大家共分享. 了解数据转换器错误及参数 1.如何选择高速模数转换之前的信号 ...

最新文章

  1. Nginx从基本原理到开发实践
  2. 人人出售部分Social Finance 股票 获益9190万美
  3. 【学习笔记】Android 图像处理
  4. python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...
  5. Spring的自动装配方法
  6. java sessionmanager_java.lang.IllegalStateException:没有SessionManager
  7. ABAP开发如何动态的实现任意表的ALV显示
  8. java引用变量_java代码声明引用变量经验
  9. 100万愤怒的小鸟:中国手机开发者生存调查
  10. asp.net findcontrol html控件,c# – FindControl找不到控件
  11. 基于深度神经网络的动作检测:问题与解决方案
  12. 【转】彻底删除打印机
  13. 萤火虫算法_第二十二章 萤火虫算法(Firefly Algorithm,FA)补充和答疑
  14. Linux 内核读写文件
  15. 字典表该如何写查询语句?
  16. android xutils3 jar,Android全能开源项目xUtils3开发教程、简单封装
  17. MSET key value [key value ...]
  18. VSEARCH:最简单易学的扩增子分析流程
  19. 概率收敛、分布收敛、Lp收敛
  20. python背单词游戏,python背单词小程序

热门文章

  1. 用Vue3+element-plus+express写个简单的后台管理框架
  2. 机器学习——LASSO算法
  3. 【笔记总结】C陷阱与缺陷
  4. Python生成exe可执行文件
  5. U盘容量变小后修复的方法
  6. 从无到有 win10建window xp虚拟机之总结
  7. 角度与弧度之间的换算
  8. 【图像超分辨(SR)】通俗直观彻底理解双线性插值、双三次插值及其作用
  9. julia安装源_Ubuntu下安装Julia
  10. arcgis重心迁移分析,ArcGIS支持下三峡库区适度人口重心迁移研究