📄 7705.h
字号:
#include"delay.h"
#define N 7
/****************************************************************************/
//功能: AD7705与Atmega64硬件接口
//输入: 无
//输出: 无
//备注:
/****************************************************************************/
#define sclk_set (PORTF|=(1<<0))
#define sclk_clr (PORTF&=~(1<<0))
#define din_set (PORTF|=(1<<1))
#define din_clr (PORTF&=~(1<<1))
#define dout (PINF&(1<<2) )
#define drdy (PINF&(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 + -