?? ad7705.c
字號:
#include"reg52.h"
#include"IOCfg.c"
#include"delay.h"
#include"Config.h"
#include"AD7705.h"
#include "intrins.h"
/************************************************************************************
復(fù)位AD7705
************************************************************************************/
void rst_ad()
{
AD_DRDY = 1;
AD_CLK = 1;
AD_DIN = 1;
AD_DOUT = 1;
//AD_RST = 0;
delay(300);
AD_RST = 1;
write_ad(0xff);
write_ad(0xff);
write_ad(0xff);
write_ad(0xff);
write_ad(0xff);
delay(500);
}
/************************************************************************************
寫1字節(jié)到AD7705
************************************************************************************/
write_ad(uchar i)
{
uchar a;
for(a = 8;a > 0;a--)
{
if((i & 0x80) == 0)
{
AD_DIN = 0;
}
else
{
AD_DIN = 1;
}
i <<= 1;
AD_CLK = 0;
_nop_();
_nop_();
_nop_();
AD_CLK = 1;
}
}
/************************************************************************************
設(shè)置AD7705通道
* 0 為第一通道
* 1 為第二通道
//MD1(0) 工 作 模 式
//MD0(0) 工 作 模 式
//G2(0) 增益選擇 0 0 0 0 1 1 1 1
//G1(0) 增益選擇 0 0 1 1 0 0 1 1
//G0(0) 增益選擇 0 1 0 1 0 1 0 1
// 1 2 4 8 16 32 64 128
//B/U(0) 單極性/雙極性工作。“0”表示選擇雙極性操作,“1”表示選擇單極性工作
//BUF(0) 緩沖器控制。“0”表示片內(nèi)緩沖器短路,緩沖器短路后,電源電流降低
// 此位處于高電平時,緩沖器與模擬輸入串聯(lián),輸入端允許處理高阻抗源
//FSYNC(1) 濾波器同步
//設(shè)置40H 雙極性方式 44H 單極性方式
//-----短路濾波器后線性也好了
************************************************************************************/
void set_7705_ch(bit a)
{
if(a == 0)
{
write_ad(0x20);//write_ad(0x20);
write_ad(0x05);
write_ad(0x10);//write_ad(0x10);
write_ad(0x44);//write_ad(0x46);
}
else
{
write_ad(0x20);//write_ad(0x20);
write_ad(0x05);
write_ad(0x10);//write_ad(0x10);
write_ad(0x44);//write_ad(0x46);
}
}
/************************************************************************************
讀1字節(jié)到AD7705
************************************************************************************/
uchar read_ad()
{
uchar temp2;
uchar a;
for(a = 8;a > 0;a--)
{
AD_CLK = 0;
_nop_();
_nop_();
_nop_();
AD_CLK = 1;
_nop_();
_nop_();
_nop_();
temp2 <<= 1;
if(AD_DOUT == 0)
{
temp2 &= 0xfe;
}
else
{
temp2 |= 0x01;
}
}
return temp2;
}
/************************************************************************************
讀AD7705轉(zhuǎn)換后的數(shù)據(jù) ,不檢測DRDY
************************************************************************************/
uint readAD_data()
{
uint temp;
uchar i;
for(i = 16;i > 0;i--)
{
AD_CLK = 0;
_nop_();
_nop_();
_nop_();
AD_CLK = 1;
_nop_();
_nop_();
_nop_();
temp <<= 1;
if(AD_DOUT == 0)
{
temp &= 0xfffe;
}
else
{
temp |= 0x0001;
}
}
return temp;
}
/************************************************************************************
AD的16位整形數(shù)轉(zhuǎn)換成浮點電壓或電流值
************************************************************************************/
float adjisuan_U(uint x)
{
idata float temp1;
temp1 = 11.990 / 0x5e1f;
temp1 = x * temp1;
return temp1;
}
float adjisuan_I(uint x) //
{
idata float temp1;
temp1 = (1.059 + 0.009) / 0x2c03;
//temp1 = (x * temp1) - 0.0039;
temp1 = (x * temp1) - 0.0069 ;
return temp1;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -