#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit ADS1100_SDA = P1^0;
sbit ADS1100_SCL = P1^1;
uchar ACK;
uchar COVER_DATA_H,COVER_DATA_L;
//uchar COVER_SETUPBYTE;
void delay_1ms(uint x)
{
uint j;
uchar i;
for(j=0;j<x;j++)
{
for(i=0;i<120;i++);
}
}
void start_iic (void) //开始
{
ADS1100_SDA=1;
_nop_();
ADS1100_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void stop_iic(void) //结束
{
_nop_();
_nop_();
_nop_();
ADS1100_SDA=1;
_nop_();
_nop_();
_nop_();
ADS1100_SCL=0;
}
uchar check_ACK(void) // 检查应答信号
{
uchar i;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
for (i=0;i<15;i++)
{
if (ADS1100_SDA==1)
{
ACK=1;
}
else
{
ACK=0;
}
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SDA=1;
return ACK;
}
void send_byte(uchar send_data) // 发送一个字节
{
uchar send_count=8; //发送8位
do
{ _nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if((send_data&0x80)==0x80)
{
ADS1100_SDA=1; //写 1
}
else
{
ADS1100_SDA=0; //写 0
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=1;
_nop_();
_nop_();
_nop_();
send_data=send_data<<1;
count--;
ADS1100_SCL=0;
} while(send_count);
}
uchar recive_byte(void) //接受一个字节
{
uchar rdata=0;
uchar recive_count=8;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
do
{
if(ADS1100_SDA) //读 1
{
rdata=rdata|0x01;
}
else //读 0
{
rdata=rdata&0xfe;
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=0;
ADS1100_SDA=1;
if(recive_count1-1)
{
rdata=rdata<<1;
}
recive_count--;
}while(recive_count);
return rdata;
}
void ADS1100_ack(void) // 发送应答信号
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void ADS1100_nack(void) // 发送非应答信号
{
ADS1100_SDA=0;
ADS1100_SCL=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ADS1100_SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void write_iic(uchar setup_data) //写地址和配置字
{
start_iic(); //开始
send_byte(0x90); //写器件地址(写)
do{
;
}while(check_ACK()); //等待应答
send_byte(setup_data); //写配置字
do{
;
}while(check_ACK());
stop_iic(); //结束
}
void read_iic(void) //从ADS1100中读出数据
{
start_iic(); //开始读
send_byte(0x91); //写器件地址(读)
do{
;
}while(check_ACK());
COVER_DATA_H=recive_data(); // 读高8位
ADS1100_ack(); //连续读
COVER_DATA_L=recive_data(); //读低8位
//ADS_ack(); //连续读
//COVER_SETUPBYTE=recive_data(); //读配置字
ADS1100_nack();
stop_iic(); //结束读
}
float adc()
{
uchar i;
float result;
write_iic(0x9c);
for (i=0;i<10;i++)
delay_1ms(130);
read_iic();
result=((((uint)COVER_DATA_H)<<8)+(uint)COVER_DATA_L)*0.1526;
return result;
}
void main()
(
float adc_data;
adc_data=adc();
}