?? 7705._h
字號:
#include"delay.h"
#define N 7
/****************************************************************************/
//功能: AD7705與Atmega64硬件接口
//輸入: 無
//輸出: 無
//備注:
/****************************************************************************/
#define sclk_set (PORTD|=(1<<0))
#define sclk_clr (PORTD&=~(1<<0))
#define din_set (PORTD|=(1<<1))
#define din_clr (PORTD&=~(1<<1))
#define dout (PIND&(1<<2) )
#define drdy (PIND&(1<<3) )
/****************************************************************************/
//功能: AD7705各功能模塊函數
//輸入: 無
//輸出: 函數名
//備注:
/****************************************************************************/
void init_adc7705(void);
void write_adc7705(unsigned char cmd_data);
unsigned int read_adc7705(unsigned char channel);
/****************************************************************************/
//函數名: init_adc7705(void)
//功能: 初始化ADC7705
//輸入: 無
//輸出: 無
//備注:
/****************************************************************************/
void init_adc7705(void)
{
unsigned char i;
sclk_set;
din_set;
for(i=0;i<40;i++)
{sclk_clr;sclk_set;} //防止接口迷失,通信寄存器返回到等待狀態
write_adc7705(0x20); //通道1,下一個寫時鐘寄存器
write_adc7705(0x06); //寫時鐘寄存器設置更新速率為250HZ
write_adc7705(0x10); //通道1,下一個寫設置寄存器
write_adc7705(0x44); //寫設置寄存器,設置成單極性、無緩沖、增益為1、濾波器工作、自校準
delay_nms(100);
}
/****************************************************************************/
//函數名: write_adc7705(unsigned char cmd)
//功能: 寫控制字到ADC7705寄存器中
//輸入: cmd
//輸出: 無
//備注:
/****************************************************************************/
void write_adc7705(unsigned char cmd_data)
{
unsigned char cmd,i,token;
token=0x80;cmd=cmd_data;
sclk_set;
for(i=0;i<8;i++)
{
sclk_clr;
delay_nus(2);
if(cmd&token) din_set;
else din_clr;
delay_nus(2);
sclk_set;
delay_nus(5);
token=token>>1;
}
sclk_set;din_set;
}
/****************************************************************************/
//函數名: read_adc7705(void)
//功能: 寫控制字到ADC7705寄存器中
//輸入: channel
//輸出: 無
//備注:
/****************************************************************************/
unsigned int read_adc7705(unsigned char channel)
{
unsigned int ad16bit,token;
unsigned char i;
write_adc7705(0x38|channel);
while(drdy){;} //等待數據準備好
sclk_set;
ad16bit=0x00;
for(i=0;i<16;i++)
{ ad16bit=ad16bit<<1;
sclk_clr;
delay_nus(2);
if(dout) ad16bit=ad16bit|0x01; //讀取數據位
delay_nus(2);
sclk_set;
delay_nus(5);
}
sclk_set;din_set;
return(ad16bit);
}
/****************************************************************************/
//函數名: ad7705()
//功能: 實現模數轉換
//輸入: chan(通道)
//輸出: adc16(經ADC轉換后的16位2進制數)
//備注:
/****************************************************************************/
unsigned int ad7705(unsigned char chan)
{
unsigned int adc16=0;
unsigned int value_buf[N],temp;
unsigned char count,i,j;
for(count=0;count<N;count++)
{
init_adc7705();
adc16=read_adc7705(0);
value_buf[count]=adc16;
}
/***********************冒泡排序找出中值*************************************/
for (j=0;j<N-1;j++)
{
for (i=0;i<N-j;i++)
{
if ( value_buf[i]>value_buf[i+1] )
{
temp=value_buf[i];
value_buf[i]=value_buf[i+1];
value_buf[i+1]=temp;
}
}
}
return value_buf[(N-1)/2];
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -