AD转换器ADC0832程序
常用ADDA芯片的使用并行ADC0809串行ADC0832串行PCF8591docppt
![常用ADDA芯片的使用并行ADC0809串行ADC0832串行PCF8591docppt](https://img.taocdn.com/s3/m/741aac27cbaedd3383c4bb4cf7ec4afe04a1b1b3.png)
;接收第二字节
CLR RI
;清接收中断标志
MOV A,SBUF
;读第二字节数据
ANL A,#0FH
;第二字节屏蔽高4位
ANL B,#0FOH
;第一字节屏蔽低4位
ORL A,B
;组合
SWAP A
;高低4位互换,组成正确的A/D数据
MOV @R0,A
;存A/D数据
INC R0
;指向下一存储单元
MOV A,#0EH
⑵ 查询方式
工作在查询方式时,0809 EOC端可不必通过反相器与或相连,
直接与80C51 P1口或P3口中任一端线相连。
【例9-13】 图9-20中,用P1.0直接与0809 EOC端相连,试用查
询方式编制程序,对8路模拟信号依次A/D转换一次,并把结果
存入以40H为首址的内RAM中。
解:
MAIN: MOV R1,#40H
⑴ IN0~IN7:8路模拟信号输入端。 ⑵ C、B、A:8路模拟信号转换选择端。
与低8位地址中A0~A2连接。由A0~A2地址000~111选择IN0~IN7八路 A/D通道。
⑶ CLK:外部时钟输入端。 时钟频率高,A/D转换速度快。允许范围为10~1280KHz 。 通常由80C51 ALE端直接或分频后与0809 CLK端相连接。
; ;延时68S:2机周×17=34机周,2S×34=68S
MOVX A,@DPTR ;读A/D值
MOV @R1,A
;存A/D值
INC DPTR
;修正通道地址
INC R1
;修正数据区地址
DJNZ R7,LOOP ;判8路采集完否?未完继续
RET
;8路采集完毕,返回
ADC0832驱动子程序
![ADC0832驱动子程序](https://img.taocdn.com/s3/m/32ece98dcaaedd3382c4d35f.png)
1.ADC0832驱动子程序#include <REGX51.H>#include <intrins.h> //常用汇编指令引用。
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98}; //共阳代码//接口电路sbit AD0832_CS = P3^5ﻩ; //片选信号sbit AD0832_CLK = P3^6; //时钟接口sbit AD0832_DI = P3^7; //数据接口void main( void){unsigned char i=0 , x =0 , y = 0 ;unsigned int temp=0;while(1){//时钟12Mhz, 整个转换时间为224us//使用芯片准备(参考PDF时序图)ﻩAD0832_CLK = 0 ; //时钟置低平ﻩ AD0832_DI = 1 ; //开始信号为高电平ﻩ AD0832_CS = 0;//片选信号置低,启动AD转换芯片//输入开始信号(构成一个正脉冲)_nop_();ﻩAD0832_CLK = 1 ; //时钟上升沿,输入开始信号_nop_();ﻩ AD0832_CLK = 0 ; //时钟下降沿//模拟信号输入模式选择(1:单模信号,0:双模差分信号)AD0832_DI = 1 ;ﻩ _nop_();ﻩ AD0832_CLK = 1 ; //时钟上升沿,输入开始信号ﻩ _nop_();AD0832_CLK = 0 ; //时钟下降沿//模拟信号输入通道选择(1:通道CH1,0:通道CH0)AD0832_DI = 0 ; //选择通道0_nop_();ﻩAD0832_CLK = 1 ; //时钟上升沿,输入开始信号_nop_();ﻩ AD0832_CLK = 0 ; //时钟下降沿///////////////////////////////////////////AD0832_DI = 1; //数据线置高,准备接收数据for(i = 0 ; i<8 ; i++)ﻩ //从高位移入数据{ﻩ AD0832_CLK = 1 ;_nop_();AD0832_CLK = 0 ; //时钟下降沿,AD0832输出数据,高位(MSB)先x = x<<1;ﻩﻩﻩ//数据左移位,补0if(AD0832_DI ==1)ﻩx = x | 0x01; //如果数据为“1”,移入1,} ﻩﻩﻩﻩ //如果数据为“0”,移入0,for(i = 0 ; i<8 ; i++)ﻩ //从低位移入数据ﻩ{y = y>>1; ﻩ//数据左移位,补0if(AD0832_DI==1)ﻩy =y| 0x80;ﻩ //如果数据为“1”,移入1,ﻩﻩﻩ//如果数据为“0”,移入0ﻩ AD0832_CLK = 1 ;_nop_();ﻩAD0832_CLK = 0 ; //时钟下降沿,AD0832输出数据,高位(MSB)先}//数据线置高,释放总线,完成一次转换AD0832_CLK = 1 ;ﻩ AD0832_DI = 1 ;AD0832_CS = 1 ;ﻩﻩ if(x==y) //输出{ﻩ temp = x *2 ; //(参考电压为5V,8位。
adc0832模块程序
![adc0832模块程序](https://img.taocdn.com/s3/m/0fbba8427ed5360cba1aa8114431b90d6c85891c.png)
adc0832模块程序/* ADC0832差分00工作方式*/#include#include"adc0832.h"#include"1602.h"sbit ADC_CS =P2^0;sbit ADC_CLK=P2^1;sbit ADC_DO =P2^2;sbit ADC_DI =P2^3;unsigned char adval;unsigned char ReadADC(void) //把模拟电压值转换成8位二进制数并返回{unsigned char i,ch,bb,cc,dd;ch=0;ADC_CS=0;ADC_DO=0;//片选,DO为高阻态for(i=0;i<10;i++){;}ADC_CLK=0;delay(2);ADC_DI=1;ADC_CLK=1;delay(2); //第一个脉冲,起始位ADC_CLK=0;delay(2);ADC_DI=1;ADC_CLK=1;delay(2); //第二个脉冲,DI=1表示双通道单极性输入ADC_CLK=0;delay(2);ADC_DI=1;ADC_CLK=1;delay(2); //第三个脉冲,DI=1表示选择通道1(CH2)ADC_DI=0;ADC_DO=1;//DI转为高阻态,DO脱离高阻态为输出数据作准备ADC_CLK=1;delay(2);ADC_CLK=0;delay(2);//经实验,这里加一个脉冲AD便能正确读出数据,//不加的话读出的数据少一位(最低位d0读不出?for(i=0;i<8;i++){ADC_CLK=1;delay(2);ADC_CLK=0;delay(2);ch=(ch<<1)|ADC_DO;//在每个脉冲的下降沿DO输出一位数据,最终ch为8位二进制数}ADC_CS=1;//取消片选,一个转换周期结束adval=ch;returnadval;}。
51单片机驱动ADC0832模数转换程序lcd1602显示
![51单片机驱动ADC0832模数转换程序lcd1602显示](https://img.taocdn.com/s3/m/1b4b1401e2bd960590c677d6.png)
51单片机驱动ADC0832模数转换程序-lcd1602显示/*这个芯应用不多*/#include ;#define uchar unsigned char#define uint unsigned intuchar Chan0Value,Chan1Value;sbit RS=P1^0; //1602各控制脚sbit RW=P1^1;sbit EN=P1^2;sbit Cs0832= P2^0;//0832各控制脚sbit Clk0832= P3^6;sbit Di0832= P3^7;sbit Do0832= P3^7;void delay1ms(unsigned int ms)//延时1毫秒(不够精确的){int i,j;for(i=0;i;>;i;}for(i=0;i<8;i++)//从低到高取一次数{if(Do0832) Dat2|=0x01<<i;Clk0832=1; //下降沿有效Clk0832=0;}Cs0832=1;Di0832=1;Clk0832=1; //数据读取完成,释放所有数据线if(Dat1==Dat2)return Dat1; //校验两次数相等,输出}/*本程序与其他一般程序最大的不同就是要读两次一次从最高位到最低位,一次从最低位到最高位,两次所读值相等即为正常,可以输出*//******************************LCD1602*********** ***************************//*************************lcd1602程序**************************/void wr_com(unsigned char com)//写指令// { delay1ms(1);RS=0;RW=0;EN=0;P0=com;delay1ms(1);EN=1;delay1ms(1);EN=0;}void wr_dat(unsigned char dat)//写数据// { delay1ms(1);RS=1;RW=0;EN=0;P0=dat;delay1ms(1);EN=1;delay1ms(1);EN=0;}void lcd_init()//初始化设置//{delay1ms(15);wr_com(0x38);delay1ms(5);wr_com(0x80);delay1ms(5);wr_com(0x01);delay1ms(5);wr_com(0x06);delay1ms(5);wr_com(0x0c);delay1ms(5);}void writevalue(uchar add,uchar dat) {wr_com(0x80+add);wr_dat(dat);}void zifuchuan(uchar *ch){while(*ch!=0)wr_dat(*ch++);delay1ms(20);}void main(void){lcd_init();while(1){Chan0Value=GetValue0832(0);delay1ms(100);Chan1Value=GetValue0832(1);wr_com(0x80);zifuchuan("Chanal 0:");writevalue(10,Chan0Value/100+0x30);writevalue(11,Chan0Value%100/10+0x30);writevalue(12,Chan0Value%100%10+0x30);wr_com(0x80+0x40);zifuchuan("Chanal 1:");writevalue(0x40+10,Chan1Value/100+0x30);writevalue(0x40+11,Chan1Value%100/10+0x30); writevalue(0x40+12,Chan1Value%100%10+0x30); delay1ms(1000);}}/*此程序只为调通ADC0832,没有对电压值进行转换要想得到准确电压值,请把Chan0Value和Chan1Value 的值乘以5再除以255即可。
adc0832数字电压表(程序+仿真图)
![adc0832数字电压表(程序+仿真图)](https://img.taocdn.com/s3/m/e994d1b8fc4ffe473268aba2.png)
adc0832数字电压表(程序+仿真图)仿真图:/*********************************包含头文件********************************/#include <reg51.h>#include <intrins.h>/*********************************端口定义**********************************/sbit CS = P3^5;sbit Clk = P3^3;sbit DATI = P3^4;sbit DATO = P3^4;sbit P20=P2^0 ;/*******************************定义全局变量********************************/unsigned char dat = 0x00; //AD值unsigned char count = 0x00; //定时器计数unsigned char CH; //通道变量unsigned char dis[] = {0x00, 0x00, 0x00}; //显示数值/*******************************共阳LED 段码表*******************************/unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};char code tablewe[]={ 0xfd,0xfb,0xf7,0xef,0xdf,0xfe };/**************************************** ************************************函数功能:AD转换子程序入口参数:CH出口参数:dat***************************************** ***********************************/unsigned char adc0832(unsigned char CH){unsigned char i,test,adval;adval = 0x00;test = 0x00;Clk = 0; //初始化DATI = 1;_nop_();CS = 0;_nop_();Clk = 1;_nop_();if ( CH == 0x00 ) //通道选择{Clk = 0;DATI = 1; //通道0的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 0; //通道0的第二位_nop_();Clk = 1;_nop_();}else{Clk = 0;DATI = 1; //通道1的第一位_nop_();Clk = 1;_nop_();Clk = 0;DATI = 1; //通道1的第二位_nop_();Clk = 1;_nop_();}Clk = 0;DATI = 1;for( i = 0;i < 8;i++ ) //读取前8位的值{_nop_();adval <<= 1;Clk = 1;_nop_();Clk = 0;if (DATO)adval |= 0x01;elseadval |= 0x00;}for (i = 0; i < 8; i++) //读取后8位的值{test >>= 1;if (DATO)test |= 0x80;elsetest |= 0x00;_nop_();Clk = 1;_nop_();Clk = 0;}if (adval == test) //比较前8位与后8位的值,如果不相同舍去。
AD0832 使用
![AD0832 使用](https://img.taocdn.com/s3/m/353f9cf77c1cfad6195fa7dd.png)
第九章A/D和D/A转换器接口9.1 MCS-51单片机与D/A转换器的接口和应用9.1.1 典型D/A转换器芯片DAC0832DAC0832是一个8位D/A转换器芯片,单电源供电,从+5V~+15V均可正常工作,基准电压的范围为±10V,电流建立时间为1µs,CMOS工艺,低功耗20mm。
其内部结构如图9.1所示,它由1个8位输入寄存器、1个8位DAC寄存器和1个8位D/A转换器组成和引脚排列如图9.2所示。
(7)Iout2——电流输出“1”。
当数据为全“1”时,输出电流最大;为全“0”时输出电流最小。
(8)Iout2——电流输出“2”。
DAC转换器的特性之一是:Iout1+Iout2=常数。
(9)Rfb——反馈电阻端既运算放大器的反馈电阻端,电阻(15KΩ)已固化在芯片中。
因为DAC0832是电流输出型D/A转换器,为得到电压的转换输出,使用时需在两个电流输出端接运算放大器,Rfb 即为运算放大器的反馈电阻,运算放大器的接法如图9.3所示。
(10)Vref——基准电压,是外加高精度电压源,与芯片内的电阻网络相连接,该电压可正可负,范围为-10V~+10V.(11)DGND——数字地(12)AGND——模拟地7 0P0.7 P0.0(2)可通过循环程序段的机器周期数,计算出锯齿波的周期。
并可根据需要,通过延时的方法来改变波形周期。
若要改变锯齿波的频率,可在AJMP MM指令前加入延迟程序即可。
延时较短时可用NOP指令实现(本程序就是如此),需要延时较长时,可以使用一个延长子程序。
延迟时间不同,波形周期不同,锯齿波的斜率就不同。
(3)通过A加1,可得到正向的锯齿波,反之A减1可得到负向的锯齿波。
(4)程序中A的变化范围是0~255,因此得到的锯齿波是满幅度的。
如要求得到非满幅锯齿波,可通过计算求的数字量的处置和终值,然后在程序中通过置初值和终值的方法实现。
几点说明:(1)以上程序产生的是矩形波,其低点平的宽度由延时子程序DELAYL所延时的时间来决定,高电平的宽度则由DELAYH所延时的时间决定。
实验十 ADC0832数模转换的显示
![实验十 ADC0832数模转换的显示](https://img.taocdn.com/s3/m/7ca5aa6858fafab069dc02c4.png)
实验报告十实验名称:ADC0832数模转换的显示目的:ADC0832是8脚双列直插式双通道A/D转换器,能分别对两路模拟信号实现模—数转换,可以用在单端输入方式和差分方式下工作。
ADC0832采用串行通信方式,通过DI 数据输入端进行通道选择、数据采集及数据传送。
8位的分辨率(最高分辨可达256级),可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
ADC0832的工作原理:正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。
但由于DO端与DI端在通信时并未同时使用并与单片机的接口是双向的,所以在I/O口资源紧张时可以将DO和DI并联在一根数据线上使用。
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。
当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟(CLK)输入端输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
在第一个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
在第二、三个脉冲下沉之前DI端应输入两位数据用于选择通道功能。
通道地址通道工作方式说明SGL/DIF ODD/SIGN 0 10 0 + -差分方式0 1 - +1 0 +单端输入方式1 1 +表1:通道地址设置表如表1所示,当此两位数据为“1”、“0”时,只对CH0 进行单通道转换。
当2位数据为“1”、“1”时,只对CH1进行单通道转换。
当两位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。
当两位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。
ADC0832程序完整版-源码
![ADC0832程序完整版-源码](https://img.taocdn.com/s3/m/d8a7ff25ec630b1c59eef8c75fbfc77da2699704.png)
ADC0832程序完整版源码+Proteus仿真来源:互联网作者:后都出现了一些奇怪的问题,有的根本没法读取数据,有的数据有错误。
当参考电压为5V时,如果把输入电压从0一直调到5V,读取的数据应该是从0到255,2.5V 时应该是128。
但是我发现一些源码在输入0~2.5V时读取出来的是0~255,到2.5V时读取的数据为0,从2.5到5V,读出的值又从0增加到255,始终不正确。
今天下午特地查阅的ADC0832英文原版的DataSheet,又参考了一篇中文文档,终于写出了其完整的程序,并且先后读取了MSB FIRST DATA和LSB FIRST DATA,进行比较,如果两个数据相等,返回读取的数据,否则返回0,这样可以避免读取发生错误,更稳定可靠。
并通过了Proteus仿真。
下图是ADC0832的时序图:其中T-SetUp为250ns,由于使用的是51单片机,晶振11.0592MHz,机器周期比这个值大,可以不考虑,但为了防止出现异常,还是延时了两个机器周期。
注意在第11个时钟下降沿之后,DO上的电平既是MSB FIRST输出的最后一位,又是LSB FIRST输出的第一位。
以下是读取ADC0832的代码。
[cpp] view plaincopysbit CS_0832 = P1^0;sbit CLK_0832 = P1^1;sbit DO_0832 = P1^2; // DI、DO不同时有效,可共用一个接口sbit DI_0832 = P1^2;extern void _nop_ ( void );#define pulse0832() _nop_();_nop_();CLK_0832=1;_nop_();_nop_();CLK_0832=0 //把模拟电压值转换成8位二进制数并返回unsigned char read0832(){unsigned char i, ch = 0, ch1 = 0;CS_0832=0; // 片选,DO为高阻态DI_0832=1;// 此处暂停T-SetUp: 250ns (由pulse0832完成)pulse0832(); // 第一个脉冲,起始位,DI置高DI_0832=1;pulse0832(); // 第二个脉冲,DI=1表示双通道单极性输入DI_0832=1;pulse0832(); // 第三个脉冲,DI=1表示选择通道1(CH2)// 51单片机为准双向IO口:应先写入1再读取DI_0832=1;// MSB FIRST DATAfor(i = 0; i < 8; ++i) {pulse0832();ch <<= 1;if(DO_0832==1)ch |= 0x01;}// MSB FIRST输出的最后一位与LSB FIRST输出的第一位是在// 同一个时钟下降沿之后,故此处先执行读取,后执行pulse// LSB FIRST DATAfor(i = 0; i < 8; ++i) {ch1 >>= 1;if(DO_0832==1)ch1 |= 0x80;pulse0832();}CS_0832=1; // 取消片选,一个转换周期结束return (ch==ch1) ? ch : 0; // 返回转换结果}。
串行AD转换器ADC0832的使用
![串行AD转换器ADC0832的使用](https://img.taocdn.com/s3/m/63727faa6429647d27284b73f242336c1eb930c8.png)
串行AD转换器ADC0832的使用串行AD转换器ADC0832的使用单片机控制系统中通常要用到AD转换,根据输出格式,常用的AD转换方式可分为并行AD和串行AD。
并行方式一般在转换后可直接接收,但芯片的引脚比较多;串行方式所用芯片引脚少,封装小,但需要软件处理才能得到所需要的数据。
可是单片机I/O引脚本来就不多,使用串行器件可以节省I/O资源。
ADC0832是8位逐次逼近模数转换器,可支持两个单端输入通道和一个差分输入通道。
相同功能的器件还有ADC0834,ADC0838,ADC0831。
所不同的是它们的输入通道数量不同。
它们的通道选择和配置都是通过软件设置。
AD0832的主要特点如下:● 易于和微处理器接口或独立使用;● 可满量程工作;● 可用地址逻辑多路器选通各输入通道;● 单5V供电,输入范围为0~5V;● 输入和输出与TTL、CMOS电平兼容;ADC0832通过内部多路器来控制选择通道,处理器的控制命令通过DI引脚输入。
引脚图如右图所示,通道配置命令和通道选择命令如下:输入配置可在多路器寻址时序中进行。
多路器地址可通过DI端移入转换器。
多路器地址选择模拟输入通道可决定输入是单端输入还是差分输入。
当输入是差分时,应分配输入通道的极性,并应将差分输入分配到相邻的输入通道对中。
例如通道0和通道1可被选为一对差分输入。
另外,在选择差分输入方式时,极性也可以选择。
一对输入通道的两个输入端的任何一个都可以作为正极或负极。
通常ADC0832在输出以最高位(MSB)开头的数据流后,会以最低位(LSB)开头重输出一遍(前面的数据流)。
(因此,编程时要发两轮脉冲,第一次取数据,第二次若不要从低到高的数据,也要发一轮8 个脉冲将0832中寄存器的数据移出。
是的,)其工作时序如下所示:ADC0832有8只引脚,CH0和CH1为模拟输入端,CS为片选引脚,只有CS置低才能对ADC0832进行配置和启动转换。
CLK为ADC0832的时钟输入端。
ADC0832驱动程序讲解
![ADC0832驱动程序讲解](https://img.taocdn.com/s3/m/d425285e5e0e7cd184254b35eefdc8d376ee142c.png)
调试技巧与工具
使用调试工具
利用调试工具如串口调试器、示波器等,观察程序运行过程中的关键 变量、信号波形等,以便快速定位问题。
逐步执行
在关键代码段逐步执行,观察程序运Байду номын сангаас状态和数据变化,以便找出问 题所在。
内存检查
使用内存检查工具检查程序是否有内存泄漏、越界等问题。
单元测试与集成测试
进行单元测试和集成测试,确保驱动程序各模块之间的协调工作正常。
它采用CMOS技术,具有低功 耗、低成本、高精度等优点。
ADC0832的接口简单,易于与 微控制器连接,广泛应用于各 种模拟信号的采集和转换。
特点与优势
分辨率
ADC0832的分辨率为8位,可以提供256个 不同的等级。
电源电压
ADC0832的电源电压范围为+5V至+15V, 适应不同的电源需求。
转换时间
ADC0832的转换时间较短,最快可以在1微 秒内完成。
接口
ADC0832采用三线制串行接口,可以方便 地与微控制器连接。
应用领域
数据采集
01
ADC0832可以用于各种数据采集系统,如温度、压力、流量等
传感器信号的采集和转换。
控制系统
02
ADC0832可以用于控制系统的模拟信号输入,实现自动控制和
05 ADC0832驱动程序优化 与调试
性能优化
优化代码结构
采用高效的数据结构和算法,减少不 必要的计算和资源占用。
减少中断处理时间
优化中断处理函数,减少中断处理时 间,提高系统响应速度。
合理使用缓存
根据程序需求,合理使用缓存,提高 数据访问速度。
降低功耗
优化电源管理,降低系统功耗,延长 设备使用寿命。
ADC0832的应用电路与源程序
![ADC0832的应用电路与源程序](https://img.taocdn.com/s3/m/ba183248b307e87101f69642.png)
for(i=8;i>0;i--)
{
clk=1;
_nop_();
clk=0;
_nop_();
if(dout)
//addata1=(addata1"dout)<<1; //dout是1位(bit),addata1是8位(Byte),不能直接按位或
addata1=(addata1<<1)|0x01; //左移
return addata1;
else
return 0;
}
void main()
{
while(1)
{
P1=adconverse(0); //选择ch图如下:
参考程序如下(该程序已在硬件上调试通过):
#include <reg52.h>
ADC0832
![ADC0832](https://img.taocdn.com/s3/m/2811e5162cc58bd63086bd49.png)
6.1.3.2 8位串行A/D转换器ADC08321.功能特点ADC0832是NS(National Semiconductor)公司生产的串行接口8位A/D转换器,通过三线接口与单片机连接,功耗低,性能价格比较高,适宜在袖珍式的智能仪器仪表中使用。
ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
芯片具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件连接和处理器控制变得更加方便。
通过DI 数据输入端,可以轻易的实现通道功能的选择。
其主要特点如下:●8位分辨率,逐次逼近型,基准电压为5V;●5V单电源供电;●输入模拟信号电压范围为0~5V;●输入和输出电平与TTL和CMOS兼容;●在250KHZ时钟频率时,转换时间为32us;●具有两个可供选择的模拟输入通道;●功耗低,15mW。
2.外部引脚及其说明ADC0832有DIP和SOIC两种封装,DIP封装的ADC0832引脚排列如图6.21所示。
各引脚说明如下:●CS——片选端,低电平有效。
●CH0,CH1——两路模拟信号输入端。
●DI——两路模拟输入选择输入端。
●DO——模数转换结果串行输出端。
●CLK——串行时钟输入端。
●Vcc/REF——正电源端和基准电压输入端。
●GND——电源地。
图6.21 ADC0832引脚图3.单片机对ADC0832 的控制原理一般情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。
但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO 和DI 并联在一根数据线上使用。
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。
当要进行A/D转换时,须先将CS端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK提供时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
adc0832模数转换的串行协议
![adc0832模数转换的串行协议](https://img.taocdn.com/s3/m/39dabe599b6648d7c1c7464d.png)
竭诚为您提供优质文档/双击可除adc0832模数转换的串行协议篇一:单片机和adc0832的ad模数转换单片机和adc0832的ad模数转换在工业控制和智能化仪表中,通常由微型计算机进行实时控制及实时数据处理。
计算机所加工的信息总是数字量,而被控制或被测量的有关参量往往是连续变化的模拟量,如温度、速度、压力等等,与此对应的电信号是模拟信号。
模拟量的存储和处理比较困难,不适合作为远距离传输且易受干扰。
在一般的工业应用系统中传感器把非电量的模拟信号变成与之对应的模拟信号,然后经模拟(analog)到数字(digital)转换电路将模拟信号转成对应的数字信号送微机处理。
这就是一个完整的信号链,模拟到数字的转换过程就是我们经常接触到的adc(analogtodigitalconvert)电路。
模-数转换(adc)简介模-数转换原理adc的转换原理根据adc的电路形式有所不同。
adc电路通常由两部分组成,它们是:采样、保持电路和量化、编码电路。
其中量化、编码电路是最核心的部件,任何adc转换电路都必须包含这种电路。
adc电路的形式很多,通常可以并为两类:间接法:它是将采样-保持的模拟信号先转换成与模拟量成正比的时间或频率,然后再把它转换为数字量。
这种通常是采用时钟脉冲计数器,它又被称为计数器式。
它的工作特点是:工作速度低,转换精度高,抗干扰能力强。
直接法:通过基准电压与采样-保持信号进行比较,从而转换为数字量。
它的工作特点是:工作速度高,转换精度容易保证。
模—数转换的过程有四个阶段,即采样、保持、量化和编码。
采样是将连续时间信号变成离散时间信号的过程。
经过采样,时间连续、数值连续的模拟信号就变成了时间离散、数值连续的信号,称为采样信号。
采样电路相当于一个模拟开关,模拟开关周期性地工作。
理论上,每个周期内,模拟开关的闭合时间趋近于0。
在模拟开关闭合的时刻(采样时刻),我们就“采”到模拟信号的一个“样本”。
量化是将连续数值信号变成离散数值信号的过程。
ADC0832——C程序
![ADC0832——C程序](https://img.taocdn.com/s3/m/99b51cb31a37f111f1855be6.png)
//******************adc0832****************************// sbit CS=P1^0; //使能。
sbit CLK=P1^1;//时钟sbit Do=P1^2; // 数据输出sbit Di=P1^2;//数据输入unsigned char CH=0x02;//通道的选择:0x02就是单通道0;0x03就是单通道1;//0x00就是双通道ch0=“+”;ch0=“-”//0x01就是双通道ch0=“-”;ch0=“+”//*****************************************************// unsigned char ADconv(void){unsigned char i;unsigned int data_f=0,data_c=0;Di=1;CS=1;_nop_();CS=0;Di=1; ;//芯片使能之前的初始化。
第一个下降沿CLK=1;_nop_();_nop_();/****************************************/CLK=0; // 确定通道模式、第2个下降沿_nop_();_nop_();CLK=1;Di=(bit)(0x02&CH); //设定通道初始化_nop_();CLK=0;_nop_();_nop_();CLK=1;Di=(bit)(0x01&CH); //设定通道初始化 .第3个下降沿_nop_();_nop_();CLK=0; //AD转化的初始化完成。
Di=1;CLK=1;_nop_();_nop_();CLK=0;_nop_();CLK=1;for(i=8;i>0;i--)//得到一个正常排序的8位数据{data_f|=Do;data_f<<=1;CLK=1;_nop_();_nop_();CLK=0;_nop_();}for(i=8;i>0;i--)//得到一个反序排列的8位数据{data_c<<=1;data_c|=Do;_nop_();CLK=1;_nop_();_nop_();CLK=0;_nop_();CLK=0;_nop_();_nop_();CLK=1;_nop_();_nop_();CLK=0;_nop_();_nop_();CLK=1;_nop_();CS=1;_nop_();_nop_();return data_f;}void main(void){ unsigned int data_temp=0; while(1){ data_temp=ADconv();xs_int(196*data_temp,1);}}//***********************led.h*******************************************// //******************led1602**********/#include<intrins.h>#include<math.h>#define DD P2sbit Rs=P3^0;sbit Rw=P3^1;sbit E=P3^2;sbit busy_p=ACC^7;//********************************//void delay_1ms(unsigned char i) //最小延时1ms{ unsigned char j;while(i--)for(j=0;j<125; j++);}void delay_10ns(unsigned char i) //最小延时10ns{ unsigned char j;for(j=0;j<10; j++);}/*void rd_busy(void) //读忙。
adc0832程序
![adc0832程序](https://img.taocdn.com/s3/m/f40abec5d5bbfd0a795673d7.png)
if(i==0){
tmp=ad0832read(1,0); //循环255个周期读取一次0832,因CPU运行比较快,没必要每次循环都去读取,选择通过CH0输入
l_tmpdate[0]=tmp/100; //得到百位
tmp=tmp%100;
{
unsigned char i=0,tmp=0,tmp2=0;
SCL=0;_nop_();_nop_();
SDA=1;_nop_();_nop_();
CS=0;_nop_();_nop_(); //开始
SCL=1;_nop_();_nop_(); //第一个上升沿
P2=0; //清0端口,准备显示下位
if(i==7) //检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到P13数据
break;
P1++; //下一位数码管
}
}
////////////////延时子函数 /////////////////////////////////
SCL=1;_nop_();_nop_();
SCL=0;_nop_();_nop_();
}
CS=1;_nop_();_nop_(); //结束
SCL=1;
if(tmp==tmp2) //与校验数据比较,正确就返回数据,否则返回0
return tmp;
void display(unsigned char *lp,unsigned char lc);//显示函数
void delay(unsigned int timer); //延时子函数
unsigned char ad0832read(bit SGL,bit ODD); //读模数转换ADC0832的数据,参数为通道选择
ADC--ADC0832及其应用
![ADC--ADC0832及其应用](https://img.taocdn.com/s3/m/b5567a3083c4bb4cf7ecd1f9.png)
DAC0832一) D/A转换器DAC0832DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。
如图4-82所示,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。
运算放大器输出的模拟量V0为:图4-82由上式可见,输出的模拟量与输入的数字量()成正比,这就实现了从数字量到模拟量的转换。
一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。
输入可有28=256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。
图4-83是DAC0832的逻辑框图和引脚排列。
图4-83D0~D7:数字信号输入端。
ILE:输入寄存器允许,高电平有效。
CS:片选信号,低电平有效。
WR1:写信号1,低电平有效。
XFER:传送控制信号,低电平有效。
WR2:写信号2,低电平有效。
IOUT1、IOUT2:DAC电流输出端。
Rfb:是集成在片内的外接运放的反馈电阻。
Vref:基准电压(-10~10V)。
Vcc:是源电压(+5~+15V)。
AGND:模拟地 NGND:数字地,可与AGND接在一起使用。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
实验线路如图4-84所示。
图4-85IN0~IN7:8路模拟信号输入端。
A1、A2、A0 :地址输入端。
ALE地址锁存允许输入信号,在此脚施加正脉冲,上升沿有效,此时锁存地址码,从而选通相应的模拟信号通道,以便进行A/D转换。
START:启动信号输入端,应在此脚施加正脉冲,当上升沿到达时,内部逐次逼近寄存器复位,在下降沿到达后,开始A/D转换过程。
EOC:转换结束输出信号(转换接受标志),高电平有效。
OE:输入允许信号,高电平有效。
CLOCK(CP):时钟信号输入端,外接时钟频率一般为640kHz。
Vcc:+5V单电源供电。
单片机对串行A_D转换器ADC0832的C51编程
![单片机对串行A_D转换器ADC0832的C51编程](https://img.taocdn.com/s3/m/93ba8a6427d3240c8447efd4.png)
单 片 机 对 串 行 A / D 转 换 器 ADC0832 的 C51编 程
梁明亮 韦成杰
(郑州铁路职业技术学院 河南郑州 450052 ) A /D 转换在单片机接口中应用广泛 , 串行 A /D 转换 器具有功耗低 、 性价比 较高、 芯片 引脚少等 特 点 。ADC0832 是 N S ( Na tional Sem iconductor) 公司生 产的具有 M icrowire / P lus串行接口的 8 位 A /D 转 换器 ,通过三线接口与单片机连接 , 适宜在袖珍式智 能仪 器 中 使 用 。主要 性 能 指 标 有 : 功 耗 低 , 只 有 15mW ; 8 位分辨率 , 逐次逼近型 , 基准电压为 5V; 输 入模拟信号电压范围为 0 ~ 5V; 输入和输出电 平与 TT L 和 CMOS 兼容 ; 在 250kHz 时钟频率时 , 转 换时 间为 32us;具有两个可供选择的模拟输入通道 。 1 ADC0832 的引脚及配置位功能 ADC0832 有 D IP 和 SO I C 两种封装 , D IP 封装的 ADC0832引脚排列如图 1所示 。各引脚说明如下 : 2 ADC0832 的工作时序 当 CS由高变低时 ,选中 ADC0832。在时钟的上 升沿 , D I端的数据移入 ADC0832 内部的多路地址移 位寄存器 。在第一个时 钟期 间 , D I为高 , 表示启动 位 , 紧接着输入两位配置位 。当 输入 启动位和配置 位后 ,选通输入模拟通道 , 转换开始 。转换 开始 后 , 经过 一个 时 钟 周 期 延迟 , 以 使 选 定 的 通 道 稳 定。 ADC 0832 接着在第 4 个时钟下降沿输出转换数据。 数据输出时先输出最高位 (D7 ~D0 ) ;输出完转换结 果后 , 又以 最 低位 开始 重 新输 出 一遍 数 据 ( D7 ~ D0 ) , 两次发送的最 低位共用。当片选 CS 为高 时 , 内部所有寄存器清 0, 输出变为高阻态 。如果要再进 行一次模 /数转换 , 片选 CS 必须再次从高向低跳变 , 后面再输入启动位和配置位 。 3 单片机与 ADC 0832 的 SP I串行典型接口 3. 1 SP I串行外围接口方式 图 2 为 STC89C51与 ADC 0832 的 SP I串行接口 方式 ,将 ADC 0832 的 CS 和 CL K分别 接单片 机的 P1. 0和 P1. 1 引脚 ,将 D I和 DO 分别接 P1. 2和 P1. 3 引脚 。对 CH0通道的模拟信号实行 A /D 转换 , 转换 结果传送给 P0 口 。下面介绍 ADC0832 的 C51 编程 的关键源程序 。