㈠ 单片机AD转换的实质是不是就是检测电压的大小
单片机AD转换的实质可以理解为检测电压的大小,但不准确。对于模拟电压可以用万用表测出电压多少。但对于单片机却无法识别和处理模拟电压,所以,需要把模拟电压(模拟量)转换成对应的数字量,才能进行计算,比较等处理。而且,自然界中的物理量都是模拟量,要测量就要先转换成电压,再进行A/D转换,单片机通过换算,计算出物理量的值。所以,AD转换不只是要检测电压大小,而是要采集各种物理量。
㈡ 51单片机AD转换实验,电路和程序
#include <reg51.h>
#include <INTRINS.H>
#include <STDIO.H>
// define P1.0 to check STATUS.
sbit STATUS = P1^0;
unsigned char xdata CTRL _at_ 0x2FFF;
unsigned char xdata ADSEL _at_ 0x4FFF;
unsigned char hByte;
unsigned char lByte;
void adc_Convert (void)
{ // Start a conversion with A0 and A/$C$ low.
// The convesion takes place on rising CE edge.
CTRL = 0x00;
ADSEL = 0x00;
// Wait until we have completed a conversion .
while(STATUS==1);
// Set R/$C$ with A0 low and read the low byte.
CTRL = 0x02;
hByte = ADSEL;
// Set R/$C$ with A0 high and read the high.
CTRL = 0x03;
lByte = ADSEL;
}
void main(void)
{ unsigned int delay, MSB , LSB, adc_Res;
// Initialize serial interface
SCON = 0xDA; // SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xFD; // TH1: reload value for 1200 baud @ 12MHz */
TR1 = 1; // TR1: timer 1 run */
TI = 1; // TI: set TI to send first char of UART */
while(1)
{ adc_Convert();
MSB=(unsigned int)(hByte << 4);
LSB=(unsigned int)(lByte >> 4);
// adc_Res now has the converted data with 12-bit resolution.
adc_Res = MSB + LSB;
// Send adc results to the serial interface
printf("ADC READINGS: %03Xh\n", adc_Res);
// simple delay - it is mcu clock dependent !
for (delay=0; delay<10000; delay++)
;
}
}
㈢ 单片机,AD转换的原理谢谢啦
简单点将就是将IO口获得的电压信号与基准电压(如VCC或者其他参考源)做比较,得出一个数字量。测量的结果精度取决于你AD的位数
㈣ 单片机AD和DA转换具体过程是怎么样的
比如8位的AD转换吧,转换0~5V为数字量信号,就是把5V分成256份,每份是5/256,这个也就是精度,最小一份就是5/256 V,0.02V左右,比如输入信号为5V,就占了256份,AD输出结果换成16进制就是0xff,比如说输入是3.1V,就占了3.1/(5/256)=158.72份,所以输出结果只能是158份,0x9e,就偏差了0.72份,就是0.72*5/256=0.014V,就偏差了0.014V左右,如果10位的AD转换,每份就是5/1024,精度也就高了很多,反过来DA转换也是一样的
㈤ 51单片机与AD转换程序
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitwr=P2^6;
sbitrd=P2^7;
sbitadint=P2^5;
delay(uintz)
{
ucharw;
while(z--)
{
for(w=0;w<125;w++);
}
}
ad_star()
{
wr=1;
wr=0;
wr=1;
}
main()
{
uchara;
while(1)
{
ad_star();
while(adint);
rd=0;
a=P0;
delay(10);
rd=1;
if(a>0&a<=20){P3=0xc0;}
if(a>20&a<=40){P3=0xf9;}
if(a>40&a<=60){P3=0xa4;}
if(a>60&a<=80){P3=0xb0;}
if(a>80&a<=100){P3=0x99;}
if(a>100&a<=120){P3=0x92;}
if(a>120&a<=140){P3=0x82;}
if(a>140&a<160){P3=0xf8;}
if(a>160&a<=180){P3=0x80;}
if(a>180&a<=200){P3=0x90;}
if(a>200&a<=220){P3=0x88;}
if(a>220&a<=240){P3=0x83;}
if(a>240&a<=255){P3=0xc6;}
}
}
㈥ 什么是单片机ad转换,单片机ad转换处理方法
不管哪个单片机或者哪个应用系统,AD转换的作用都是,将被测电压转换成相对应的数值,这样的话单片机才能够据此进行运算、判断、和控制处理.
例如,一个温度传感器在0℃的时候是100欧,对应2.5V的电压,那么单片机是无法直接知道此时的电压是2.5V的,单片机本身只能知道电平是高还是低,因此这个2.5V的电压就需要经过ADC转换为数字量,如果是用8位分辨率的ADC、参考电压为5V,那么转换结果就是127,也就是0x7F,这样的话,单片机就可以判断这个温度是否过高或者过低,就能进行运算和控制了.
㈦ 如何实现单片机中多路AD转换
有两种办法,一个就是用两个AD转换芯片,两路模拟量分别接一个。用单片机控制两个AD芯片同时启动转换,这样基本可以实现采集到同一时刻的两路模拟量值。
另一种办法就是用两个采样保持器(LF398),来暂时保存模拟量的瞬时值。两个保持器后面接模拟多路转换器,模拟多路转换器后面接一个AD转换器。过程是这样的:要采集之前先给两个采样保持器一个保持信号,紧接着选择多路开关通道,紧接着启动AD转换器。分别选择多路开关的两个通道,来取得两路模拟量的值。
㈧ 51单片机关于AD转换的问题
假设AD的精度满足要求,就跟跟AD没有关系,就是数据处理显示问题,k=AD_IN0*10就是把数字处理成两位数,然后后面代码就是显示出来
㈨ 单片机ad输出的结果如何转换
可以通过移位的方式来合并两个寄存器的值,不同的单片机有不同的结构。具体情况要看单片机硬件结构来处理。10位值要与8位的来比较大小,可以在精度允许的情况下将10位的低2位略去。