📄 ads1100.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 + -