Professional Documents
Culture Documents
基于51的ads1115程序
基于51的ads1115程序
*----------------------------------------------------------------------------------------------------------------------------------------
--*/
/*--************************* ADS1115 ********************--*/
/*--*************************CPU STC12C5A60S2*******************************--*/
/*--*************************ADC ADS11152 4 ***********--*/
/*--************************* LCD1602************************************--*/
/*--*************************ADC SCL:P1.0 , SDA:P1.1*******************--*/
/*--*************************0.004.99V*********************************--*/
/
*----------------------------------------------------------------------------------------------------------------------------------------
*/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define _Nop() _nop_()
#define TRUE 1
#define FALSE 0
/************POINTER REGISTER*****************/
#define Pointer_0 0x00 //Convertion register
#define Pointer_1 0x01 //Config register
#define Pointer_2 0x02 //Lo_thresh register
#define Pointer_3 0x03 //Hi_thresh register
/************CONFIG REGISTER*****************/
#define OS_0 0x0000
#define OS_1 0x8000
//*************ADDR Initial********************/
#define ADDRESS ADDRESS_0 //ADDR PIN ->GND
#define ADDRESS_W ADDRESS|0x00 //
#define ADDRESS_R ADDRESS|0x01 //
/*************Config Initial*********************/
#define OS OS_1
#define MUX_A0 MUX_4 //AINp=AIN0, AINn=GND
#define MUX_A1 MUX_5 //AINp=AIN1, AINn=GND
#define MUX_A2 MUX_6 //AINp=AIN2, AINn=GND
#define MUX_A3 MUX_7 //AINp=AIN3, AINn=GND
#define PGA PGA_1 //FS=6.144V
#define MODE MODE_1 //Continuous conversion mode
#define DR DR_7 //Data Rate = 860
#define COMP_QUE COMP_QUE_3
/*--------------------------------------------------------------------------------------------------------------------------------*/
/*--********************************* *******************************--*/
/*-------------------------------------------------------------------------------------------------------------------------------*/
void main()
{
unsigned int result;
lcd_system_reset(); //LCD1602
lcd_bad_check(); //LCD1602
while(1)
{
result = ADS1115(0,0); //ADS1115 _AIN0
//result = ADS1115(0,1); //ADS1115 _AIN1
//result = ADS1115(1,0); //ADS1115 _AIN2
//result = ADS1115(1,1); //ADS1115 _AIN3
LcdDisp(result); //LCD1602
}
}
/*--------------------------------------------------------------------------------------------------------------------------------*/
/*--****************************************************************************--*/
/*-------------------------------------------------------------------------------------------------------------------------------*/
/*
pos_char_table[6] = num_char_table[Num / 10000]; //Start_2
pos_char_table[7] = num_char_table[(Num % 10000) / 1000];
pos_char_table[8]= num_char_table[((Num % 10) % 1000) / 100];
pos_char_table[9]= num_char_table[(Num / 10) % 10];
pos_char_table[A]= num_char_table[Num % 10]; //Over_2
*/
}
for (i=0;i<16;i++)
{
lcd_char_write(i,0,Lcd_Dis1_table[i]); //
}
Num_to_Disp(num);
for(i = 6; i < 12; i++)
{
lcd_char_write(i,0,pos_char_table[i]); //, pos_char_table
}
delay_1ms(100);
}
SDA=1;
_nop_(); _nop_();
SCL=1;
_nop_(); _nop_();
_nop_(); _nop_();
slaveack = SDA; // SDA
SCL=0;
Delay_us_15 ();
/***************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()) // Check(void)
{
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++) // n
{
readbuff[i]=Read_1_Byte(); // readbuff ,readbuff 0&1????
if(i==n-1)
NACK(); //
else
ACK(); //
}
Stop();
}
//***********************************/
void InitADS1115(bit S_MUX_0, bit S_MUX_1)
{
Writebuff[0]=ADDRESS_W;
Writebuff[1]=Pointer_1;
Writebuff[2]=Config/256;
Writebuff[3]=Config%256;
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 Result->readbuff
}
//***************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;
}