• 大小: 2KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-06
  • 语言: 其他
  • 标签: AD7705  

资源简介

自己写的51单片机AD7705程序。板子上验证通过,需要的拿去修改移植。欢迎批评指正。

资源截图

代码片段和文件信息

#include
#include
#include
/*--- 延时程序,大约微秒级别  ---*/
void Delay_Us(unsigned int us)
{
for(;us>0;us--);
}

/*--- 延时程序,大约毫秒级别  ---*/
void Delay_Ms(unsigned int ms)
{
for(;ms>0;ms--)
Delay_Us(300);
}

/*--- 软件模拟SPI的时序,单片机写数据函数 ---*/
//dat-->要发送的数据
//void SPISendByte(unsigned char dat)   //SPI发送
//{
// unsigned char i;
//// CS = 0;  CS接地了,一直是低
// SCLK=1;
// SCLK=1;
//
// for(i=0;i<8;i++)  //8位数据
// {
// DIN = dat&0x80;
// SCLK = 0;//时钟,低电平时给数据
// SCLK = 0;
// SCLK = 1;
// dat = dat<<1; //移位,下一位移到最高位做准备
// SCLK=1;
// }
//}

void SPISendByte(unsigned char dat)
{
 unsigned char a;
 SCLK = 1;
 for (a=0; a<8; a++)
 {
  SCLK=0;
  if(dat & 0x80)
  DIN=1;
  else
  DIN=0;
  _nop_();
  _nop_();
  SCLK=1;    
  _nop_();
  _nop_();
  dat<<=1;
 }
 DIN=1;
}

/*--- 软件模拟SPI,读数据的程序  ---*/
/*--- 入口参数:无
      返回参数:接收的数据,一个字节8位  ---*/
//unsigned char SPIRecvByte(void)  //SPI接收
//{
// unsigned char dat = 0;
// unsigned char i;
//// CS = 0;
//
// for(i=0;i<8;i++)  //8位满了就跳出
// {
// dat = dat<<1;//接收到的放在最低位,再移到高位,空出第一位
//
// SCLK = 1;
// SCLK = 1;
// SCLK = 0; //低电平的时候读取数据
// SCLK = 0;
// 
// if(DOUT)
// dat = dat | 0x01;//SO给的1就写1到dat最低位
// else
// dat = dat & 0xFE;//SO给的0就写0到dat最低位,其他位要移出的不管 
// }
//
// SCLK = 1; 
// return dat;
//}

/*--- 软件模拟SPI,读数据的程序  ---*/
/*--- 入口参数:无
      返回参数:接收的数据,16位  ---*/
unsigned int SPIRecv16bit(void)  //SPI接收
{
unsigned int dat = 0;
unsigned char i;
// CS = 0;

for(i=0;i<16;i++)  //8位满了就跳出
{
dat = dat<<1;//接收到的放在最低位,再移到高位,空出第一位

SCLK = 1;
SCLK = 1;
SCLK = 0; //低电平的时候读取数据
SCLK = 0;
 
if(DOUT)
dat = dat | 0x0001;//SO给的1就写1到dat最低位
else
dat = dat & 0xFFFE;//SO给的0就写0到dat最低位,其他位要移出的不管 
}

SCLK = 1; 
return dat;
}


/*---------------------------------------------------------------------------- */
//函数:reset_AD7705
//功能:AD7705串行接口失步后将其复位。复位后要延时500us再访问
//参数:无
//返回:无
//变量:无
//备注: DIN高电平的写操作持续足够长的时间,至少32个串行时钟周期AD7705将会回到默认状态
//----------------------------------------------------------------------------
void reset_AD7705(void)
{
      unsigned char i;
      SPISendByte(0x01);//下一步写操作
      DIN=1;
      for(i=0; i<36; i++)
      {
          SCLK=0;
  SCLK=0;
          SCLK=1;
      }     
      Delay_Us(160);//500US
}


//配置芯片通道1,并开始校准
void AD7705_init1(void)
{
 reset_AD7705();
// Delay_Ms(1);
 SPISendByte(0x20);//0X21择通道2,0x20通道1,下一步写时钟寄存器
 SPISendByte(0x04); //主时钟使能,更新率25HZ
 SPISendByte(0x10);//0X11选择通道2,0x10选择通道1.下一步写设置寄存器
 SPISendByte(0x44); //自校准模式,单极性,不使用缓冲器。开始转换
 while(DRDY);
}
//配置芯片通道2,并开始校准
void AD7705_init2(void)
{
 reset_AD7705();
//  Delay_Ms(1);
 SPISendByte(0x21);//0X21择通道2,0x20通道1,下一步写时钟寄存器
 SPISendByte(0x06); //主时钟使能,更新率250HZ
 SPISendByte(0x11);//0X11选择通道2,0x10选择通道1.下一步写设置寄存器
 SPISendByte(0x44); //自校准模式,单极性,不使用缓冲器。开始转换
 while(DRDY);
}

//读取一次16位data
unsigned int Read_datareg1(vo

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4073  2013-12-13 09:14  ad7705.c
     文件        1228  2013-12-12 10:21  ad7705.h

评论

共有 条评论