ADS8881的驱动代码求助,请大神帮我看一下

2019-07-21 01:30发布

这是我写的ADS8881驱动,但是运行之后读取的过程中偶尔会出现0,不知道是怎么回事?
#include "led.h"
#include "delay.h"
#include "usart.h"

void ad_IO_Init(void)
{

                GPIO_InitTypeDef  GPIO_InitStructure;

                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);         //ê1Äü¶Ë¿úê±Öó

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_8;        //                       
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //íÆíìêä3ö
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO¿úËù¶èÎa50MHz
                GPIO_Init(GPIOB, &GPIO_InitStructure);                                 //¸ù¾Yé趨2Îêy3õê¼»ˉ       
                GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_8);  //SCLK,CONVST,DIN


                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//DOUT
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//¸¡¿Õêäèë
                GPIO_Init(GPIOB, &GPIO_InitStructure);  //receive       
                GPIO_SetBits(GPIOB,GPIO_Pin_7); //1, 0 indicate ready

}

/*
#define SCLK   PBout(5)  //default low,GPIO_Mode_Out_PP
#define CONVST PBout(6) //default high,GPIO_Mode_Out_PP
#define DOUT   PBin(7)  //master input,GPIO_Mode_IN_FLOATING
#define DIN    PBout(8)  //master output,GPIO_Mode_Out_PP
*/

//¶á18λêy¾Y
int adc_read(void)
{               
        int i;
        int data=0;
       
        DIN = 0;
        CONVST = 0;
        SCLK = 0;
        delay_us(2);
       
  DIN=1;
        CONVST = 1;       
        for(i=0;i<5;i++)
        {
        SCLK = 1;
        delay_us(1);
        SCLK = 0;
        delay_us(1);       
        }

        DIN = 0;       
  delay_us(1);//*****

                for(i=17;i--;i>0)
                {
                        SCLK=1;
                        delay_us(1);
                  data=data|(DOUT<<i);//(i-1)); //***
                        SCLK=0;
                        delay_us(1);
                }
                //printf("%8d ",data);

        DIN = 1;
        CONVST = 0;
  SCLK = 0;
        delay_us(2);
        return data;
}


0条回答

一周热门 更多>