sbit AdClk = P2^7; /* AD7705 时钟脉冲 */
sbit AdDout = P2^4; /* AD7705 数据输出的反相脉冲 */
sbit AdDin = P2^4; /* AD7705 数据输入脉冲 */
sbit AdRet = P2^6; /* AD7705 RESET */
sbit AdDrdy = P2^5; /* AD7705 DRDY */
/* 功能:延时3 AD7705软件延时 */
void Waitus(unsigned int yanshi4)
{
for(;yanshi4>0;yanshi4-- );
}
/* AD7705功能函数 */
/* 功能:向AD7705写入一个字节 */
void WriteByte7705(unsigned char x)
{
unsigned char i;
AdClk = 1;
for (i=0;i<8;i++)
{
AdClk=0;
Waitus(1);
AdDin =(bit) (x & 0x80);
Waitus(1);
AdClk=1;
Waitus(1);
x<<=1;
}
}
/* 功能:从AD7705读一个16位数 */
unsigned int ReadWord7705(void)
{
unsigned char i;
unsigned int x ;
AdClk = 1 ;
for (i=0,x=0;i<16;i++)
{
AdClk=0;
Waitus(1);
x<<=1;
if (AdDout==1) //判断AD输出为1
x |= 0x01;
AdClk=1;
Waitus(1);
}
return x;
}
/* 功能:AD7705通信端口复位 */
void Reset7705(void)
{
unsigned char i;
for(i=0;i<35;i++)
{ /* 多于连续32个 DIN=1 使串口复位 */
AdClk=0;
Waitus(1);
AdDin=1;
Waitus(1);
AdClk=1;
Waitus(1);
}
}
/**AD7705初始化 输入通道channel--1=IN1,2=IN2;非缓冲模式***************/
void Init7705(unsigned char channel)
{
Reset7705(); /* 防止串口失步 */
if(channel==1) /* com register ,选择下步操作 setup register */
{
WriteByte7705(0x20);
WriteByte7705(0x0D);
WriteByte7705(0x10);
WriteByte7705(0x40);
}
else
{
WriteByte7705(0x21);
WriteByte7705(0x0D);
WriteByte7705(0x11);
WriteByte7705(0x40);
}
}
/* 读AD7705转换数据 输入通道channel ----1=IN1,2=IN2 */
unsigned int GetData7705(unsigned char channel)
{
if(channel==1)
WriteByte7705(0x38);
else
WriteByte7705(0x39);
return ( ReadWord7705() );
}
/* AD7705功能函数结束 */
|