ADC0809数模转换程序
ADC0809模数转换实验详解
实验三 ADC0809模数转换实验一、实验目的1、掌握ADC0809模/数转换芯片与单片机的连接方法及ADC0809的典型应用。
2、掌握用查询方式、中断方式完成模/数转换程序的编写方法。
二、实验说明本实验使用ADC0809模数转换器,ADC0809是8通道8位CMOS逐次逼近式A/D转换芯片,片内有模拟量通道选择开关及相应的通道锁存、译码电路,A/D 转换后的数据由三态锁存器输出,由于片内没有时钟需外接时钟信号。
下图为该芯片的引脚图。
各引脚功能如下:IN0~IN7:八路模拟信号输入端。
ADD-A、ADD-B、ADD-C:三位地址码输入端。
八路模拟信号转换选择由这三个端口控制。
CLOCK:外部时钟输入端(小于1MHz)。
D0~D7:数字量输出端。
OE:A/D转换结果输出允许控制端。
当OE为高电平时,允许A/D转换结果从D0~D7端输出。
ALE:地址锁存允许信号输入端。
八路模拟通道地址由A、B、C输入,在ALE信号有效时将该八路地址锁存。
START:启动A/D转换信号输入端。
当START端输入一个正脉冲时,将进行A/D转换。
EOC:A/D转换结束信号输出端。
当 A/D转换结束后,EOC输出高电平。
Vref(+)、Vref(-):正负基准电压输入端。
基准正电压的典型值为+5V。
VCC和GND:芯片的电源端和地端。
三、实验步骤1、单片机最小应用系统1的 P0口接A/D转换的D0~D7口,单片机最小应用系统1的Q0~Q7口接0809的A0~A7口,单片机最小应用系统1的WR、RD、P2.0、ALE、INT1分别接A/D转换的WR、RD、P2.0、CLOCK、INT1,A/D转换的IN接入+5V,单片机最小应用系统的RXD、TXD连接到串行静态显示实验模块的DIN、CLK。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加AD0809.ASM源程序,进行编译,直到编译无误。
8位数模转换器ADC0809实验报告
8位数模转换器ADC0809实验报告实验目的:本实验旨在通过使用8位数模转换器ADC0809来将模拟信号转换为数字信号,并输出至LED灯中,以达到理解数字信号的目的。
实验原理:ADC0809是典型的8位数模转换器,它是一种具有8个模拟输入通道的典型ADC。
ADC0809是一种串行转换器,它可以实现单端和差分两种模式的转换。
ADC0809的转换精度为8比特,转换速率为100厘秒。
ADC0809通过8个输入通道将模拟信号转换为数字信号,并通过8个数据引脚输出数字信号。
实验器材:电脑、ADC0809、LED灯、电阻、电容、按键开关、电源、实验板。
实验步骤:1.将ADC0809插入实验板上。
2.将电阻连接至ADC0809的引脚,以使引脚与电阻的连接具有正确的阻值。
3.将电容插入ADC0809的引脚,并连接至电源。
4.将按键开关插入ADC0809的引脚,并连接至电源。
5.将LED灯连接至ADC0809的引脚,并连接至电源。
6.将实验板接入电源,启动电路。
7.按下按键开关,开始信号转换。
8.数字信号转换完成后,将数字信号输出至LED灯中。
实验结果:本实验成功地将模拟信号转换为数字信号,并将数字信号输出至LED灯中,达到了理解数字信号的目的。
结论:通过本实验,我们可以了解数字信号的基本原理和用途。
通过使用ADC0809将模拟信号转换为数字信号,并输出至LED灯中,我们可以更好地理解数字信号的应用和意义。
同时,该实验也为我们打下了更深入学习数字电路和信号处理技术的基础。
ADC0809采集与数值转换、10进制显示的VHDL实现
同ADC0809一路走来采用VHDL语言控制ADC0809对模拟电压量进行采集不难,难在于将所得的数据进行转换,显示实际电压值(当然是10进制数),更难的是在转换方法上的运用,如何达到更高效率、资源占用率更低!ADC0809对(0~5V)模拟量数值转换的公式为:Vo=data*5/255,即输出电压值Vo=data/51。
在CPLD或FPGA上应用除法所占资源量较大。
个人在转换方式、方法上的认识与实践有如下例子!例一:----------------------有四舍五入,使用个176个logic elements--------------------------------所用方法为:事先算好各数据对应实际电压值,采用查表方式得出数值,没有任何技术含量。
--不过很考验一个人的耐心、细心,对256个数据的计算、舍入、输入等,工作量还是(谁试谁知道)。
--较好的方法可以用 EXCEL计算,生成部分代码(推荐,还可以学习EXCEL的使用)。
仿真波形如图1:--日期:2011-5-2--作者:junglelibrary ieee;use ieee.std_logic_1164.all;entity volt isPORT( Din : in std_logic_vector(7 downto 0);VO2 : out integer range 0 to 5;VO1,VO0 : out integer range 0 to 9 );end volt;architecture one of volt is--显示数值寄存器,V0表示个位 V1表示十位,V2表示百位signal V1,V0: integer range 0 to 9;signal V2: integer range 0 to 5;beginVO2<=V2;VO1<=V1;VO0<=V0;process(Din) --显示查表进程begincase Din isWHEN"00000000"=>V2<=0;V1<=0;V0<=0;WHEN"00000001"=>V2<=0;V1<=0;V0<=2;WHEN"00000010"=>V2<=0;V1<=0;V0<=4;WHEN"00000011"=>V2<=0;V1<=0;V0<=6; --3/51≈0.06---------------4~252略------------WHEN"11111101"=>V2<=4;V1<=9;V0<=6; --253/51≈4.96WHEN"11111110"=>V2<=4;V1<=9;V0<=8;WHEN"11111111"=>V2<=5;V1<=0;V0<=0;WHEN OTHERS => NULL;end case;end process;end one;图1 仿真波形例二:----------------------有四舍五入,使用个549个logic elements------------------方法说明:先将数据过大1000倍再除以51得到的数据就有4个有效数据,最低位数据来确定是否四舍五入(进位)。
51单片机adc0809模数转换器逐次逼近法的实现原理
51单片机adc0809模数转换器逐次逼近法的实现原
理
51单片机ADC0809模数转换器采用逐次逼近法实现模数转换。
逐次逼近法的原理是,从高位到低位逐位比较,根据比较结果不断调整待转换的数字量,直到找到一个数字量使其对应的模拟量与输入的模拟量相等或最大程度接近。
在ADC0809模数转换器中,逐次逼近法的实现过程如下:
1. 将最高位(MSB)设置为1,其余位为0,形成起始转换数字量。
2. 将该数字量输入比较器,与输入的模拟量进行比较。
3. 根据比较结果,调整数字量的最高位:如果模拟量大于数字量,则将最高位清0;否则保持为1。
4. 保持其余位不变,将调整后的数字量再次输入比较器进行比较。
5. 重复步骤3和4,直到比较器的输出为稳定状态(即最高位不再变化),此时得到的就是输入模拟量的近似值。
通过逐次逼近法,ADC0809模数转换器能够实现高精度的模数转换,并且具有较快的转换速度。
ADC0809程序
/*---------------------------------------------------------------------------------------------------程序说明:adc0809接到51单片机的P1口,P1口接有8个LED,每次转换结束都可以通过LED观察到转换结果(低电平亮),ADC参考电压与单片机的电源要一致通过验证:输入5v则LED全灭输入0v则LED全亮通过电位器控制输入0~5v则1602显示输出从0~255逐次增加------------------------------------------------------------------------------------------------------*/#include<reg52.h>#include<intrins.h>#include"1602.c"#define uchar unsigned char#define uint unsigned intsbit ADC_START=P2^0;sbit ADC_ALE =P2^1;sbit ADC_OE =P2^2;sbit ADC_EOC =P2^3;sbit D0=P1^0;sbit D1=P1^1;sbit D2=P1^2;sbit D3=P1^3;sbit D4=P1^4;sbit D5=P1^5;sbit D6=P1^6;sbit D7=P1^7;uchar ad_dat;/*---------------------------------函数名:delayus(i)功能:延时t=(12*i+14)us参数:i返回值:无备注: 晶振12MHz-----------------------------------*//*void delayus(i){for(i;i>0;i--);}*//*---------------------------------dac0809初始化----------------------------------*/void init0809(){ADC_START=0;ADC_OE =0;_nop_();ADC_ALE=0;_nop_();_nop_();_nop_();ADC_ALE=1; //ALE=1时地址进入锁存器_nop_();_nop_();_nop_();ADC_ALE=0; //ALE=0时地址被锁存住_nop_();_nop_();_nop_();}/*---------------------------------dac0809模数转换----------------------------------*/void ADC_0809(){ADC_START=1; //上升沿复位_nop_();_nop_();_nop_();ADC_START=0; //下降沿开始_nop_();_nop_();_nop_();while(!ADC_EOC); //等待转换结束ADC_OE =1;w_dat_1602(0x30+(uchar)D0);w_dat_1602(0x30+(uchar)D1);w_dat_1602(0x30+(uchar)D2);w_dat_1602(0x30+(uchar)D3);w_dat_1602(0x30+(uchar)D4);w_dat_1602(0x30+(uchar)D5);w_dat_1602(0x30+(uchar)D6);w_dat_1602(0x30+(uchar)D7);delayus(5);ADC_OE =0;}void main(){init0809();init_1602();delayus(10);while(1){w_com_1602(0x80);ADC_0809();}}#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rs=P2^4; //1602io引脚sbit rw=P2^5; //1602io引脚sbit e=P2^6; //1602io引脚/*---------------------------------函数名:delayusus(i)功能:延时t=(12*i+14)us参数:i返回值:无备注: 晶振12MHz-----------------------------------*/ void delayus(i){for(i;i>0;i--);}/*---------------------------------函数名:w_com_1602(uchar com) 功能:写命令参数:uchar com返回值:无-----------------------------------*/ void w_com_1602(uchar com) {e=0;rs=0;rw=0;delayus(2);P0=com;e=1;delayus(2);e=0;delayus(2);}/*---------------------------------函数名:w_dat_1602(uchar dat)功能:写数据参数:uchar dat返回值:无-----------------------------------*/void w_dat_1602(uchar dat){e=0;rs=1;rw=0;delayus(2);P0=dat;e=1;delayus(2);e=0;delayus(2);}/*---------------------------------函数名:init_1602()功能:1602初始化参数:无返回值:无-----------------------------------*/void init_1602(){P0=0xff; //端口初始化w_com_1602(0x38); //功能设置w_com_1602(0x0f); //开光标但不闪烁w_com_1602(0x06); //设置输入方式w_com_1602(0x01); //清屏delayus(5);}投标人在《招标投标法实施条例》中应重点关注的19个法律问题《招标投标法实施条例》(以下简称《条例》)日前已公布,将于2012年2月1日起施行。
模数转换器ADC0809应用原理
模数转换器ADC0809应用原理模数转换器(Analog-to-Digital Converter,简称ADC)是一种将模拟信号转换为数字信号的电子元件。
在电子领域中,模数转换器有着广泛的应用,其中最常见的就是采集模拟信号,并将其转换为数字信号进行处理。
ADC0809是一种八位分辨率的8通道模数转换器,它可以将输入模拟信号转换为一个八位的二进制数字。
ADC0809的工作原理ADC0809采用了单倍增量逐次比较式ADC,其基本工作原理是,将输入的模拟信号与一个参考电压进行比较,输出相应的数字信号。
具体工作流程如下图所示:___________________________________ ________________________| 时钟||___________________________________________________________________|______________ ________ ________ ________ ________| 输入模拟信号 | | 比较器0 | | 比较器1 | | ...... | | 比较器7 ||_____________| _________ |________| |________| |________| |________|| | || || | ___________ | ___________ | ___________ || |__| |__|__||__|__| |__|| 串—并串—并串—并串—并八个比较结果反相器(INV)| ________ ________ ________|______________________________| 反相器| | 反相器 | | ...... | | 反相器 ||________| |________| |________| |________|| | | || | | || | | |V V V V____ ____ ________ ________ ________| | | | | ...... | | || D0 ~ D7 |_______| D0 ~ D7 |_______| D0 ~ D7 |_______| D0 ~ D7 ||____ _____| |________| |________| |________|| | | || | | || | | || | | || | | |____ ____ ________ ________ ________| | | | | ...... | | || 转换器 | | 转换器 | | ...... | | 转换器 | |____ _____| |________| |________| |________|| | | || | | || | | |V V V V____ ____ ________ ________ ________| | | | | ...... | | || A0 ~ A7 |_______| A0 ~ A7 |______| A0 ~ A7 |_______| A0 ~ A7 ||____ _____| |________| |________| |________| ADC0809采样过程通过时序的序列完成,当转换器满足转换条件时为转换器一个时钟等分周期“CLK R”,其转换过程又称为一次采样,转换结果产生在结束时取样“EOC”有效之后的下一次时钟上升沿ACTIVE EDGE时,由拨动设置开关的方式进行设定(ADDRESS A, B, C, OE)。
adc0809模数转换器用户手册
ADC0809模数转换芯片概述ADC0809是8位逐次逼近型A/D 转换器。
它由一个8路模拟开关、一个地址 锁存译码器、一个A/D 转换器和一个三态输出锁存器组成(见下图)。
多路开关 可选通8个模拟通道,允许8路模拟量分时输入,共用A/D 转换器进行转换。
三 态输出锁存器用于锁存A/D 转换完的数字量,当0E 端为高电平时,才可以从三 态输出锁存器取走转换完的数据。
ADC0809内部结构图ADC0809的工作原理图XX 是ADC0809的引脚图。
引脚功能说明如下:• IN0〜IN7: 8个输入通道的模拟输入端 • DO (2一8)〜D7 (2'1): 8位数字量输出端 • START :启动信号,加上正脉冲后,A/D 转换开始进行• ALE :地址锁存信号。
由低至高电平时,把三位地址信号送入通道号地址锁存器,并经译码器得到地址输出,以选择相应的模拟输入通道。
• EOC:转换结束信号,是芯片的输出信号。
转换开始后,EOC 信号变低: 转换结束时,EOC 返回高电平。
这个信号可以作为A/D 转换的状态信号 来査询,也可以直接用作中断请求信号。
• 0E :输出允许控制端(开数字星输出三态们)。
• CLK :时钟信号。
最高允许值为640kHzo地锁与码址存译8路二A/D____态 转输换----------------出器----------------存器▲ ▲IN3 EOCIN1DODiIN4 D2IN5D3D4D6 D7LVREFX*)VREFX-)8模 拟开 关• $EF+和%EF-:A/D 转换器的参考电压。
• Vcc-电源电斥。
由于是CMOS 芯片,允许电斥范鬧宽,可以是+5V 〜+15V 。
ADC0809两种封装形式8位模拟开关地址输入通道的关系见表XXo 模拟开关的作用和8选1的 CD4051作用相同表XX 8位模拟开关功能表ADDC ADDB ADDA 输入通道号 0 0 0 INO 0 0 1 INI 0 1 0 IN2 0 1 1 IN3 1 0 0 IN4 1 0 1 IN5 1 1 0 IN6 111IN7ADC0809芯片的转换速度在最高时钟频率卞为lOOus 左右。
adc0809的工作原理
adc0809的工作原理
ADC0809是一种8位串行模数转换器(Analog-to-Digital Converter,简称ADC),其工作原理如下:
1. 输出控制信号:当待转换的模拟信号准备好后,控制信号线将置为高电平,通知ADC开始转换过程。
2. 选择输入通道:通过输入通道选择信号来选择要进行转换的模拟信号源。
ADC0809有8个输入通道,因此需要使用3个输入引脚来选择通道。
3. 启动时钟信号:通过发送时钟信号来控制转换过程。
ADC0809需要一个时钟源来同步转换过程。
时钟信号的频率决定了转换速度。
4. 采样保持电路:在转换期间,输入信号将被采样并保持在一个样本保持电容中。
这个采样保持电路保证了转换期间输入信号的稳定性。
5. 双斜率积分器:ADC0809采用了双斜率积分器技术来进行模拟信号的转换。
在转换开始后,ADC开始对采样保持电容的电压进行积分,直到电压上升到参考电压。
6. 输出数据:一旦积分电压达到参考电压,ADC会将其状态固定,并将其转换为二进制数字输出。
输出数据以8位二进制形式呈现。
7. 转换结束信号:当转换完成后,ADC会通过标志信号线发出转换完成的信号。
这个信号可以被连接到微控制器或其他数字设备,以通知它们可以读取新的转换结果了。
通过以上步骤,ADC0809可以将模拟信号转换为数字信号,实现模拟到数字的转换功能。
ADC0809模数转换
ADC0809模数转换1. 实验目的与成效:模数转换在信号搜集中占有很重要的地位。
本实验采纳经典8位AD ――ADC080做一个0~5V 的电压表,并用数码管显示出来。
(说明:本实验板上的读AD 值端口跟数码管位选端口是分时复用的,呵呵,能够学习一下单片机端口分时复用)ADC0809简介:ADC0809是带有8位A/D 转换器、8路多路开关和微处置机兼容的操纵逻辑的CMOS 组件。
它是逐次逼近式A/D 转换器,能够和单片机直接接口。
(1). (1). ADC0809的内部逻辑结构由上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D 转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,许诺8路模拟量分时输入,共用A/D 转换器进行转换。
三态输出锁器用于锁存A/D 转换完的数字量,当OE 端为高电平常,才能够从三态输出锁存器取走转换完的数据。
(2). (2). 引脚结构IN0-IN7:8条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V ,假设信号过小,必需进行放大;输入的模拟量在转换进程中应该维持不变,如假设模拟量转变太快,那么需在输入前增加采样维持电路。
地址输入和操纵线:4条ALE 为地址锁存许诺输入线,高电平有效。
当ALE 线为高电平常,地址锁存与译码器将A ,B ,C 三条地址线的地址信号进行锁存,经译码后被8路模拟量开关8路A/D 转换器三态输出锁存器地址锁存与译码器IN0 I N1 I N2 I N3 I N4 I N5 I N6 I N7 A B C A LEVREF(+)VREF(-)OEEOCD0 D 1 D 2 D 3 D 4 D 5 D 6 D 7CLKST选中的通道的模拟量进转换器进行转换。
A,B和C为地址输入线,用于选通IN0-IN7上的一路模拟量输入。
通道选择表如下表所示。
C B A 选择的通道0 0 0 IN00 0 1 IN10 1 0 IN20 1 1 IN31 0 0 IN41 0 1 IN51 1 0 IN61 1 1 IN7数字量输出及操纵线:11条START为转换启动信号。
adc0809模数转换公式
adc0809模数转换公式ADC0809模数转换公式ADC0809是一种八位串行控制ADC(Analog-to-Digital Converter,模数转换器),它可以将模拟信号转换为数字信号。
ADC0809采用的是逐次比较法,最大转换速率为100kHz。
其输出数据格式为二进制补码形式。
模数转换公式一般为:V_{in} = \frac{D}{2^n} * V_{REF}V_{in}为输入模拟电压,D为ADC输出数字量,n为ADC的位数,V_{REF}为ADC的参考电压。
ADC0809工作原理ADC0809的工作原理基于逐次比较法,其主要部分有:比较器、运算放大器、8位移位寄存器、控制逻辑和输出寄存器。
当模拟信号被送入ADC0809时,首先通过比较器进行比较,如果比较器的一个输入端被送入一个参考电压,比较器的另一个输入端被送入输入模拟信号,比较器输出与输入端相连的开关被打开,运算放大器输出的电压跟随着比较器的输出变化。
在ADC0809的控制下,运算放大器会把比较器输出的电压值进行增益调整并送入8位移位寄存器。
这个过程可以理解为,ADC0809逐位地进行比较,并将每位的比较结果转换成二进制码存在寄存器中。
当所有位的比较和转换完成后,ADC0809会将二进制码输出到外部的数据总线上,从而提供给后面的数字电路进行处理。
ADC0809的典型应用场景ADC0809主要用于需要将模拟信号转换成数字信号的场合。
下面列举一些典型的应用场景:1.嵌入式系统中,ADC0809可以将传感器测量到的模拟信号转换成数字信号,为嵌入式系统提供数字化的数据。
2.工业自动化领域中,ADC0809可以将工控设备传感器采集的模拟信号转换成数字信号,为人机界面提供数字化的数据。
3.实验室仪器控制中,ADC0809可以将各类传感器测量到的模拟信号转换成数字信号,用于仪器控制和数据处理。
模数转换器ADC0809应用原理
精品文档AD0809应用原理--很全面的资料1.0809 的芯片说明:ADC0809是带有 8 位 A/D 转换器、 8 路多路开关以及微处理机兼容的控制逻辑的 CMOS 组件。
它是逐次逼近式 A/D 转换器,可以和单片机直接接口。
(1) ADC0809的内部逻辑结构由上图可知, ADC0809由一个 8 路模拟开关、一个地址锁存与译码器、一个A/D 转换器和一个三态输出锁存器组成。
多路开关可选通8 个模拟通道,允许8 路模拟量分时输入,共用 A/D 转换器进行转换。
三态输出锁器用于锁存A/D 转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
( 2).引脚结构IN0- IN7:8 条模拟量输入通道ADC0809对输入模拟量要求:信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线: 4 条ALE为地址锁存允许输入线,高电平有效。
当ALE线为高电平时,地址锁存与译码器将 A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。
A,B 和 C 为地址输入线,用于选通 IN0-IN7 上的一路模拟量输入。
通道选择表如下表所示。
C B A 选择的通道000IN0001IN1010IN2011IN3100IN4101IN5110IN6111IN7数字量输出及控制线: 11 条ST 为转换启动信号。
当 ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行 A/ D 转换;在转换期间, ST应保持低电平。
EOC为转换结束信号。
当 EOC为高电平时,表明转换结束;否则,表明正在进行 A/D 转换。
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。
OE= 1,输出转换得到的数据; OE=0,输出数据线呈高阻状态。
D7- D0为数字量输出线。
ADC0809模数转换器的使用详解与程序
值得一提的是,我按照上面电路,把 AD 的 ABC 三脚共同接接地时,AD0809088 始终输 出高电平,最后当我把 BC 共同接地,在程序中给 A 一个 0,则 AD0809 正常运行,有输出, 并且发现当所给的时钟频率越低, 最高精度的那位输出越稳定, 具体参数范围从芯片资料里 有详细介绍,不过十全英文,专业词汇哦。哈哈 现将程序记录如下: 完整的程序从这里下载: /ziliao/file/0809c51x.rar
ADC0809 模数转换器的使用详解与程序
带我们的王老师刚评上硕导了,下学期开始带研究生了。 从他那里了解到每做一次实验或者实践,应该把它用规范的格式记录下来,一来自己可以 日后查看,二来同学间可以相互交流,共通过进步,甚为必要。现将本次实验记录如下。
实验 名称:根据光强控制外围器件的通断。 实验原理;使用 AD 芯片将太阳能电池产生的光生伏打电压转化为数字信号,再通过单片 机处理后,在数码管上显示电压,同时根据设定电压伐值,控制外围器件的通断。 实验所需的设备:51 单片机烧写器一个,电脑一台,数字式示波器一个,数字式万用表一 个
// //
开始转换 关地址//等来自 eoc 变为 1//
打开输出
temp=P1; oe=0; //
//
取 p1 到 p3 关输出
temp=temp*50; temp=temp/256;
qian=temp/1000; bai=temp%1000/100; shi=temp%100/10; ge=temp%10;
编辑本段转换方法
模数转换器
模数转换过程包括量化和编码。量化是将模拟信号量程分成许多离散量级,并确定输 入信号所属的量级。编码是对每一量级分配唯一的数字码,并确定与输入信号相对应 的代码。最普通的码制是二进制,它有 2n 个量级( n 为位数) , 可依次逐个编号。模 数转换的方法很多,从转换原理来分可分为直接法和间接法两大类。 直接法是直接 将电压转换成数字量。它用数模网络输出的一套基准电压,从高位起逐位与被测电压 反复比较,直到二者达到或接近平衡(见图) 。控制逻辑能实现对分搜索的控制,其 比较方法如同天平称重。先使二进位制数的最高位 Dn-1 = 1 ,经数模转换后得到一个 整个量程一半的模拟电压 VS ,与输入电压 Vin 相比较,若 V in> VS , 则保留这一位;若 V in< V in ,则 Dn-1 = 0 。然后使下一位 Dn -2 = 1, 与上一次的结果一起经数模转换后与 V in 相比较 , 重复这一过程,直到使 D 0 = 1 ,再与 V in 相比较 , 由 V in> VS 还是 V in< V 来 决定是否保留这一位。经过 n 次比较后, n 位寄存器的状态即为转换后的数据。这种 直接逐位比较型(又称反馈比较型)转换器是一种高速的数模转换电路,转换精度很 高,但对干扰的抑制能力较差,常用提高数据放大器性能的方法来弥补。它在计算机
ADC0809模数转换实验
ADC0809模数转换实验ADC0809是一种八位串行型CMOS模数转换器,它将模拟信号转换为数字信号。
在本次实验中,我们将探究ADC0809的工作原理,并使用其进行模数转换。
一、实验材料1. ADC0809芯片2. Arduino开发板3. 可变电阻4. 电容5. 杜邦线二、实验原理1.模数转换原理模数转换是将模拟信号转换为数字信号的过程。
模拟信号是指在连续的时间内,信号的所有可能取值都有可能发生的信号。
数字信号是模拟信号经过一定的采样和量化处理后得到的离散信号。
模数转换的基本原理是将模拟信号转化为数字信号。
数字信号的特点是离散的,可以方便的进行计算和存储。
模数转换一般包括两个步骤:采样和量化。
采样是指将连续时间内的模拟信号转换为离散的时间点上的信号,采用的采样定理是:“采样频率必须大于等于原信号中最高频率成分的两倍”。
量化是指将连续幅度的信号转换为一组离散的数值。
采用比较法,对模拟信号的幅度进行比较,将其与参考电平进行比较,将其转换为数字信号。
ADC0809是一种CMOS串行型八位模数转换器,由时序控制逻辑、数据寄存器、比较器、参考电压源和采样保持电路等部分组成。
ADC0809的详细结构如下图所示:ADC0809的基本原理是将模拟信号通过采样、保持和比较等操作,将其转换为等效的数字信号输出,输出的数据位数为8位。
3. 实验任务本次实验的任务是使用ADC0809将可变电阻的模拟信号转换为数字信号,并通过Arduino开发板来输出这个转换结果。
具体实验步骤如下:三、实验步骤1.搭建实验电路在Arduino开发环境中,编写以下代码: int cs=8;int rd=9;int wr=10;int intr=11;int clock=13;int data=12;int value=0;void setup(){pinMode(cs,OUTPUT);pinMode(rd,OUTPUT);pinMode(wr,OUTPUT);pinMode(intr,INPUT);pinMode(clock,OUTPUT);pinMode(data,INPUT);Serial.begin(9600);}void loop(){digitalWrite(cs,LOW);digitalWrite(rd,HIGH);digitalWrite(wr,HIGH);while(digitalRead(intr));for(int i=0;i<8;i++){digitalWrite(clock,HIGH);value=value<<1|digitalRead(data);digitalWrite(clock,LOW);}Serial.println(value);}将Arduino板上的程序烧录到开发板上,然后调节可变电阻,观察串口输出的数值变化。
模数转换ADC0809实验
微机原理与接口实验报告实验名称:模数转换ADC0809实验班级:学号:姓名:指导老师:实验报告要求一.实验目的1.掌握ADC0809接口电路与微机的硬件电路连接方法。
2.掌握A/DADC0809接口电路的程序设计和调试方法。
二.实验仪器1.微型计算机一台。
DVCC-5286JH型微机原理与接口实验系统,排线、导线若干。
三.实验原理1、实验要求本实验采用 ADC0809做A/D 转换实验。
ADC0809 是一种8路模拟输入、8位数字输出的逐次逼近法A/D器件,转换时间约100us,转换精度为±1/512,适用于多路数据采集系统。
ADC0809片内有三态输出的数据锁存器,故可以与8088微机总线直接接口。
ADC0809的CLK信号接CLK=2.385MHZ,基准电压Vref(+)接Vcc。
一般在实际应用系统中应该精确+5V,以提高转换精度,ADC0809片选信号0809CS和/IOW、/IOR经逻辑组合后,去控制ADC0809的ALE、START、ENABLE信号。
ADC0809的转换结束信号EOC 未接,如果以中断方式实现数据采集,需将EOC信号线接至中断控制器8259A的中断源输入通道。
本实验以延时方式等待A/D转换结束,ADC0809的通道号选择线ADD-A、ADD-B、ADD-C 接系统数据线的低3位,因此ADC0809的8个通道值地址分别为00H、01H、02H、03H、04H、05H 、06H、07H。
调节电位器W1,以改变模拟电压值,显示器上会不断显示新的A/D转换结果。
用ADC0809做A/D转换,其模拟量与数字量对应关系的典型值为+5V-FFH,2.5V-80H,0V-00H。
2、实验电路原理及连接3、实验程序流程图三.实验源程序CODE SEGMENTASSUME CS:CODE ADPORT E QU 0010hORG 1000HSTART: JMP ADCONTORL ADCONTORL:CALL FORMAT ADCON: MOV AX,00MOV DX,ADPORTOUT DX,ALMOV CX,0500H DELAY: LOOP DELAYMOV DX,ADPORTIN AL,DXCALL CONVERSCALL DISPJMP ADCON CONVERS:MOV AH,ALAND AL,0FHMOV BX,077AHMOV DS:[BX],ALINC BXMOV AL,AHAND AL,0F0HMOV CL,04HSHR AL,CLMOV DS:[BX],ALRETdisp: mov dx,077Fhmov ah,20hdisp0: mov cx,00ffhmov bx,dxmov bl,ds:[bx]mov bh,0hpush dxmov dx,0ff22hmov al,cs:[bx+1060h]OUT DX,ALmov dx,0ff21hmov al,ahOUT DX,ALdisp1: loop disp1pop dxdec dxshr ah,01hjnz disp0mov dx,0ff22hmov al,0ffhOUT DX,ALretdata1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0ah db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfhFORMAT: MOV BX,0MOV WORD PTR DS:[BX+077AH],0000HADD BX,2MOV WORD PTR DS:[BX+077AH],0009HADD BX,2MOV WORD PTR DS:[BX+077AH],0008HRETCODE ENDSEND START四.实验结果分析取一个中间结果:58五.心得体会通过本次实验掌握了ADC0809接口电路与微机的硬件电路连接方法、A/DADC0809接口电路的程序设计和调试方法、加深理解逐次逼近法模数转换器的特征和工作原理以及掌握ADC0809的接口方法,以及A/D输入程序的设计和调试方法。
ADC0809数模转换程序
/******************** //版权和版本声明* 文件标识:* 摘要:* 当前版本:1.0* 作者:输入作者(或修改者)名字* 完成日期:2013年3月25日**********************************/#include <at89x52.h> //头文件unsigned char code Tab[11]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,}; unsigned char dat[]={0,0,0,0};unsigned char adc;unsigned int i,j,k;/***********ADC0808************************/sbit LED = P2^3;sbit ST=P2^4; //定义ADC0809 位sbit EOC=P2^5;sbit OE=P2^6;sbit CLK =P2^7;/************ 数码管位码****************/sbit wei1=P3^7; //定义数码管为码位sbit wei2=P3^6;sbit wei3=P3^5;sbit wei4=P3^4;/***************************** 函数名称:延时函数* 函数功能:延时函数* 输入/输出参数:* 返回值:***************************************/ void delay(unsigned int xms) //延时及clk 0809时钟{for(i=0;i<xms;i++){for(j=0;j<110;j++){CLK = ~CLK;}}}/***************************** 函数名称:显示函数* 函数功能:* 输入/输出参数:* 返回值:***************************************/ void xianshi(){// 分离dat[0]=k/10000;//千dat[1]=k%10000/1000;//百dat[2]=k%10000%1000/100;//十dat[3]=k%10000%1000%100/10;//个//显示P1=Tab[dat[3]];//送段码wei1=0; //送位码delay(1); //延时P1=0x00; //关断wei1=1; //关断P1=Tab[dat[2]];//送段码wei2=0; //送位码delay(1); //延时P1=0x00; //关断wei2=1; //关断P1=Tab[dat[1]];//送段码wei3=0; //送位码delay(1); //延时P1=0x00; //关断wei3=1; //关断P1=Tab[dat[0]];//送段码wei4=0; //送位码delay(1); //延时P1=0x00; //关断wei4=1; //关断}/***************************** 函数名称:主函数* 函数功能:* 输入/输出参数:* 返回值:***************************************/void main(){while (1){xianshi();ST=0;ST=1;ST=0;if(EOC==0){OE=1;}adc=P0; //值传送k=adc*39; //数据处理}}/*************************************************/注意ADC0809与单片机IO口的链接位置关系CAD0809的脉冲信号采用软件控制void delay(unsigned int xms) //延时及clk 0809时钟{for(i=0;i<xms;i++){for(j=0;j<110;j++){CLK = ~CLK;}}}。
ADC0809模数转换技术
附页:实验线路图:编译程序:源程序代码:1 汇编语言程序清单CS8279C EQU 0FFFFHCS8279D EQU 0FFFEHCS0809 EQU 0A007HADRESULT EQU 3AHADBAK EQU 3BH; DISPLAY BUFF 30H(low) ~ 35H (high)ORG 0000HMAIN:MOV SP, #60HACALL INI8279MOV ADRESULT, #00HMOV ADBAK, #0FFHMAINLP:ACALL DISPLAYACALL EXINT1SJMP MAINLPEXINT1:MOV DPTR,#CS0809MOVX @DPTR,A ;START CONVERTMOV R6,#30DLY: NOPNOPNOPDJNZ R6,DLYMOVX A,@DPTR ; READ CONVERT RESULTMOV ADRESULT,ARET; subprogram name :INI8279; function: initial 8279 as 8 digtal left in ALE/10; input parameter : none; output parameter: none; others 8279 command port address 0FFE9H;8279 data port address 0FFE8H; the subprogram affect A、 DPTRINI8279:MOV DPTR,#CS8279CMOV A,#0DDH ; First set all display RAM as 0FFHMOVX @DPTR,AIL0:MOVX A,@DPTR ;wait clearJB ACC.7,IL0LCALL DLT ; WAIT 400MSLCALL DLTMOV A,#0D1H ; clear all display RAM as 00HMOVX @DPTR,AIL1:MOVX A,@DPTRJB ACC.7,IL1LCALL DLTLCALL DLTMOV A,#00H ;key/display mode command word 000DDKKK MOVX @DPTR,A ;8 char left inMOV A,#2AH ; ALE/10MOVX @DPTR,ARETDLT: MOV R7,#200 ; Delay 400 ms(6M)DLT1: MOV R6,#250 ; 12TDLT2: DJNZ R6,DLT2 ; 24TDJNZ R7,DLT1RET; NAME:DISPLAY 显示子程序DISPLAY:MOV A,ADRESULTCJNE A,ADBAK,REDISPSJMP DSPEXITREDISP:MOV ADBAK, ADRESULTACALL CONVBCDMOV DPTR,#CS8279CMOV A,#90H ;write display RAM commandMOVX @DPTR,AMOV R7,#6MOV DPTR,#CS8279DMOV R0,#30HDISPL1:PUSH DPLPUSH DPHMOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRPOP DPHPOP DPLMOVX @DPTR,AINC R0DJNZ R7,DISPL1DSPEXIT:RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB 0FFH,00H,73H ; 全亮;全灭;PConvert ADRESULT to BCD; send to 30H ~ 35H locationCONVBCD:MOV A,ADRESULTMOV B,#100DIV ABMOV 32H,AMOV A,BMOV B,#10DIV ABMOV 31H,AMOV A,BMOV 30H,AMOV A,32HCJNE A,#00,CONB1MOV A,31HCJNE A,#00,CONB2MOV R7,#5SJMP CONB3CONB2:MOV R7,#4SJMP CONB3CONB1:MOV R7,#3CONB3:MOV R0,#35HMOV A,#0BHCONBLP:MOV @R0,ADEC R0DJNZ R7,CONBLPRETEND ; program end2 C 语言程序清单#include <AT89X51.H>#include <absacc.h>#define uchar unsigned char#define COM XBYTE[0xffff] // 8279命令端口#define DAT XBYTE[0xfffe] // 8279数据端口#define CS0809 XBYTE[0xA007] // 通道7#define adresult DBYTE[0x3A] // 用于存放A/D转换结果#define adbak DBYTE[0x3B] // 备份A/D转换结果#define hun DBYTE[0x3C] // A/D转换结果的百位#define ten DBYTE[0x3D] // A/D转换结果的十位#define one DBYTE[0x3E] // A/D转换结果的个位//共阴数码管段码:0~9,全亮,全灭,Puchar code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0xFF,0x00,0x73};void ini8279(){ COM=0xD1; //8279显示RAM和键盘RAM清零do{ACC=COM;}while(CY); //等待清除完毕//显示方式设为8个字符左边输入COM=0; //键盘工作方式设为编码扫描键盘方式,双键互锁COM=0x2A; // 外部信号的频率是1MHz,需要进行10分频}void exint1(void){uchar i;CS0809=0; //启动A/D转换for(i=19;i>0;i--); //延时100usadresult=CS0809; //读取A/D转换结果值}void convbcd(void){hun=adresult/100; //求得百位ten=adresult%100/10; //求得十位one=adresult%10; //求得个位if(hun==0) //如果百位为0,则该位对应的数码管灭 { hun=11;if(ten==0) //如果十位为0,则该位对应的数码管灭 ten=11;}}void display(void){if(adresult!=adbak){adbak=adresult;convbcd();COM=0x90; //写显示RAM命令DAT=tab[one]; //送个位的段码到显示RAM DAT=tab[ten]; //送十位的段码到显示RAM DAT=tab[hun]; //送百位的段码到显示RAM DAT=tab[11]; //送全灭的段码到显示RAM DAT=tab[11];DAT=tab[11];}}void main(void){SP=0x60;ini8279(); //初始化8279adresult=0;adbak=0xff;do{display(); //显示A/D转换结果值exint1(); //执行一次A/D转换}while(1);}。
ADC0809模数转换与显示
ADC0809模数转换与显示ADC0809模数转换与显示ADC0809模数转换与显示(第四次实验)华侨大学08自动化实验目的:1. 掌握ADC的使用控制方法。
实验内容:基本要求:设计一程序采集ADC0809第3通道的电压值,将其转换为数字量,并在数码管上显示;5V显示为255, 0V显示为000。
扩展要求:将转换结果以两位小数精确显示,5V显示5.00,2.3V显示2.30,依次推广之。
一、实验原理图:二、程序流程图:1开始定时器初始化,对ADC0809初始化,选择通道3 给START 一个脉冲,启动信号输入端判断EOC是否为0 N Y 将OE置1 读P3口数字数字处理,调用显示OE置0 返回三、源程序1、基本要求:OE EQU P1.0 MOV SP,#60H EOC EQU P1.1 MOV TMOD,#02H ST EQU P1.2 MOV TH0,#14H CLK EQU P1.3 MOV TL0,#00H SHU EQU 30H MOV IE,#82H TEMP EQU 31H SETB TR0 ORG 0000H MOV A,#3FH AJMP MAIN MOV P1,A ORG 000BHMOV SHU,#0 CPL CLK SCAN:RETI CLR STORG 0100HSETB STMAIN:CLR ST2M0: JNB EOC,M0SETB OEMOV A,#0FFHMOV P3,A M1: MOV A,P3 MOV SHU,A LCALL CHANGE LCALL DISPCLR OEAJMP SCAN DISP:MOV R0,#TEMP MOV R2,#00H DISP1:MOV A,R2 MOV DPTR,#TAB1 MOVC A,@A+DPTR MOV P2,A MOV A,@R0 MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,A MOV R5,#5ACALL DELAY INC R0INC R22、扩展部分:OE EQU P1.0EOC EQU P1.1 ST EQU P1.2 CLK EQU P1.3 SHU EQU 30H TEMP EQU 20H ORG 0000H AJMP MAIN ORG 000BH CPL CLK RETIORG 0100HMAIN:MOV SP,#60HCJNE R2,#3,DISP1 MOV P0,#00H RETCHANGE:MOV A,SHU MOV B,#100 DIV AB MOV TEMP,A MOV A,B MOV B,#10 DIV ABMOV TEMP+1,A MOV TEMP+2,BRETDELAY: MOV R6,#1 DELAY0:MOV R7,#100 DJNZ R7,$ DJNZ R6,DELAY0 DJNZ R5,DELAY RET TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHTAB1: DB 0FDH,0FBH,0F7H ENDMOV TMOD,#02H MOV TH0,#14H MOV TL0,#00H MOV IE,#82H SETB TR0 MOV A,#3FH MOV P1,AMOV SHU,#0SCAN:CLR ST SETB STCLR STM0: JNB EOC,M03SETB OEMOV A,#0FFHMOV P3,AM1: MOV A,P3 MOV SHU,A LCALL HUAN LCALL DISP CLR OE AJMP SCANDISP:MOV R0,#TEMPMOV R2,#00H DISP1:MOV A,R2 MOV DPTR,#TAB1 MOVC A,@A+DPTR MOV P2,A MOV A,@R0 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P0,A MOV R5,#5 ACALL DELAY INC R0INC R2CJNE R2,#3,DISP1 MOV P0,#00H RET HUAN: MOV A,SHU MOV B,#51 DIV ABADD A,#10MOV TEMP,A MOV A,B MOV B,#2 DIV ABMOV B,#10 MUL AB MOV B,#25 DIV AB MOV TEMP+1,AMOV A,B MOV B,#2 DIV AB MOV B,#10 MUL AB MOV B,#25 DIV AB MOV TEMP+2,ARETDELAY: MOV R6,#1 DELAY0:MOV R7,#100 DJNZ R7,$ DJNZ R6,DELAY0 DJNZ R5,DELAY RET TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0BFH,86H,0D BH,0CFH,0E6H ,0EDH,0FDH,87H,0FFH,0EFHTAB1: DB 0FDH,0FBH,0F7H END4s(“left_con”);。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CLK = ~CLK;
}
}
}
/****************************
*函数名称:显示函数
*函数功能:
*输入/输出参数:
*返回值:
***************************************/
void xianshi()
{
//分离
dat[0]=k/10000;//千
P1=Tab[dat[2]];//送段码
wei2=0;//送位码
delay(1); //延时
P1=0x00; //关断
wei2=1; //关断
P1=Tab[dat[1]];//送段码
wei3=0;//送位码
delay(1Байду номын сангаас; //延时
P1=0x00; //关断
wei3=1; //关断
P1=Tab[dat[0]];//送段码
{
while (1)
{
xianshi();
ST=0;
ST=1;
ST=0;
if(EOC==0)
{
OE=1;
}
adc=P0;//值传送
k=adc*39;//数据处理
}
}
/*************************************************/
注意ADC0809与单片机IO口的链接位置关系
dat[1]=k%10000/1000;//百
dat[2]=k%10000%1000/100;//十
dat[3]=k%10000%1000%100/10;//个
//显示
P1=Tab[dat[3]];//送段码
wei1=0;//送位码
delay(1); //延时
P1=0x00; //关断
wei1=1; //关断
CAD0809的脉冲信号采用软件控制
void delay(unsigned int xms)//延时及clk 0809时钟
{
for(i=0;i<xms;i++)
{
for(j=0;j<110;j++)
{
CLK = ~CLK;
}
}
}
unsigned char dat[]={0,0,0,0};
unsigned char adc;
unsigned int i,j,k;
/***********ADC0808************************/sbit LED = P2^3;
sbit ST=P2^4;//定义ADC0809位
*函数名称:延时函数
*函数功能:延时函数
*输入/输出参数:
*返回值:
***************************************/
void delay(unsigned int xms)//延时及clk 0809时钟
{
for(i=0;i<xms;i++)
{
for(j=0;j<110;j++)
/******************** //版权和版本声明
*文件标识:
*摘要:
*当前版本:1.0
*作者:输入作者(或修改者)名字
*完成日期:2013年3月25日
**********************************/
#include <at89x52.h> //头文件
unsigned char code Tab[11]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
wei4=0;//送位码
delay(1); //延时
P1=0x00; //关断
wei4=1;//关断
}
/****************************
*函数名称:主函数
*函数功能:
*输入/输出参数:
*返回值:
***************************************/
void main()
sbit EOC=P2^5;
sbit OE=P2^6;
sbit CLK =P2^7;
/************数码管位码****************/
sbit wei1=P3^7;//定义数码管为码位
sbit wei2=P3^6;
sbit wei3=P3^5;
sbit wei4=P3^4;
/****************************