?? ad7705.c
字號:
#include <ad7705.h>
/*
void Delay(unsigned int t)
{
do
{
TH0 = 0xDC;
TL0 = 0x00;
TR0 = 1;
while ( !TF0 );
TF0 = 0;
TR0 = 0;
} while (--t);
}*/
/*
void main()
{
while(1)
{
unsigned int dat[5];
unsigned char j;
for(j=0;j<5;j++)
{
dat[j]= ReadData7705();
}
_nop_();
}
}*/
//--------------------------------------------------------------------------
//-------------------------讀取AD7705轉(zhuǎn)換數(shù)據(jù)函數(shù)--------------------------
//入口參數(shù):無
//出口參數(shù):去掉最大值和最小值后的平均值(5個數(shù)據(jù))
//--------------------------------------------------------------------------
unsigned int ReadData7705()
{
unsigned int fiter[5],fiter_d;
unsigned char read_num;
unsigned long temp;
bit sort_flag;
ad7705_ini();
for(read_num=0;read_num<5;read_num++)
{
reset_AD7705();
write_AD7705_byte(0x20);//寫通信寄存器,選擇通道1,將下一次操作設(shè)為寫時鐘寄存器
write_AD7705_byte(0x01);//寫時鐘寄存器,不分頻,更新頻率25Hz
write_AD7705_byte(0x10);//寫通信寄存器,選擇通道1
write_AD7705_byte(0x3e);//寫設(shè)置寄存器4,單極性,非緩沖模式,清除濾波器同步,不啟動對1通道的自校準(zhǔn)
while(ad7705_rdy); //等待轉(zhuǎn)換結(jié)束
write_AD7705_byte(0x38);//寫通信寄存器,下一次操作為讀數(shù)據(jù)寄存器
fiter[read_num]= read_AD7705_word();
}
sort_flag = 1;//排序程序
while( sort_flag )
{
unsigned char i;
sort_flag = 0;
for( i=0; i<4; i++ )
{
if( fiter[i] > fiter[i+1] )
{
fiter_d = fiter[i];
fiter[i] = fiter[i+1];
fiter[i+1] = fiter_d ;
sort_flag = 1;
}
}
}//排序程序結(jié)束
temp=((unsigned long)fiter[1]+fiter[2]+fiter[3])/3;
fiter_d=(unsigned int) temp;
return fiter_d;
}
//----------------------------------------------------------------------------
//函數(shù):reset_AD7705
//功能:AD7705串行接口失步后將其復(fù)位。復(fù)位后要延時500us再訪問
//----------------------------------------------------------------------------
void reset_AD7705()
{
unsigned char i;
ad7705_din=1;
for( i=0; i<36; i++ )
{
ad7705_clk=0;
_nop_();
_nop_();
_nop_();
ad7705_clk=1;
_nop_();
_nop_();
_nop_();
}
//Delay(5);
}
//------------------------------------------------------------------------------------------
//函數(shù):write_AD7705_byte
//功能:往AD7705寫8位數(shù)據(jù)
//------------------------------------------------------------------------------------------
void write_AD7705_byte(unsigned char wr_dat)
{
unsigned char i;
for(i=0; i<8;i++)
{
ad7705_clk=0;
_nop_();
_nop_();
_nop_();
ad7705_din=(bit)(wr_dat&0x80);
_nop_();
_nop_();
_nop_();
ad7705_clk=1;
_nop_();
_nop_();
_nop_();
wr_dat=wr_dat<<1;
}
}
//------------------------------------------------------------------------------------------
//函數(shù):read_AD7705_word
//功能:從AD7705讀一個字的數(shù)據(jù),共16bit
//------------------------------------------------------------------------------------------
unsigned int read_AD7705_word()
{
unsigned int read_dat=0;
unsigned char i;
for(i=0;i<16;i++)
{
read_dat=read_dat<<1;
ad7705_clk=0;
_nop_();
_nop_();
_nop_();
if(ad7705_dout)read_dat++;
_nop_();
_nop_();
_nop_();
ad7705_clk=1;
_nop_();
_nop_();
_nop_();
}
return read_dat;
}
//------------------------------------------------------------------------------------------
//函數(shù):AD7705_ini
//功能:AD7705初始化
//------------------------------------------------------------------------------------------
void ad7705_ini()
{
reset_AD7705();
write_AD7705_byte(0x20);//寫通信寄存器,選擇通道1,將下一次操作設(shè)為寫時鐘寄存器
write_AD7705_byte(0x01);//寫時鐘寄存器,不分頻,更新頻率25Hz
write_AD7705_byte(0x10);//寫通信寄存器,選擇通道1
write_AD7705_byte(0x7e);//寫設(shè)置寄存器4,單極性,非緩沖模式,清除濾波器同步,啟動對1通道的自校準(zhǔn)
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -