📄 ads1100.h
字号:
/**********************************************/
/**** ADS1100.H ***********/
/**** Written by WangBiao---20060308 *******/
/**********************************************/
#include <AT89X51.H>
#include <intrins.h>
//-------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//-------------------------------------------------------
sbit SDA=P2^7;// 将p2.7口模拟数据口
sbit SCL=P2^6;// 将p2.6口模拟时钟口
//-------------------外部函数-----------------------------
void Init_ads1100(unsigned char mdata);
unsigned int Rd_ads1100(void);
//-------------------------------------------------------
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//-------------------内部函数----------------------------
void Delay(void);
void Start(void);
void Stop(void);
void WriteACK(unsigned char ack);
void WaitACK(void);
void writebyte(unsigned char wdata);
unsigned char Readbyte(void);
//-------------------------------------------------------
/********************************************
初始化ads1100(0x8C)----------外部调用
********************************************/
void Init_ads1100(unsigned char mdata)
{ Start();
writebyte(0x90);
writebyte(mdata);
Stop();
}
/********************************************
读数据----------------外部调用
********************************************/
unsigned int Rd_ads1100(void)
{ unsigned char H_AD; //H_AD 用于存储高八位A/D转换结果
unsigned char L_AD; //L_AD 用于存储低八位A/D转换结果
unsigned int T_AD; //T_AD 用于存储总的A/D转换结果
Start();
writebyte(0x91); /*写命令*/
H_AD=Readbyte();
WriteACK(0);
L_AD=Readbyte();
WriteACK(1);
Stop();
T_AD=(0x00ff&H_AD)<<8|L_AD;
return T_AD;
}
/********************************************
内部函数,延时1
********************************************/
void Delay(void)
{
_nop_();
_nop_(); /*根据晶振频率制定延时时间*/
}
/********************************************
内部函数,I2C开始
********************************************/
void Start(void)
{ EA=0;
SDA=1;
SCL=1;
Delay();
SDA=0;
Delay();
SCL=0;
}
/********************************************
内部函数,I2C结束
********************************************/
void Stop(void)
{
SDA=0;
SCL=0;
Delay();
SCL=1;
Delay();
SDA=1;
Delay();
EA=1;
}
/********************************************
内部函数,输出ACK ,每个字节传输完成,输出ack=0,结束读数据,ack=1;
********************************************/
void WriteACK(unsigned char ack)
{
SDA=ack;
Delay();
SCL=1;
Delay();
SCL=0;
}
/********************************************
内部函数,等待ACK
********************************************/
void WaitACK(void)
{ unsigned char errtime=20;
SDA=1;
Delay(); /*读ACK*/
SCL=1;
Delay();
while(SDA)
{ errtime--;
if(!errtime) Stop();
}
SCL=0;
Delay();
}
/********************************************
内部函数.输出数据字节
入口:B=数据
********************************************/
void writebyte(unsigned char wdata)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(wdata&0x80) SDA=1;
else SDA=0;
wdata<<=1;
SCL=1;
Delay();
SCL=0;
}
WaitACK(); //I2C器件或通讯出错,将会退出I2C通讯
}
/********************************************
内部函数.输入数据
出口:B
********************************************/
unsigned char Readbyte(void)
{
unsigned char i,bytedata;
SDA=1;
for(i=0;i<8;i++)
{
SCL=1;
bytedata<<=1;
bytedata|=SDA;
SCL=0;
Delay();
}
return(bytedata);
}
//----------------ADS1100.H END----------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -