📄 ads1100.c
字号:
//ADS1100 应用程序
#include <reg52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*--------------------------------------------------*/
sbit SDA=P3^5;//I2C数据线
sbit SCL=P3^4;//I2C时钟线
void I2CStart(void);
void I2CStop(void);
bit I2CWaitAck(void);
void I2CSendAck(void);
void I2CSendNotAck(void);
void I2CSendByte(void);
uchar I2CReceiveByte(void);
void Wr_Ads1100_Cfg(void);//写器件配置字
uint Rd_Ads1100_Data(void);//从ads1100中读数据
//I2C 起始条件
void I2CStart(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
SCL=0;
}
//I2C 停止条件
void I2CStop(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
SCL=0;
}
//等待I2C从器件的ACK
bit I2CWaitAck(void)
{
uchar cErrTime=255;
SDA=1;
_nop_();
SCL=1;
while(SDA)
{
cErrTime--;
if (cErrTime==0)
{
I2CStop();
return 1;
}
}
SCL=0;
return 0;
}
//发送ACK
void I2CSendAck(void)
{
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
}
//发送NOT ACK
void I2CSendNotAck(void)
{
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
}
//发送一个字节
void I2CSendChar(uchar cSendByte)
{
uchar data i=8;
while(i--)
{
SCL=0;
SDA=(bit)(cSendByte & 0x80); //高位在先
cSendByte<<=1;
SCL=1;
_nop_();
}
SCL=0;
}
//接收一个字节
uchar I2CReceiveByte(void)
{
uchar data i=8;
uchar data cR_Byte=0;
SDA=1;
while(i--)
{
cR_Byte<<=1;
SCL=0;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
cR_Byte|=(uchar)SDA;
}
SCL=0;
return cR_Byte;
}
//写器件配置字
void Wr_Ads1100_Cfg(void)
{
I2CStart();
I2CSendChar(0x90);//写地址:1001 000 0 固定码1001,地址为000,写命令为0
I2CWaitAck();//等应答
I2CSendChar(0x8c);//写配置字:连续转换,转换速率为8SPS,增益为1
I2CWaitAck();//等应答
I2CStop();//结束
}
//从ads1100中读数据
uint Rd_Ads1100_Data(void)
{
uint result;
uchar TMR1H;//输出高8位
uchar TMR1L;//输出低8位
uchar TMR2;//控制寄存器
I2CStart();
I2CSendChar(0x91);//写地址:1001 000 1 固定码1001,地址为000,读命令为1
I2CWaitAck();//等应答
TMR1H=I2CReceiveByte();
I2CSendAck();
TMR1L=I2CReceiveByte();
I2CSendAck();
TMR2=I2CReceiveByte();
I2CSendNotAck();
I2CStop();
result=TMR1H*256+TMR1L;
return result;
}
/*-------------------------------------------------
主函数
-------------------------------------------------*/
void main(void)
{
uint advalue;
while(1)
{
Wr_Ads1100_Cfg();//写器件配置字
advalue=Rd_Ads1100_Data();//读数据
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -