⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ads1100.c

📁 模数转换芯片ads1100 读写程序 已应用于产品
💻 C
字号:
//ADS1100 应用程序

#include <reg52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int

/*--------------------------------------------------*/
sbit SDA=P3^5;//I2C数据线
sbit SCL=P3^4;//I2C时钟线

void I2CStart(void);
void I2CStop(void);
bit I2CWaitAck(void);
void I2CSendAck(void);
void I2CSendNotAck(void);
void I2CSendByte(void);
uchar I2CReceiveByte(void);
void Wr_Ads1100_Cfg(void);//写器件配置字
uint Rd_Ads1100_Data(void);//从ads1100中读数据


//I2C 起始条件
void I2CStart(void)
{
 SDA=1;
 SCL=1;
 _nop_();
 _nop_();
 SDA=0;
 _nop_();
 _nop_();
 SCL=0;
}

//I2C 停止条件
void I2CStop(void)
{
  
  SDA=0;
  SCL=1;

  _nop_();
  _nop_();

  SDA=1;
  _nop_();
  _nop_();
  SCL=0;
}


//等待I2C从器件的ACK
bit I2CWaitAck(void)
{
 uchar cErrTime=255;
 SDA=1;
 _nop_();
 SCL=1;
 while(SDA)
 {
   cErrTime--;
   if (cErrTime==0)
   {
      I2CStop();
      return 1;
   }
   
 }
 SCL=0;
 return 0;
}

//发送ACK
void I2CSendAck(void)
{
 SDA=0;
 _nop_();
 SCL=1;
 _nop_();
 _nop_();
 SCL=0;
}


//发送NOT ACK
void I2CSendNotAck(void)
{
 SDA=1;
 _nop_();
 SCL=1;
 _nop_();
 _nop_();

 SCL=0;
}

//发送一个字节


void I2CSendChar(uchar cSendByte)
{

 uchar data i=8;
 while(i--)
 {
  SCL=0;
  SDA=(bit)(cSendByte & 0x80);  //高位在先
  cSendByte<<=1;
  
  SCL=1;
  _nop_();
   
 }
 SCL=0;

}


//接收一个字节
uchar I2CReceiveByte(void)
{
 uchar data i=8;
 uchar data cR_Byte=0;
 SDA=1;
 while(i--)
 {
   cR_Byte<<=1;
   SCL=0;
   _nop_();
   _nop_();
   SCL=1;
   _nop_();
   _nop_();
   cR_Byte|=(uchar)SDA;
 }
 SCL=0;
 return cR_Byte;
}


//写器件配置字
void Wr_Ads1100_Cfg(void)
{
  I2CStart();
  I2CSendChar(0x90);//写地址:1001 000 0  固定码1001,地址为000,写命令为0
  I2CWaitAck();//等应答
  I2CSendChar(0x8c);//写配置字:连续转换,转换速率为8SPS,增益为1
  I2CWaitAck();//等应答
  I2CStop();//结束
}

//从ads1100中读数据
uint Rd_Ads1100_Data(void)
{
  uint result;
  uchar TMR1H;//输出高8位
  uchar TMR1L;//输出低8位
  uchar TMR2;//控制寄存器
  I2CStart();
  I2CSendChar(0x91);//写地址:1001 000 1  固定码1001,地址为000,读命令为1
  I2CWaitAck();//等应答
  TMR1H=I2CReceiveByte();
  I2CSendAck();
  TMR1L=I2CReceiveByte();
  I2CSendAck();
  TMR2=I2CReceiveByte();
  I2CSendNotAck();
  I2CStop();

  result=TMR1H*256+TMR1L;
  
  return result; 
}

                    
      




/*-------------------------------------------------
                    主函数
-------------------------------------------------*/
void main(void)
{
  uint advalue;

  while(1)
  {
    Wr_Ads1100_Cfg();//写器件配置字
    advalue=Rd_Ads1100_Data();//读数据
  }   
    

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -