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; }
评论
查看更多