⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7705.h

📁 基于mega128上实现ad7705的驱动程序
💻 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 + -