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

📄 ads1100.lib

📁 基于ds18b20的温湿度检测程序。有液晶程序还有传感器的程序
💻 LIB
字号:
/******************************************************
程序说明:

函数列表:
    内部函数:
   1. BYTE ADS1100_WRITE_REG(BYTE REG_data) 
             //函数说明: ADS1100写寄存器命令
   2. BYTE ADS1100_READ_DATA(WORD *pdat,BYTE *REG_data) 
             //函数说明: ADS1100 读寄存器数据、AD转换结果的数据
    外部函数:   
   1. BYTE ADS1100_CONVER_READ_DATA(WORD *AD_RESULT)
   	     //函数说明: ADS1100 转换一次并读出结果
*******************************************************/

        
//ADS1100 Slave address  //1001000 R/w     
#define ADS1100address 0x90

//TWCR(mega8)
#define TWINT 7  //TWI Interrupt Flag
#define TWEA  6  //TWI Enable Anknowledge Bit
#define TWSTA 5  //TWI Start Condition Bit
#define TWSTO 4  //TWI Stop Condition Bit
#define TWWC  3  //TWI Write Collision Bit
#define TWEN  2  //TWI Enable Bit
#define TWIE  0  //TWI Interrupt Enable

//TWI状态定义
#define TWI_START 0x08
#define RE_START 0x10
//MT 主方式传输 
#define MT_SLA_ACK 0x18
#define MT_SLA_NOACK 0x20
#define MT_DATA_ACK  0x28
#define MT_DATA_NOACK 0x30
//MR 主方式接收
#define MR_SLA_ACK  0x40
#define MR_SLA_NOACK 0x48
#define MR_DATA_ACK 0x50
#define MR_DATA_NOACK 0x58

//常用TWI操作(主模式写和主模式读)
#define TWI_Start()      (TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
#define TWI_Stop()       (TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN))
#define TWI_Wait()	     {while(!(TWCR&(1<<TWINT)));}
#define TestAck()    (TWSR&0xf8)
#define SetNoAck()   (TWCR&=~(1<<TWEA))
#define Twi()	     (TWCR=(1<<TWINT)|(1<<TWEN)|(1<<TWEA))
#define WriteByte(x) {TWDR=(x);TWCR=(1<<TWINT)|(1<<TWEN);} 

#define BYTE unsigned char

/******************************************
 函数说明: ADS1100写寄存器命令
 
  参  数: REG_data------寄存器数据
 返 回值: 返回0 写失败
          返回1 写成功
调用全局变量: 无调用   

*******************************************/
BYTE ADS1100_WRITE_REG(BYTE REG_data) 
{
	  BYTE deive_addr;
	  deive_addr=ADS1100address;
	  
	  TWI_Start();//I2C启动
	  TWI_Wait();
	  if(TestAck()!=TWI_START) return 0;//检查I2C启动是否成功 
	  WriteByte(deive_addr);//写I2C从器件地址和写方式
	  TWI_Wait();
	  if(TestAck()!=MT_SLA_ACK) return 0;//检查从ACK是否产生
	  WriteByte(REG_data);//写寄存器数据
	  TWI_Wait();
	  if(TestAck()!=MT_DATA_ACK) return 0;//检查从ACK是否产生
	  TWI_Stop();//I2C停止
	  return 1;
} 
    
/******************************************   
函数说明: ADS1100 读寄存器数据、AD转换结果的数据
 
 参  数: *AD_data----返回数据指针
	 *REG_data----返回寄存器数据指针
 返 回值: 返回0 读失败  
          返回1 读成功
调用全局变量: 无调用   

*******************************************/
BYTE ADS1100_READ_DATA(int *AD_data,BYTE *REG_data)
{
	  BYTE deive_addr,i;
	  deive_addr=ADS1100address;
	  
	  TWI_Start();//I2C启动
	  TWI_Wait();
	  if(TestAck()!=TWI_START) return 0;//检查启动I2C是否成功
	  deive_addr|=0x01;	   
	  WriteByte(deive_addr);//写I2C从器件地址和读方式
	  TWI_Wait(); 
	  if(TestAck()!=MR_SLA_ACK) return 0;//检查从是否应答ACK
	  
	  for(i=0;i<3;i++)
	  {
	  	Twi();//启动主I2C读方式
		TWI_Wait();
	  	if(TestAck()!=MR_DATA_ACK) return 0;//ACK
		if(i<2)
			{
			*AD_data<<=8;
			*AD_data+=TWDR;//读取I2C接收数据
			}
		else
			*REG_data=TWDR;//读寄存器数据
	  }
	  		
          TWI_Stop();//I2C停止
	  return 1;
}
/******************************************   
函数说明: ADS1100 转换一次并读出结果

 参  数: *AD_data----返回数据指针
	 *REG_data----返回寄存器数据指针
 返 回值: 返回0 读失败
          返回1 读成功
调用全局变量: 无调用

*******************************************/
void ADS1100_CONVER_READ_DATA(int *AD_data)
{
	  BYTE *REG_data;
	  ADS1100_WRITE_REG(0x9c);
	  do
	  {
	  ADS1100_READ_DATA(AD_data,REG_data);
	  }
	  while(*REG_data&0x80==1);
}

⌨️ 快捷键说明

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