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

📄 ad7705.c

📁 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转换数据函数--------------------------
//入口参数:无
//出口参数:去掉最大值和最小值后的平均值(5个数据)
//--------------------------------------------------------------------------
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,将下一次操作设为写时钟寄存器
 write_AD7705_byte(0x01);//写时钟寄存器,不分频,更新频率25Hz
 write_AD7705_byte(0x10);//写通信寄存器,选择通道1
 write_AD7705_byte(0x3e);//写设置寄存器4,单极性,非缓冲模式,清除滤波器同步,不启动对1通道的自校准
 while(ad7705_rdy);     //等待转换结束
 write_AD7705_byte(0x38);//写通信寄存器,下一次操作为读数据寄存器
 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;
    }
   }
 }//排序程序结束
 temp=((unsigned long)fiter[1]+fiter[2]+fiter[3])/3;
 fiter_d=(unsigned int) temp;
 return fiter_d;
}
//----------------------------------------------------------------------------
//函数:reset_AD7705
//功能:AD7705串行接口失步后将其复位。复位后要延时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);
}

//------------------------------------------------------------------------------------------
//函数:write_AD7705_byte
//功能:往AD7705写8位数据
//------------------------------------------------------------------------------------------
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;
  }
}
//------------------------------------------------------------------------------------------
//函数:read_AD7705_word
//功能:从AD7705读一个字的数据,共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;
}
//------------------------------------------------------------------------------------------
//函数:AD7705_ini
//功能:AD7705初始化
//------------------------------------------------------------------------------------------
void ad7705_ini()
{
 reset_AD7705();
 write_AD7705_byte(0x20);//写通信寄存器,选择通道1,将下一次操作设为写时钟寄存器
 write_AD7705_byte(0x01);//写时钟寄存器,不分频,更新频率25Hz
 write_AD7705_byte(0x10);//写通信寄存器,选择通道1
 write_AD7705_byte(0x7e);//写设置寄存器4,单极性,非缓冲模式,清除滤波器同步,启动对1通道的自校准
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -