基于51的ads1115详细程序介绍

AC-DC/DC-DC转换

116人已加入

描述

  ADS1115 是具有16 位分辨率的高精度模数转换器(ADC),采用超小型的无引线QFN-10 封装或MSOP-10 封装。以下将是基于51的ads1115详细程序介绍:

  void Delay_us_15 (void)

  {

  unsigned char i;

  for(i = 0;i 《 15;i++)

  _nop_();

  }

  void Delay_ms_1 (void)

  {

  unsigned char i;

  for(i = 150;i 》 0;i--) _nop_();

  }

  ///*******************************************

  //函数名称:Start

  //功 能:完成IIC的起始条件操作

  //参 数:无

  //返回值 :无

  //********************************************/

  void Start(void)

  {

  SCL=1;

  SDA=1;

  Delay_us_15 ();

  SDA=0;

  Delay_us_15 ();

  SCL=0;

  Delay_us_15 ();

  }

  //

  ///*******************************************

  //函数名称:Stop

  //功 能:完成IIC的终止条件操作

  //参 数:无

  //返回值 :无

  //********************************************/

  void Stop(void)

  {

  SDA=0;

  Delay_us_15 ();

  SCL=1;

  Delay_us_15 ();

  SDA=1;

  Delay_us_15 ();

  }

  ///*******************************************

  //函数名称:ACK

  //功 能:完成IIC的主机应答操作

  //参 数:无

  //返回值 :无

  //********************************************/

  void ACK(void)

  {

  SDA=0;

  _nop_(); _nop_();

  SCL=1;

  Delay_us_15 ();

  SCL=0;

  _nop_(); _nop_();

  SDA=1;

  Delay_us_15 ();

  }

  //*******************************************

  //函数名称:NACK

  //功 能:完成IIC的主机无应答操作

  //参 数:无

  //返回值 :无

  //********************************************/

  void NACK(void)

  {

  SDA=1;

  _nop_(); _nop_();

  SCL=1;

  Delay_us_15 ();

  SCL=0;

  _nop_(); _nop_();

  SDA=0;

  Delay_us_15 ();

  }

  //**********检查应答信号函数******************/

  ///*如果返回值为1则证明有应答信号,反之没有*/

  ///*******************************************

  //函数名称:Check

  //功 能:检查从机的应答操作

  //参 数:无

  //返回值 :从机是否有应答:1--有,0--无

  //********************************************/

  unsigned char Check(void)

  {

  unsigned char slaveack;

  SDA=1;

  _nop_(); _nop_();

  _nop_(); _nop_();

  _nop_(); _nop_();

  slaveack = SDA; //读入SDA数值

  SCL=0;

  Delay_us_15 ();

  if(slaveack) return FALSE;

  else return TRUE;

  }

  /***************Write a Byte****************/

  void Write_1_Byte(unsigned char DataByte)

  {

  int i;

  for(i=0;i《8;i++)

  {

  if(DataByte&0x80) //if((DataByte《《i)&0x80)

  SDA=1;

  else

  SDA=0;

  Delay_us_15 ();

  SCL=1;

  Delay_us_15 ();

  SCL=0;

  Delay_us_15 ();

  DataByte 《《= 1;

  }

  SDA=1;

  _nop_();

  }

  /***************Write N Byte****************/

  unsigned char Write_N_Byte(unsigned char *writebuffer,unsigned char n) {

  int i;

  for(i=0;i《n;i++)

  {

  Write_1_Byte(*writebuffer);

  if(Check())

  {

  writebuffer ++;

  }

  else

  {

  Stop();

  return FALSE;

  }

  Stop();

  return TRUE;

  }

  //***************Read a Byte****************/ unsigned char Read_1_Byte(void)

  {

  unsigned char data_Value = 0, FLAG, i;

  for(i=0;i《8;i++)

  {

  SDA=1;

  Delay_us_15 ();

  SCL=1;

  Delay_us_15 ();

  FLAG=SDA;

  data_Value 《《= 1;

  if( FLAG)

  data_Value |= 0x01;

  SCL=0;

  Delay_us_15 ();

  }

  return data_Value;

  }

  //***************Read N Byte****************/

  void Read_N_Byte(unsigned int*readbuff, unsigned char n) {

  unsigned char i;

  for(i=0;i《n;i++)

  {

  readbuff[i]=Read_1_Byte();

  if(i==n-1)

  NACK(); //不连续读字节

  else

  ACK(); //连续读字节

  }

  Stop();

  }

  //*****************初始化******************/ void InitADS1115(bit S_MUX_0, bit S_MUX_1)

  {

  if(S_MUX_0==0&&S_MUX_1==;Writebuff[0]=ADDRESS_W;W;Readbuff[0]=ADDRESS_W;Re;Readbuff[2]=ADDRESS_R;};//***************WriteaW;intt;;Start();//写入4个字节do{;t=Write_N_Byte(Writebuff;//***

  if (S_MUX_0 == 0 && S_MUX_1 == 0) //AIN0 Config = OS+MUX_A0+PGA+DR+COMP_QUE+MODE; if (S_MUX_0 == 0 && S_MUX_1 == 1) //AIN1 Config = OS+MUX_A1+PGA+DR+COMP_QUE+MODE; if (S_MUX_0 == 1 && S_MUX_1 == 0) //AIN2 Config = OS+MUX_A2+PGA+DR+COMP_QUE+MODE; if (S_MUX_0 == 1 && S_MUX_1 == 1) //AIN3 Config = OS+MUX_A3+PGA+DR+COMP_QUE+MODE;

  Writebuff[0]=ADDRESS_W; Writebuff[1]=Pointer_1; Writebuff[2]=Config/256; Writebuff[3]=Config%6;

  Readbuff[0]=ADDRESS_W; Readbuff[1]=Pointer_0;

  Readbuff[2]=ADDRESS_R; }

  //***************Write a Word***********************/ void WriteWord(void) {

  int t;

  Start(); //写入4个字节 do {

  t=Write_N_Byte(Writebuff,4); }while(t==0); }

  //***************Read Word***********************/ void ReadWord(void) {

  int t;

  Start(); //写入2个字节 do {

  t=Write_N_Byte(Readbuff,2); }while(t==0);

  Start(); //写入2个字节 do {

  t=Write_N_Byte(&Readbuff[2],1); }while(t==0);

  Read_N_Byte(Result,2); //读出2个字节

  }

  //***************ADS1115********************/ unsigned int ADS1115(bit S_MUX_0, bit S_MUX_1) {

  InitADS1115(S_MUX_0, S_MUX_1); WriteWord(); Delay_ms_1(); ReadWord(); D_ADS=Result[0]*256+Result[1]; //转换的数字量

  return D_ADS; }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分