📄 ads1110.c
字号:
#define ADS1110_GLOBAL
//-----------------------------------------------
//#define uchar unsigned char
//-----------------------------------------------
#include "includes.h"//<mega128.h>
//#include <delay.h>
//-----------------------------------------------
/*******************************************************************************
名称: ads1110Start(void)
功能: ADS1110 I2C Start
******************/
void ads1110Start(void)
{
ADS1110_SDA=1;
_nop_();
_nop_();
ADS1110_CLK=1;
_nop_();
_nop_();
ADS1110_SDA=0;
_nop_();
_nop_();
ADS1110_CLK=0;
_nop_();
_nop_();
}
/*******************************************************************************
名称: ads1110Stop(void)
功能: ADS1110 I2C Stop
******************/
void ads1110Stop(void)
{
ADS1110_SDA=0;
_nop_();
_nop_();
ADS1110_CLK=1;
_nop_();
_nop_();
ADS1110_SDA=1;
_nop_();
_nop_();
ADS1110_CLK=0; // -----------结束I2C总线,即发送I2C结束条件.
_nop_();
_nop_();
}
/*******************************************************************************
名称: waitAck(void)
功能: ADS1110 I2C 等待ack
******************/
uchar waitAck(void)
{
uchar errtime;
errtime=40;
DDRB &= ~0x04;
while(ADS1110_SDAIN) //-----------等待ADS1100应答
{
errtime--;
if(!errtime)
{
ads1110Stop();
return 0x00;
}
}
DDRB |= 0x04;
ADS1110_CLK=1;
_nop_();
_nop_();
_nop_();
_nop_();
ADS1110_CLK=0;
return 0xff;
}
/*******************************************************************************
名称: void sendAck(void)
功能: 向ADS1110 I2C 发送 ack
******************/
void sendAck(void)
{
ADS1110_SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
ADS1110_CLK=1;
_nop_();
_nop_();
_nop_();
_nop_();
ADS1110_CLK=0;
}
/*******************************************************************************
名称: void sendNotAck(void)
功能: 向ADS1110 I2C 不发送 ack
******************/
void sendNotAck(void)
{
ADS1110_SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
ADS1110_CLK=1;
_nop_();
_nop_();
_nop_();
_nop_();
ADS1110_CLK=0;
}
/*******************************************************************************
*******************
名称: void ads1110SendByte(BYTE sendData)
功能: 向ADS1110 I2C 发送1个字节
********************************************************************************
******************/
void ads1110SendByte(uchar sendData)
{
uchar i;
ADS1110_CLK=0;
for( i=0; i<8;i++ )
{
if(sendData & 0x80) ADS1110_SDA=1;
else ADS1110_SDA=0;
_nop_();
_nop_();
sendData <<= 1;
ADS1110_CLK = 1; //置时钟线为高,通知被控器开始接收数据位
_nop_();
_nop_();
ADS1110_CLK = 0;
}
}
/*******************************************************************************
*******************
名称: uchar ads1110ReceiveByte(void)
功能: ADS1110 I2C 接收1个字节
********************************************************************************
******************/
uchar ads1110ReceiveByte(void)
{
uchar i,receiveData;
receiveData=0;
ADS1110_CLK=0;
DDRB &= ~0x04;
for(i=0;i<8;i++ )
{
ADS1110_CLK=1; //置时钟线为高使数据线上数据有效
_nop_();
_nop_();
receiveData<<=1;
if(ADS1110_SDAIN)
receiveData |= 1; //读数据位,接收的数据位放入ucRet中
ADS1110_CLK=0;
_nop_();
_nop_();
}
DDRB |= 0x04;
return(receiveData);
}
/*******************************************************************************
*******************
名称: void ads1110Config(void)
功能: 对ADS1110进行配置
********************************************************************************
******************/
void ads1110Config(void)
{
#asm("cli")
ads1110Start();
ads1110SendByte(ADS1110_WR_ADDRESS);
waitAck();
ads1110SendByte(ADS1110_CONFIG_REG);
waitAck();
ads1110Stop();
#asm("sei");
}
/*******************************************************************************
*******************
名称: 读取ADS1100数据子程序
功能:
********************************************************************************
******************/
unsigned char RD_ADS(void )
{
uchar temp00,ss,*p;//,adstrs[7];
#asm("cli")
ads1110Start(); //-----------启动I2C总线,即发送I2C起始条件.
ads1110SendByte(ADS1110_RD_ADDRESS); //-----------寻址ADS1110(ED0)
temp00=waitAck();
ss=temp00;
if(temp00) //如果应答正确
{
adc[0] = ads1110ReceiveByte(); //-----------读数据 高字节
sendAck(); //主机应答
adc[1] = ads1110ReceiveByte(); //-----------读数据 低字节
sendAck(); //主机应答
adc[2] = ads1110ReceiveByte(); //读配置字
sendAck();
// sendNotAck(); //主机不应答
ads1110Stop();
// WriteStrComm02(3,adc );
#asm("sei");
if(adc[2]==0x0c)
{
p=(unsigned char *)&ADS1110ad;
*(p+0)=adc[1];
*(p+1)=adc[0];
/* adstrs[0]='(';
adstrs[1]=ADS1110ad/10000+0x30;
adstrs[2]=(ADS1110ad%10000)/1000+0x30;
adstrs[3]=(ADS1110ad%1000)/100+0x30;
adstrs[4]=(ADS1110ad%100)/10+0x30;
adstrs[5]=ADS1110ad%10+0x30;
adstrs[6]=')';
WriteStrComm02(7,adstrs );*/
return(0);
}
else
return(1);
}
#asm("sei");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -