文档详情

串行AD转换器ADC0832的使用

hs****ma
实名认证
店铺
DOCX
16.95KB
约5页
文档ID:396585890
串行AD转换器ADC0832的使用_第1页
1/5

串行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的时钟输入端CS在整个转换过程中都必须为低,当 CS为低时,在数据输入端DI (数据输入端)加一个高电平(这个高电平是否算在送到DI的 一位之中?如果算,那么后面就只要再送两位是的,这个高电平是作为起始标志),接着 在CLK上加一个时钟,DI上的逻辑1就会使ADC0832的DI脱离高阻态,然后通道配置数据拌 随着时钟通过DI端移入多路器,当最后一位数据移入多路器时(数据是三位吗?还是可以有 更多位?是否因为是仅仅作状态设置,所以只须三位?数据是三位,前一位标志输入开始, 后两位是用来作通道设置和选择),DI变为高阻态,在这以前DO (数据输出端)都为高阻态(这个“以前"的概念是什么?就是CS从咼跳到低到现在)。

在经过一个时钟(是指在最后 一个数据从DI移入后,还要再经过一个时钟?是的,当最后一位数据移入DI,需要再加一个 时钟使DO脱离高阻态),DO脱离高阻态并启动转换接着从处理器接收时钟信号,每经过一 个时钟,转换后的数据就会从高位到低位逐次从DO移出,经过8个时钟后,数据又以从低位 到高位的形式从DO移出(也是每个时钟移一位)当最后一位数据移出时转换完成当CS 从低变为高时,ADC0832内部所有寄存器清零如想要进行下一次转换,CS必须做一个从高 到低的跳变,后跟着地此配置数据重复上面的过程在进行单片机和ADC0832的连接时,因为DI和DO并不是同时使用,所以DI和DO可以共用 单片机的一条I/O线,再加上一条时钟线和一条片选线就可以实现单片机和ADC0832的连接, 电路连接例子如下图所示:ADC0832在51单片机上的AD转换程序的设计也不复杂,下面给出以上图为例的51单片机程 序:adc_0832_csbitp2.2adc_0832_clkbitp2.1adc_0832_dibitp2.0adc_0832_ch0equ38h;buf of ch0adc_0832_conv:pushapush pswpush 0clradc_0832_clk;clear clokclradc_0832_disetbadc_0832_cs;set CS to enable convertersclradc_0832_cs;CS作一个从高到低的跳变。

setbadc_0832_di;set start bit to enable data inputsetb adc_0832_clk ; elk作一个从高到低的跳变,并不是从高到低跳变,而是一个上升脉冲,因为在这步以前clk处于低电平,现在是先高,然 后又低,形成一个上升脉冲clradc_0832_clk寄存器setbadc_0832_disetbadc_0832_clkclradc_0832_clk1到寄存器clradc_0832_disetbadc_0832_clkclradc_0832_clk据为110setb adc_0832_clkclr adc_0832_clk就是最后的这个吧?是的,这个时钟使DO;上面指令中di的1进入;MSB address select CH0;clk第二个从高到低的跳变,;上面指令中di再进一个;LSB address;上面指令中,di进入的数;设高位先行进入上面说的再进一个时钟adc_conv:movr0,#08h;该段从0832取数adc_next_bit:movc,adc_0832_dirlcasetbadc_0832_clkclradc_0832_clknopdjnzr0,adc_next_bitmov到高位再送一次数,r0,#08h;该段就是所说的0832又从低位adC_Skip_byte: Setb个时钟,adC_0832_Clk;但这里不作保存,只空操作8ClradC_0832_Clk;将0832从低位到高位的8个数据扔出去。

djnzr0,adC_Skip_bytesetb adc_0832_clkclr adc_0832_clk;完事后将CS置高setb adc_0832_csmovr0,#adC_0832_Ch0mov@r0,apop0poppSwpoparet。

下载提示
相似文档
正为您匹配相似的精品文档