📄 ad1110_.c
字号:
#include "Def_.h"
/*----------------------------------------------------
读取模拟电压值,ic元件为AD1110,IIC方式通讯
----------------------------------------------------*/
#define USE_AD_I2C_DRIVER 1
#if USE_AD_I2C_DRIVER
static unsigned char AdI2cSerIn(unsigned char x);
static unsigned char AdI2cSerOut(unsigned char ack);
static unsigned char AdI2cBusyCheck(unsigned char icAddr);
static void AdI2cStart(void);
static void AdI2cStop(void);
static void AdI2cClk(void);
static void AdI2cNop(void);
static void AdI2cNop(void)
/*
IIC延时函数
*/
{
_nop_();
_nop_();
}
static void AdI2cStart(void)
/*
IIC开始函数
*/
{
//while PAdI2cClk=1,PAdI2cDat=1->0
PAdI2cClk=0;
PAdI2cDat=1;
AdI2cNop();
PAdI2cClk=1;
AdI2cNop();
PAdI2cDat=0;
AdI2cNop();
PAdI2cClk=0;
}
static void AdI2cStop(void)
/*
IIC停止函数
*/
{
//while scl=1,sda=0->1
PAdI2cClk=0;
PAdI2cDat=0;
AdI2cNop();
PAdI2cClk=1;
AdI2cNop();
PAdI2cDat=1;
AdI2cNop();
PAdI2cClk=0;
}
static void AdI2cClk(void)
/*
IIC的时钟脉冲函数
*/
{
AdI2cNop();
PAdI2cClk=1;
AdI2cNop();
PAdI2cClk=0;
}
static unsigned char AdI2cSerIn(unsigned char x)
/*
向IIC写入一个字节信息
*/
{
unsigned char i;
unsigned char result;
for(i=8;i;i--)
{
PAdI2cDat=x&0x80;
x<<=1;
AdI2cClk();
}
PAdI2cDat=1;
AdI2cNop();
if(PAdI2cDat) result = 0;
else result = 1;
AdI2cClk();
return (result);
}
#define CHECK_IIC_TIMES 20
static unsigned char AdI2cBusyCheck(unsigned char icAddr)
/* 返回非零表示IIC忙线 */
{
unsigned char i;
for(i=0;i<CHECK_IIC_TIMES;i++)
{
AdI2cStart();
if(AdI2cSerIn(icAddr)) break;
}
if(CHECK_IIC_TIMES == i) return 1;
else return 0;
}
static unsigned char AdI2cSerOut(unsigned char ack)
/*
从IIC读出一个字节信息
*/
{
unsigned char i,val;
PAdI2cDat=1;
for(i=8;i;i--)
{
val<<=1;
if(PAdI2cDat) val++;
AdI2cClk();
}
if(ack)
{
PAdI2cDat=0;
AdI2cClk();
}
return(val);
}
#endif
unsigned char RdAdI2cIc(unsigned char icAddr,unsigned int* x)
/*
读取AD1110的电压数字值
*/
{
if(AdI2cBusyCheck(icAddr)) return 0;
AdI2cStart();
AdI2cSerIn(icAddr+1);
*x = AdI2cSerOut(1)<<8;
*x += AdI2cSerOut(1);
AdI2cSerOut(0);
AdI2cStop();
return 1;
}
unsigned char AdWrCfg(unsigned char icAddr)
/*
写入AD1110的配置字
*/
{
if(AdI2cBusyCheck(icAddr)) return 0;
AdI2cSerIn(AD1110_CONFIG_CMD);
AdI2cStop();
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -