📄 ad7705.c
字号:
/******************************************************************************************************/
#include<reg52.h>
#include<absacc.h>
#include<intrins.h>
#include<math.h>
#include "AD7705.h"
/*******************************************************************************************************/
sbit AD7705_DIN = P1^5; // SPI D_IN
sbit AD7705_DOUT = P1^6; // SPI D_OUT
sbit AD7705_DRDY = P1^3; // SPI D_RDY
sbit AD7705_CLK = P1^7; // SPI CLk
sbit AD7705_CS = P1^4; // SPI CS
/*****************function declaration***************************/
unsigned int AD7705_CONVERT()
{
char a,i;
unsigned char MSB_Data,LSB_Data ;
unsigned int TEMP_Data;
//AD7705_Start();
while(AD7705_DRDY); //wait for DRDY to go LOW
//for(a=0;a<NUM_SAMPLES;a++);
{ // Active Channel Ain1(+)/Ain(-),Next Opraton Read From DATA REG
AD7705_Write_1_BYTE(0x38); /*set the next operation for 16 bit read from the data register */
/* for(i=0;i<=2;i++)
{_nop_();} */
MSB_Data=AD7705_Read_1_BYTE();
LSB_Data=AD7705_Read_1_BYTE();
//LSB_Data=0;
/* for(i=0;i<=2;i++)
{_nop_();} */
TEMP_Data=MSB_Data*256+ LSB_Data;
/*
//===========================
//DEBUG
send_UART(MSB_Data);
send_UART(LSB_Data);
MSB_Data=((TEMP_Data & 0XFF00)>>8); send_UART(MSB_Data); //
LSB_Data= (TEMP_Data & 0X00FF) ; send_UART(LSB_Data); //
//=================== */
return(TEMP_Data);
}
//send_UART(0x55);
//send_UART(0x66);
}
void AD7705_Start()
{
char i;
AD7705_Write_1_BYTE(0x20); // Active Channel Ain1(+)/Ain1(-),Next Opraton Write to CLK REG.
for(i=0;i<=10;i++)
{_nop_();}
AD7705_Write_1_BYTE(0x0f); // Master Clk Enable, 4.9512 MHz Clk , O/P Update rate 50Hz (20 mSec).
//AD7705_Write_1_BYTE(0x09); // Master Clk Enable, 4.9512 MHz Clk , O/P Update rate 50Hz (20 mSec).
//AD7705_Write_1_BYTE(0x0f);
for(i=0;i<=10;i++)
{_nop_();}
AD7705_Write_1_BYTE(0x10); // Active Channel Ain1(+)/Ain(-),Next Opraton Write to SETUP REG
for(i=0;i<=10;i++) // Clearing FSYNC bit Starts sampling.
{_nop_();}
AD7705_Write_1_BYTE(0x62); // Gain = ?, Bipolar Mode, Buffer Off, Clear FSYNC, Perform Self
//AD7705_Write_1_BYTE(0x52); // Gain = ?, Bipolar Mode, Buffer Off, Clear FSYNC, Perform Self
//AD7705_Write_1_BYTE(0x7C); // Gain = 128, UNpolar Mode, Buffer Off, Clear FSYNC, Perform Self
//AD7705_Write_1_BYTE(0x40);
for(i=0;i<=10;i++)
{_nop_();} // Clearing FSYNC bit Starts sampling.
}
void AD7705_Write_1_BYTE(unsigned char Data_byte)
{
unsigned char i;
AD7705_CS = 0;
_nop_();
_nop_();
_nop_();
AD7705_CLK = 1;
_nop_();
_nop_();
_nop_();
for(i = 0; i < 8; i++)
{
AD7705_DIN = (bit)(Data_byte & 0x80);
AD7705_CLK = 0;
_nop_();
_nop_();
_nop_();
AD7705_CLK = 1;
_nop_();
_nop_();
_nop_();
Data_byte <<= 1;
_nop_();
_nop_();
_nop_();
}
_nop_();
_nop_();
_nop_();
AD7705_CS = 1;
}
unsigned char AD7705_Read_1_BYTE()
{
unsigned char i,Data_read;
AD7705_DOUT=1;
_nop_();
_nop_();
_nop_();
AD7705_CS = 0;
_nop_();
_nop_();
_nop_();
AD7705_CLK = 1;
_nop_();
_nop_();
_nop_();
for(i = 0; i < 8; i++)
{
AD7705_CLK = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Data_read <<= 1;
Data_read |= (unsigned char)AD7705_DOUT;
_nop_();
_nop_();
_nop_();
AD7705_CLK = 1;
_nop_();
_nop_();
_nop_();
AD7705_DOUT=1;
_nop_();
_nop_();
_nop_();
}
AD7705_CS = 1;
_nop_();
_nop_();
_nop_();
AD7705_DRDY = 1;
_nop_();
_nop_();
_nop_();
return(Data_read);
}
unsigned int AD7705_Read_2_BYTE()
{
char i;
unsigned int SPI_OUTDATA_BUFFER;
AD7705_DOUT=1;
_nop_();
_nop_();
_nop_();
AD7705_CS = 0;
_nop_();
_nop_();
_nop_();
AD7705_CLK = 1;
_nop_();
_nop_();
_nop_();
for (i=0;i<=16;i++)
{
AD7705_CLK = 0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
if(i < 16)
{SPI_OUTDATA_BUFFER <<= 1;}
SPI_OUTDATA_BUFFER = (SPI_OUTDATA_BUFFER | AD7705_DOUT);
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
AD7705_CLK = 1;
_nop_();
_nop_();
_nop_();
AD7705_DOUT=1;
_nop_();
_nop_();
_nop_();
}
AD7705_CS = 1;
_nop_();
_nop_();
_nop_();
AD7705_DRDY = 1;
_nop_();
_nop_();
_nop_();
return(SPI_OUTDATA_BUFFER);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -