⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ads1100.h

📁 这个是一个用Keil C51编写的16位串行AD芯片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 + -