?? ads1100.c
字號:
//ADS1100 應(yīng)用程序
#include <reg52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*--------------------------------------------------*/
sbit SDA=P3^5;//I2C數(shù)據(jù)線
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中讀數(shù)據(jù)
//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;
}
//發(fā)送ACK
void I2CSendAck(void)
{
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
}
//發(fā)送NOT ACK
void I2CSendNotAck(void)
{
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
}
//發(fā)送一個字節(jié)
void I2CSendChar(uchar cSendByte)
{
uchar data i=8;
while(i--)
{
SCL=0;
SDA=(bit)(cSendByte & 0x80); //高位在先
cSendByte<<=1;
SCL=1;
_nop_();
}
SCL=0;
}
//接收一個字節(jié)
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();//等應(yīng)答
I2CSendChar(0x8c);//寫配置字:連續(xù)轉(zhuǎn)換,轉(zhuǎn)換速率為8SPS,增益為1
I2CWaitAck();//等應(yīng)答
I2CStop();//結(jié)束
}
//從ads1100中讀數(shù)據(jù)
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();//等應(yīng)答
TMR1H=I2CReceiveByte();
I2CSendAck();
TMR1L=I2CReceiveByte();
I2CSendAck();
TMR2=I2CReceiveByte();
I2CSendNotAck();
I2CStop();
result=TMR1H*256+TMR1L;
return result;
}
/*-------------------------------------------------
主函數(shù)
-------------------------------------------------*/
void main(void)
{
uint advalue;
while(1)
{
Wr_Ads1100_Cfg();//寫器件配置字
advalue=Rd_Ads1100_Data();//讀數(shù)據(jù)
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -