导航:首页 > 操作系统 > 单片机查询adc

单片机查询adc

发布时间:2022-12-08 07:24:35

① 关于单片机ADC的计算

8051除DPTR是可读写的16位寄存器外,其余都是8位的,ADC也不例外
如果其转换结果超8位,是保存在2个寄存器中的
C语言编程
很简单,如果12位数据右对齐
转换结果为
高8位乘256
加低8位
如果左对齐,则结果为高8位乘16
加低8位除16
汇编语言要复杂一些
要会多字节数据(起码会双字节)的加减乘除运算,教科书上有例子的

② 请问下ADC0809与8031单片机的查询方式给点原理性的解释让我明白~~谢谢

其实不是很懂你想问什么,我就简单说一下我能想到的你可能需要的吧。
adc0809是一种模数转换芯片,简单来说就是把模拟信号转换成对应的数字信号。比如输入为1v,参考高电压为2v,参考低电压为0v,那么输出就是1v/2v
*255
(乘以255的原因是因为这是一个8位的ad)。
74ls373是三态输出的八d锁存器,简单来说就是通过几个输入信号来实现数字信号的d触发器的控制,三态就是高电平
低电平
高阻态三态。
8031是一种通用单片机,就是通过在里面进行预先烧写程序,实现通用控制的一种器件。
总体来说,8031是电路板的大脑,adc0809类似于温度神经,用来检测电压高低,74ls373类似于神经纤维之类用于实现电平信号的一种基础逻辑的扩展芯片。
建议提出问题时说明具体目标或者用途,回答也好有的放矢。手写不易,求给分。

③ 单片机控制ADC的常用方法有哪些

1、ADC原理

ADC转换器由前置滤波器、调制器、数字滤波器和梳值滤波器组成,22∃ADC的结构如图1所示.它是将输入信号通过22∃调制器量化成1bit的高速数据流,再经过数字滤波和采样抽取后才得到最后的结果.和传统的A󰃗D转换相比,其原理和结构有很大地不同,下面以一阶22∃调制器为例来说明22∃ADC原理.

图1 2-∃ADC的结构

2、常用的方法

ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。

(1)ADC0809的内部逻辑结构

由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数 据。

(2). ADC0809引脚结构

ADC0809各脚功能如下:
D7-D0:8位数字量输出引脚。
IN0-IN7:8位模拟量输入引脚。
VCC:+5V工作电压。
GND:地。
REF(+):参考电压正端。
REF(-):参考电压负端。
START:A/D转换启动信号输入端。
ALE:地址锁存允许信号输入端。
(以上两种信号用于启动A/D转换).
EOC:转换结束信号输出引脚,开始转换时为低电平,当转换结束时为高电平。
OE:输出允许控制端,用以打开三态数据输出锁存器。
CLK:时钟信号输入端(一般为500KHz)。
A、B、C:地址输入线。

ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。

地址输入和控制线:4条

ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。通道选择表如下表所示。


数字量输出及控制线:11条

ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当 EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输 出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0为数字量输出线。

CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,

VREF(+),VREF(-)为参考电压输入。

2. ADC0809应用说明

(1). ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。

(2). 初始化时,使ST和OE信号全为低电平。

(3). 送要转换的哪一通道的地址到A,B,C端口上。

(4). 在ST端给出一个至少有100ns宽的正脉冲信号。

(5). 是否转换完毕,我们根据EOC信号来判断。

(6). 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。

3. 实验任务

如下图所示,从ADC0809的通道IN3输入0-5V之间的模拟量,通过ADC0809转换成数字量在数码管上以十进制形成显示出来。ADC0809的VREF接+5V电压。

4. 程序设计内容

(1). 进行A/D转换时,采用查询EOC的标志信号来检测A/D转换是否完毕,若完毕则把数据通过P0端口读入,经过数据处理之后在数码管上显示。

(2). 进行A/D转换之前,要启动转换的方法:

ABC=110选择第三通道

ST=0,ST=1,ST=0产生启动转换的正脉冲信号 .

C语言源程序
#include
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
unsigned char dispcount;

sbit ST="P3"^0;
sbit OE="P3"^1;
sbit EOC="P3"^2;
unsigned char channel="0xbc";//IN3
unsigned char getdata;

void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
TR0=1;
ET0=1;
EA=1;

P3=channel;

while(1)
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P0;
OE=0;
dispbuf[2]=getdata/100;
getdata=getdata%10;
dispbuf[1]=getdata/10;
dispbuf[0]=getdata%10;
}
}

void t0(void) interrupt 1 using 0
{
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}

④ STC单片机 ADC按键 求助!!

取那么多、那么长时间的平均值干什么?

连续取 20 次,其中有10 次,按的是这个键,有10 次,按的是那个键,

平均一下,判定结果:是按下了一个根本就没有按的键。
========
#include<reg52.h>
#include<intrins.h>

unsigned char code k_AD[] = {
10, 40, 70, 100, 130, 160, 190, 210, 230};//九个按键所对应的ADC值

unsigned char code an[] = { //共阳段码
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//--------------------------------------------
void delay(int x)
{
int i;
while(x--) for(i = 115; i > 0; i--);
}
//--------------------------------------------
unsigned char keyscan()
{
unsigned char k1, k2;

k1 = GetADCResult(0);//读出

if(k1 < 238) { //按下了

delay(20); //延时

k2 = GetADCResult(0); //再次读出

if((k1 > (k2 - 5) && (k1 < (k2 + 5)) { //两者相差无几

k1 /= 2; k2 /= 2; k1 += k2; //两次的平均值

for(k2 = 0; k2 < 9; k2++) //在表格中查找9次

if(k1 > (k_AD[k2]) - 5) && (k1 < (k_AD[k2]) + 5)) //找到了

return(k2); //就返回键值
}
}
return(255); //没有按键
}
//--------------------------------------------
void main()
{
unsigned char key;
while(1) {
key = keyscan();
if(key != 255) P0 = an[key];//显示键值
}
}
//--------------------------------------------

本程序未经验证,仅供参考。

⑤ 单片机如何用adc求电阻值

你的电阻的电路图具体是什么。你可以通过单片机给adc0832送相应的数据,数值可以在0-255范围内,如果你用的集成电阻器的话,可以通过这个数值不同范围选择不同的电阻。

⑥ 单片机集成的ADC指的是什么器,DAC指的是什么器

ADC是指模拟信号转换成数字信号,DAC刚好相反。比如基准电压是5V、10位ADC的单片机,检测外部2.5V的电压,读取检测后单片机对应的寄存器值就可以获取512左右的数值。简单的说ADC就是单片机检测电压。DAC则是你想输出对应的电压,只要编程时候赋对于得数值就可以了。

⑦ 什么是ADC的中断方式和查询方式

AD转换是需要一定时间的,是让程序就地等待转换结果读取数据,还是让ADC转换结束之后自动处理结果,可以有两种选择。选择前者就是查询方式,选择后者就是中断方式。ADC转换结束之后有一个标志会置位,查询方式就是让程序等待这个标志位置位。而如果开放了ADC中断,这个标志位置位的同时会发生中断,程序暂时挂起,自动进入中断服务程序处理ADC转换结果,处理结束之后继续被挂起的程序。你提问中的两种方式,和其它诸如定时器、I/O、串行接口等模块的应用,道理都是一样的。当然,我说的仅限于单片机片内ADC,至于外挂的ADC那是另一番情景了。

⑧ 单片机中ADC是什么

ABC的意思指的是,ac转DC。交流信号转化为直流信号。

⑨ 关于单片机ADC的计算

8051除DPTR是可读写的16位寄存器外,其余都是8位的,ADC也不例外 如果其转换结果超8位,是保存在2个寄存器中的
C语言编程很简单,如果12位数据右对齐
转换结果为 高8位乘256 加低8位
如果左对齐,则结果为高8位乘16 加低8位除16
汇编语言要复杂一些
要会多字节数据(起码会双字节)的加减乘除运算,教科书上有例子的

阅读全文

与单片机查询adc相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:736
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163