有没有做过ADS1232的啊,帮我看看程序

2020-02-02 09:24发布

有没有做过ADS1232的啊,帮我看看程序
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
king000
1楼-- · 2020-02-02 13:11
#include<ALL.h>

sbit SCLK =P0^0;
sbit SPEED=P0^1;
sbit GAIN0=P0^2;
sbit DOUT =P0^3;
sbit PDWN =P0^4;
sbit GAIN1=P0^5;
sbit A0   =P0^6;                                                                                                                                                                            


/*ADS1232初始化,参数依次为通道数,增益数,数据速率*/
void ADS_init(uchar Gal,uchar Gain,uchar DatR)  
{
        PDWN = 0;                //复位或者进行初始化时必须先拉低
        switch(Gal)                 //通道数
        {
                case 1:         A0 = 0; break;
                case 2:         A0 = 1; break;
        }

        switch(Gain)   //4种增益倍数
        {
                case 1:         GAIN1 = 0; GAIN0 = 0; break;
                case 2:         GAIN1 = 0; GAIN0 = 1; break;
                case 64:         GAIN1 = 1; GAIN0 = 0; break;
                case 128:        GAIN1 = 1; GAIN0 = 1; break;
        }

        switch(DatR)         //两种数据速率
        {
                case 10:        SPEED = 0; break;
                case 80:        SPEED = 1; break;       
        }                                                                                                 
        PDWN = 1;        //拉高准备工作       


        PDWN=0;                        //重新复位
        delay_ms(14);
        PDWN=1;

        SCLK=0;



        ADS_getdata(1);    //复位后校准一下

        ADS_getdata(0);           //先前不稳定的值读取掉
        ADS_getdata(0);
       
}


long ADS_getdata(uchar Singl)
{
        uchar i;
        long Result=0;

        while(DOUT);        //等待DOUT置低,可读数据信号

        for(i=0;i<24;i++)
        {
                Result<<=1;
                SCLK=1;
                if(DOUT==1)
                        Result=Result+1;
                else
                        _nop_();
                SCLK=0;
        }

        SCLK = 1;         //在第25个时钟将DOUT拉高  (消除累计误差)
        _nop_();                  
        SCLK = 0;

        if(Singl)        //在第26个时钟是否进行偏移校验                 
        {
                SCLK = 1;
                _nop_();        
                SCLK = 0;
        }

        return Result;
}
king000
2楼-- · 2020-02-02 17:15
 精彩回答 2  元偷偷看……
king000
3楼-- · 2020-02-02 22:59
大家支声啊,呵呵
king000
4楼-- · 2020-02-03 04:58
现在有个问题是,传感器的信号越大为什么ad输出越小啊
king000
5楼-- · 2020-02-03 07:20
高手们小弟急啊············
在线等·····
waterx3
6楼-- · 2020-02-03 09:51
你先确定进AD的信号是正确的。

一周热门 更多>