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

📄 ad7705.c

📁 adc
💻 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 + -