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

📄 adc-adc7705.c

📁 AD7705实用程序
💻 C
字号:
#include<pic.h>
#include<pic1687x.h>



#define	 AD7705_DIN		RB6//TRISB6=0;
#define  AD7705_DOUT	RB5//TRISB5=1;	
#define  AD7705_DRDY	RB4//TRISB4=1;
#define  AD7705_SCLK	RB1//TRISB1=0;	
#define  AD7705_CS		RB2//TRISB2=0;
#define  AD7705_RET		RB3//TRISB3=0;
#define  Y_LED	RD1//TRISD1=0;
#define  R_LED	RD0//TRISD0=0;	
unsigned int	T_Voltage;
unsigned char	MSB_Data,LSB_Data;

void AD7705_Start();								//AD7705初始化
void AD7705_Read();									//读AD采集数据
void AD7705_Write_Reg(unsigned char Data_byte);		//写寄存器
unsigned char AD7705_Read_Reg();					//读寄存器
unsigned int read_AD7705_word(); 
void Delay1Ms(unsigned char t);








/*********** Serial ************/
void send(unsigned char count)
{   
	//unsigned char a;
	TXEN=1;  //使能发送功能
	TXREG=count;
	while(1)
	{
		if(TRMT==1)  break;
	}
}

void AD7705_Start()
{
	unsigned char i;
		TRISB1=0;
		TRISB3=0;
		AD7705_RET=0;		//复位AD7705
		Delay1Ms(5);
		//DelayMs(5);
		AD7705_RET=1;		//AD7705可以正常工作
		
	AD7705_DIN=1;
	for(i=1;i<=50;i++)
	{	
		AD7705_SCLK = !AD7705_SCLK;
	}
	AD7705_Write_Reg(0x20);	//选择时钟寄存器,写寄存器,正常模式
	AD7705_Write_Reg(0x04);	//时钟寄存器,二分频,主频2.4576MHz,所以CLK=0;
	/*
	AD7705_Write_Reg(0x28);
	MSB_Data = AD7705_Read_Reg();
	Delay1Ms(5);
	send(MSB_Data);
	Delay1Ms(5);
	*/
	AD7705_Write_Reg(0x10);	//选择设置寄存器,写寄存器,正常模式
	AD7705_Write_Reg(0x44);	//自校准,增益为1,单极性
}
/******************************************************************
名称:void AD7705_Read();
功能:读区采样值,并转换成显示数据
指令:无
调用:AD7705_Read_Reg();//读AD7705寄存器
返回:无 
/******************************************************************/
void AD7705_Read()
{	

	 AD7705_Write_Reg(0x38);
	 MSB_Data = AD7705_Read_Reg();
	 LSB_Data = AD7705_Read_Reg();
	 T_Voltage =MSB_Data*256+LSB_Data;

 }
/******************************************************************
名称:void AD7705_Write_Reg(unsigned char Data_byte);
功能:写AD7705寄存器
指令:无
调用:无
返回:无
/******************************************************************/
void AD7705_Write_Reg(unsigned char Data_byte)
{ 
	 unsigned char i;
	 TRISB2=0;
     TRISB6=0;
	 TRISB1=0;
	/*
	 AD7705_CS = 0;
	 AD7705_SCLK = 1;
	 asm("nop");
	 asm("nop");
	 for(i = 0; i < 8; i++) 
	 {		
		  AD7705_SCLK = 0;	
		  asm("nop");
		  asm("nop");
		  AD7705_DIN = (bit)(Data_byte & 0x80);
		  AD7705_SCLK = 1;
		  asm("nop");
		  asm("nop");
		  Data_byte <<= 1;
	 }
	 AD7705_CS = 0;
	*/
	for(i=0; i<8; i++) 
         { 
                 AD7705_SCLK=0; 
                 if(Data_byte&0x80) 
                         AD7705_DIN=1; 
                 else 
                         AD7705_DIN=0;                  
                      asm("nop"); 
                 asm("nop"); 
                 asm("nop"); 
                 AD7705_SCLK=1;                  
                 asm("nop"); 
                      asm("nop"); 
                 asm("nop"); 
                 Data_byte <<= 1; 
         } 
          
         AD7705_DIN=1;          
}
/******************************************************************
名称:unsigned char AD7705_Read_Reg();
功能:读AD7705寄存器
指令:无
调用:无
返回:Data_read
/******************************************************************/
unsigned char AD7705_Read_Reg()
{ 
	 unsigned char i,read;

	TRISB2=0;
	TRISB1=0;
	TRISB4=1;
	TRISB5=1;
	 AD7705_CS = 0;
	 AD7705_SCLK = 1;
	 asm("nop");asm("nop");
	/*
     //AD7705_Write_Reg(0x38);
	 //while(AD7705_DRDY){}
	 
	 for(i = 0; i < 8; i++) 
	 {	
	     AD7705_SCLK = 0;
	     asm("nop");
	     asm("nop");
		 Data_read |= (unsigned char)AD7705_DOUT;
		 asm("nop");
		 asm("nop");
	     AD7705_SCLK = 1;
	     asm("nop");asm("nop");
	 }
		
	
	  asm("nop");//asm("nop");
	  AD7705_CS = 0;
	  return(Data_read);
	*/
		for( i=0; i<8; i++ ) 
         { 
                 read <<= 1; 
                 AD7705_SCLK=0;                  
                 asm("nop"); 
                 asm("nop"); 
                 asm("nop"); 
                 if(AD7705_DOUT) 
                 { 
                   read++; 
                 } 
                      AD7705_SCLK=1;                  
                 asm("nop"); 
                 asm("nop"); 
                 asm("nop"); 
         } 
          
         return read;         
}

unsigned int read_AD7705_word() 
{ 
         unsigned int ad_data = 0; 
         unsigned char i = 0;

		TRISB2=0;
		TRISB1=0;
		TRISB4=1;
		TRISB5=1;

		 AD7705_CS = 0;
		 AD7705_SCLK = 1;
		 asm("nop");
		asm("nop");
	     while(AD7705_DRDY); 
         for( i=0; i<16; i++ ) 
         { 
                 ad_data <<= 1; 
                 AD7705_SCLK=0;                  
                 asm("nop"); 
                 asm("nop"); 
                 asm("nop"); 
                 if(AD7705_DOUT) 
                 { 
                    ad_data++; 
                 } 
                      AD7705_SCLK=1;                  
                 asm("nop"); 
                 asm("nop"); 
                 asm("nop"); 
         }      
          
         return ad_data;         
} 

void Delay1Ms(unsigned char t)
{
    unsigned char i;
 	for(;t>0;t--)
	{
		for (i=0;i<10;i++)
		{
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
			//asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");
		}
	}	

}



/*******main************/

main()
{
		
		   
		
		while(1)
		{
			unsigned char 	i,j,a;
			 
		    unsigned char	a_1,b=46,point_1,point_2,point_3;
			unsigned int	c,d,e;
			//unsigned long	e;
			float	k;
			RBIE=0;
			//RBPU=0;
  			//GIE=0;
			SPBRG=0x19;    
			TXSTA=0x24;    
			RCSTA=0x90;    
			TRISC=0xf0;
				
			TRISB=0X30;
			TRISD1=0;
			TRISD0=0;
			AD7705_Start();
			if(a==0xff)
			{
				Y_LED=0;
				a=0x00;	
			}
			else
			{
				Y_LED=1;
				a=0xff;
			}	
				
			Delay1Ms(100);
			Delay1Ms(100);
			Delay1Ms(100);
			Delay1Ms(100);
			Delay1Ms(100);
			Delay1Ms(100);
			Delay1Ms(100);
			Delay1Ms(100);
			Delay1Ms(100);
			Delay1Ms(100);

			AD7705_Write_Reg(0x38);
			T_Voltage=read_AD7705_word(); 
			k=1.0*T_Voltage*4.96/65535;
			//k=1.0*T_Voltage*2.5/65535;
			
			//a_100=(unsigned char)k/100+48;
			//a_10=(unsigned char)k%100/10+48;
			a_1=(unsigned char)k%10+48;
            c=k*10;
		    d=k*100;
			e=k*1000;
			point_1=(unsigned int)c%10+48;
			point_2=(unsigned int)d%100%10+48;
			point_3=(unsigned int)e%1000%100%10+48;
			//send(a_100);
			//send(a_10);
			send(a_1);
			send(b);
			send(point_1);
			send(point_2);
			//send(point_3);
            send(0x0a);
			
		}
}

⌨️ 快捷键说明

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