📄 ad7715.c
字号:
#include <p18f4680.h>
#include <delays.h>
//本程序未经过测试,需要测试调整
//-------------------------------------------------------
#define RD_SET_REG 0x18 //读设置寄存器
#define WR_SET_REG 0x10 //写设置寄存器
#define WR_TEST_REG 0x20 //写测试寄存器
#define DAT_SET_REG 0x66 //设置寄存器数据
#define RD_COMM_REG 0x08 //读信息寄存器
#define RD_DATA_REG 0x38 //从AD7715读数据
#define AD_BUF_LENTH 10 //AD缓冲区长度
//-------------------------------------------------------
unsigned int ad_buf[AD_BUF_LENTH]; //AD缓冲区
unsigned char ad_numb=0; //AD计数
//-------------------------------------------------------
#define AD_CLK PORTCbits.RC0
#define AD_DIN PORTCbits.RC1
#define AD_DOUT PORTCbits.RC2
#define AD_DRDY PORTCbits.RC5
//-------------------------------------------------------
union ADRES7715
{
unsigned int AD;
unsigned char ADRE[2];
}AD7715_result; //A/D转换结果
//-------------------------------------------------------
float AD_dis;
unsigned int check_voltage; //要显示的电压值
unsigned char dis_z; //电压值整数部份
unsigned char dis_x; //电压值小数部份
unsigned char ADvalue_zf; //AD值正负标志
//-------------------------------------------------------
/*==============================================================================
函数原型: unsigned char write_AD7715 ( unsigned char write_data );
函数功能: AD7715写入数据程序
参数说明: write_data-------要写入的数据
返回参数: 无输出参数
==============================================================================*/
unsigned char write_AD7715 ( unsigned char write_data )
{
unsigned char i;
for ( i=0;i<8;i++ )
{
AD_CLK = 0;//CLK=0
Delay10KTCYx(5);
if ( (write_data&0x80)!= 0 ) AD_DIN = 1;
else AD_DIN = 0;
write_data = write_data << 1;
Delay10KTCYx(5);
AD_CLK = 1;
Delay10KTCYx(5);
}
}
/*==============================================================================
函数原型: unsigned char read_AD7715 ( void );
函数功能: AD7715读出数据程序
参数说明: 无输入数据
返回参数: r_data-------读出的数据字节
==============================================================================*/
unsigned char read_AD7715 ( void )
{
unsigned char i,r_data;
for ( i=0;i<8;i++ )
{
AD_CLK=0;
Delay10KTCYx(5);
r_data = r_data<<1;
if ( AD_DOUT ) r_data+=0x01;
Delay10KTCYx(5);
AD_CLK = 1;
Delay10KTCYx(5);
}
return (r_data);
}
/*==============================================================================
函数原型: void Initial_AD7715 (void);
函数功能: AD7715初始化程序
参数说明: 无输入参数
返回参数: 无输出参数
==============================================================================*/
void Initial_AD7715 (void)
{
PORTC = 0x00;
TRISC = 0x14;
write_AD7715(0x10);//0x10通讯寄存器:向设定寄存器中写数
while ( AD_DRDY == 1 );//等待转换结束 //等待转换结束
write_AD7715(0x04);//0x04设定寄存器:设定自校验模式,时钟1MHZ,更新速度20HZ,不加缓冲,不加同步信号
//0x04 为正常模式
//--------------------------
}
/*==============================================================================
函数原型: AD_converse7715(void);
函数功能: AD7715转换程序
参数说明: 无输入参数
返回参数: 无输出参数
==============================================================================*/
void AD_converse7715(void)
{
write_AD7715(0x18);
while ( AD_DRDY == 1 );//等待转换结束
AD7715_result.ADRE[0]=read_AD7715();
//-----------------------------
while ( AD_DRDY == 1 );//等待自标定结束
write_AD7715(0x38);
while ( AD_DRDY == 1 );//等待转换结束
AD7715_result.ADRE[1]=read_AD7715();
AD7715_result.ADRE[0]=read_AD7715();
/*write_AD7715(0x13);//0x10通讯寄存器:向设定寄存器中写数
while ( AD_DRDY == 1 );//等待转换结束 //等待转换结束
write_AD7715(0x04);//0x04设定寄存器:设定自校验模式,时钟1MHZ,更新速度20HZ,不加缓冲,不加同步信号
//0x04 为正常模式
while ( AD_DRDY == 1 );//等待自标定结束
write_AD7715(0x3b);
while ( AD_DRDY == 1 );//等待转换结束
AD7715_result.ADRE[1]=read_AD7715();
AD7715_result.ADRE[0]=read_AD7715();*/
//-------------------------
if ( AD7715_result.AD > 32767 )
{
ADvalue_zf = 0;
//置正值标志
}
else
{
ADvalue_zf = 1;
//置负值标志
}
//-------------------------
check_voltage = (int)(((float)AD7715_result.AD/32767.0)*165.0);
}
//-----------------------------------------------------------------------------
/*void main(void)
{
Initial_AD7715 ();
AD_converse7715();
LATD = 2;
//-----------------------
write_AD7715(0x13);//0x10通讯寄存器:向设定寄存器中写数
while ( AD_DRDY == 1 );//等待转换结束 //等待转换结束
write_AD7715(0x62);//0x04设定寄存器:设定自校验模式,时钟1MHZ,更新速度20HZ,不加缓冲,不加同步信号
//0x04 为正常模式
while ( AD_DRDY == 1 );//等待自标定结束
write_AD7715(0x3b);
while ( AD_DRDY == 1 );//等待转换结束
AD7715_result.ADRE[1]=read_AD7715();
AD7715_result.ADRE[0]=read_AD7715();
//------------------------
LATD = 2;
while (1)
{
AD_converse7715(); //51d3
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -