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

📄 ad7705源程序.txt

📁 这是在用的AD7705源程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
这是在用的AD7705源程序,基于Meag16单片机,共享给用到AD7705的各位。希望大家相互学习,相互交流。
------------AD7705头文件开始-------------------
#ifndef _AD7705_H
#define _AD7705_H

//通讯寄存器地址定义
#define    WR_SETUP_REG       0x10  //选中写设置寄存器
#define    RD_SETUP_REG       0x18  //选中写设置寄存器
#define    WR_CLOCK_REG    0x20  //选中写时钟寄存器
#define RD_DATA_REG        0x38  //选中数据寄存器读
#define    WR_OFFSET_REG     0x60  //选中写offset寄存器
#define    RD_OFFSET_REG     0x68  //选中读offset寄存器
#define    WR_FULL_REG       0x70  //选中写full scale寄存器
#define    RD_FULL_REG       0x78  //选中读full scale寄存器

#define    SYS_ZERO_CALI    0x80  //系统零校准模式
#define    SYS_FULL_CALI    0xC0  //系统满量程校准模式

#define ZERO_CALIBRATION   0x00 //系统零校准
#define FULL_CALIBRATION   0x01 //系统满量程校准

//CLOCK寄存器设置,无分频,50HZ输出更新速率
#define CLOCK_REG_SET   0X04

//函数声明
void reset_AD7705(void);

unsigned char read_AD7705_byte(void);
unsigned int  read_AD7705_word(void);
unsigned long int read_AD7705_dword(void);

void write_AD7705_byte(unsigned char data);
void write_AD7705_word(unsigned int data);
void write_AD7705_dword(unsigned long int data);

void ReadData7705(unsigned int *const pdata);
void AD7705_calibration(void);
void start_AD7705(void);

#endif

-----------AD7705主文件开始--------------
#include <util/delay.h>
#include <avr/eeprom.h>
#include "ad7705.h"
#include "main.h"
#include "crc16.h"
#include "Usart.h"

//针对四个量程的设置寄存器的设置内容
//(1)对于单极性V级别输入0-5V、0-20mA、0-10V这三个量程,输入范围为0-2V,无极性,增益为1,缓冲模式--0-2V
//(2)对于双极性V级别输入+-2.5V、+-5V这两个量程,输入范围为+-1V,双极性,增益为2,缓冲模式--+-2V
//(3)对于双精度mV级别输入+-500mV,增益为4,双极性,缓冲模式--+-2V
//(4)对双精度mV级别+-50mV,增益为32,双极性,缓冲模式--+-1.6V
//----MD1(0)   MD0(0)   G2(0)   G1(0)   G0(0)   B/U(0)   BUF(0)   FSYNC(0)--------------------// 
const unsigned char text_of_setup[4]={0X06,0X0A,0X12,0X2A}; //缓冲模式,数字滤波同步

extern volatile unsigned char  command[7];   //校准命令全局数组
extern volatile unsigned char  scale;        //记录系统量程
extern volatile unsigned char  NO_CALI_TYPE; //未校准类型
extern volatile unsigned long  int ZS,GS;   //当前量程的校准系数
extern volatile unsigned char  time_count;   //超时标志

//----------------------------------------------------------------------------
//函数:reset_AD7705
//功能:AD7705串行接口失步后将其复位。复位后要延时500us再访问
//参数:无
//返回:无
//变量:无
//备注:无
//----------------------------------------------------------------------------
void reset_AD7705(void)
{
     unsigned char i;
     
     AD_DIN1;
     for( i=0; i<36; i++ )
     {
         AD_CLK0;
         asm("nop");
         asm("nop");
         asm("nop");         
         AD_CLK1;
         asm("nop");
         asm("nop");
         asm("nop");         
     }     
     _delay_us(30);
}

//------------------------------------------------------------------------------------------
//函数:read_AD7705_byte
//功能:从AD7705读一个字节的数据
//参数:无
//返回:读到的一字节数据
//变量:无
//备注:无
//------------------------------------------------------------------------------------------
unsigned char read_AD7705_byte(void)
{
     unsigned char data = 0;
     unsigned char i = 0;
     
     for( i=0; i<8; i++ )
     {
         data <<= 1;
         AD_CLK0;         
         asm("nop");
         asm("nop");
         asm("nop");
         if(AD_DOUT)
         {
             data++;
         }
         AD_CLK1;         
         asm("nop");
         asm("nop");
         asm("nop");
     }     
     return data;    
}

//------------------------------------------------------------------------------------------
//函数:read_AD7705_word
//功能:从AD7705读一个字的数据,共16bit
//参数:无
//返回:读到的一字节数据
//变量:无
//备注:无
//------------------------------------------------------------------------------------------
unsigned int read_AD7705_word(void)
{
     unsigned int data = 0;
     unsigned char i = 0;
     
     for( i=0; i<16; i++ )
     {
         data <<= 1;
         AD_CLK0;         
         asm("nop");
         asm("nop");
         asm("nop");
         if(AD_DOUT)
         {
             data++;
         }
         AD_CLK1;         
         asm("nop");
         asm("nop");
         asm("nop");
     }     
     return data;    
}


//------------------------------------------------------------------------------------------
//函数:read_AD7705_dword
//功能:从AD7705读一个24的数据
//参数:无
//返回:读到的一字节数据
//变量:无
//备注:AD7705是一个16位AD
//------------------------------------------------------------------------------------------
unsigned long int read_AD7705_dword(void)
{
     unsigned long data = 0;
     unsigned char i = 0;
     
     for( i=0; i<24; i++ )
     {
         data <<= 1;
         AD_CLK0;         
         asm("nop");
         asm("nop");
         asm("nop");
         if(AD_DOUT)
         {
              data++;
         }
         AD_CLK1;         
         asm("nop");
         asm("nop");
         asm("nop");
     }     
     return data;    
}


//------------------------------------------------------------------------------------------
//函数:write_AD7705_byte
//功能:往AD7705写8位数据
//参数:IN - uint8_t  data,要写入AD7705的数据
//返回:无
//变量:无
//备注:无
//------------------------------------------------------------------------------------------
void write_AD7705_byte(unsigned char data)
{
     for(unsigned char i=0; i<8; i++)
     {
         AD_CLK0;
         if(data&0x80)
             AD_DIN1;
         else
             AD_DIN0;         
         asm("nop");
         asm("nop");
         asm("nop");
         AD_CLK1;         
         asm("nop");
         asm("nop");
         asm("nop");
         data <<= 1;
     }     
     AD_DIN1;     
}

//------------------------------------------------------------------------------------------
//函数:write_AD7705_dword
//功能:往AD7705写24位数据,因为AD7705是24位的器件
//参数:IN - int32_t  data,要写入AD7705的数据
//返回:无
//变量:无
//备注:无
//------------------------------------------------------------------------------------------
void write_AD7705_dword(unsigned long int data)
{
    for(unsigned char i = 0; i<24; i++)
    {
         AD_CLK0;

⌨️ 快捷键说明

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