标题: ADC0832模式转换模块的程序,请大神帮我看看有没有问题。 [打印本页]

作者: 水煮相对论    时间: 2017-4-3 09:47
标题: ADC0832模式转换模块的程序,请大神帮我看看有没有问题。
/***********读数模转换数据********************************************************/        //请先了解ADC0832模数转换的串行协议,再来读本函数,主要是对应时序图来理解,本函数是模拟0832的串行协议进行的                                                //  1  0  0 通道                                                //  1  1  1 通道 unsigned char ad0832read(bit SGL,bit ODD){        unsigned char i=0,value=0,value1=0;                                SCL=0;                DO=1;                CS=0;                //开始                SCL=1;                //第一个上升沿                        SCL=0;                DO=SGL;                SCL=1;          //第二个上升沿                SCL=0;                DO=ODD;                SCL=1;            //第三个上升沿                DO=1;                for(i=0;i<8;i++)                {                        SCL=1;                        value<<=1;                        if(DO)                                value++;                                                                }                for(i=0;i<8;i++)                {                        //接收校验数据                        value1<<=1;                        if(DO)                                value1+=0x80;                        SCL=1;                        SCL=0;                }                CS=1;                SCL=1;                return 0;}
作者: imxuheng    时间: 2017-4-3 21:09
天哪,这也太乱了,
这是前人的程序,我试过,没问题

sbit cs=P1^0;
sbit clk=P1^1;
sbit data_in=P1^2;
sbit data_out=P1^2;

unsigned char Get_AD_Result(unsigned char CH)
{
        unsigned char i,test,adval;
        adval=0x00;
        test=0x00;
        clk=0;
        data_in=1;
        _nop_();
        cs=0;        
        _nop_();
        clk=1;
        _nop_();

        if(CH==0x00)
        {
                clk=0;
                data_in=1;
                _nop_();
                clk=1;
                _nop_();
                clk=0;                 
                data_in=0;
                _nop_();
                clk=1;
                _nop_();
        }
        else
        {
                clk=0;
                data_in=1;
                _nop_();
                clk=1;
                _nop_();
                clk=1;
                _nop_();
                clk=0;
                data_in=1;
                _nop_();
                clk=1;
                _nop_();
        }
        clk=0;
        data_in=1;
        for(i=0;i<8;i++)
        {
                _nop_();
                adval<<=1;
                clk=1;
                _nop_();
                clk=0;
                if(data_out)
                        adval|=0x01;
                else
                        adval|=0x00;        
        }
        for(i=0;i<8;i++)
        {
        test>>=1;
        if(data_out)
                test|=0x80;
        else
                test|=0x00;               
                _nop_();
                clk=1;
                _nop_();
                clk=0;
        }

        _nop_();
        cs=1;
        data_out=1;
        clk=1;
        return (adval == test) ? test:0;
}

数据转换方法为
                 d = Get_AD_Result(0);

                Display_Buffer[0]=d/51 +'0';//整数部分
                Display_Buffer[2]=(d%51)*10/51 +'0';//一位数
                Display_Buffer[3]=((d%51)*10%51)*10/51 +'0';//两位数
作者: zl2168    时间: 2017-4-4 15:48
本帖最后由 zl2168 于 2017-4-4 15:50 编辑

实例85  ADC0832串行A-D(TXD输出CLK)


Proteus仿真一下,确认有效。
实例85 ADC0832串行A-D( TXD输出CLK).rar (36.86 KB, 下载次数: 12)
以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版.。书中电路和程序设计有详细说明,程序语句条条有注解。



作者: zl2168    时间: 2017-4-4 15:51
本帖最后由 zl2168 于 2017-4-4 15:52 编辑

实例86  ADC0832串行A-D(虚拟CLK)


Proteus仿真一下,确认有效。
实例86 ADC0832串行A-D(虚拟CLK).rar (35.29 KB, 下载次数: 9)
以上摘自张志良编著《单片机实验实训100例》 ISBN 978-7-5124-1603-1,北航社出版.。书中电路和程序设计有详细说明,程序语句条条有注解。







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1