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

📄 ad7714.c

📁 单片机PIC16C877采集AD7714 16位AD芯片数据的程序。
💻 C
字号:
void WD_Init(void)
{
//	PSA=1;
	OPTION=0X0F;//devider used in WDT
}
void Port_Init()
{

	PCFG3=0;
	PCFG2=1;
	PCFG1=1;
	PCFG0=1;
	TRISA|=0xFf;//int RA0~5 addr
	TRISE|=0xEF;//in RE1,RE2 baud
	RE0=1;
	RE1=1;
	TRISD=0Xf1;
	PORTD=0XFF;
	_RST=0;//RD0=0;//reset chip1 ,2	
	TRISB=0XE9;//CS LED T/RSEL ADINT EOF
	PORTB=0XFF;
	TRISC=0xD5;//TX,RX IS IN			
	//RC3=0;	//sclk
	//INTEDG=0;//DOWN INT
	//INTE=0;	 //EXTERN INT
}
void Spi_Wr(unsigned char data_)
{
	SSPBUF=data_;
	while(SSPIF==0){};
	SSPIF=0;			
}
unsigned char Spi_Rd(void)
{
	unsigned char i_;
	SSPBUF=0;
	while(SSPIF==0){};
	SSPIF=0;
	i_=SSPBUF;
	return i_;				
}
void delay(unsigned char k)
{
	unsigned char j,m;
	for(m=0;m<k;m++)//100*4*2/(3.6864/2.4576)=320
	{
		j++;
	}
}
void Chip_Init()
{
	unsigned  char i,j,k;
//	CLRWDT();
	_RST=1;
	i = eeprom_read(0x00);
	if(i!=0x01)//tag self cele	
	{
		for(j=0x10;j<0x2e;j+=4)
		{
			k=j;
			eeprom_write(k,0);
			k++;
			eeprom_write(k,0);
			k++;
			eeprom_write(k,0x98);//0xc498=50326=65535*(60/78.13)
			k++;
			eeprom_write(k,0xc4);
			CLRWDT();
		}
		//Cu50
		k=0x30;
		eeprom_write(k,0xcd);
		k++;
		eeprom_write(k,0xc7);
		k++;
		eeprom_write(k,0x4c);//tp
		k++;
		eeprom_write(k,0xf1);//tp
		k=0;
		eeprom_write(k,1);
		for(i=0;i<8;i++)
		{
			k=i+0x40;
			eeprom_write(k,1);
			CLRWDT();		
		}
	}	
	for(i=0;i<8;i++)
	{
		k = i+0x40;
		k = eeprom_read(k);
		if(k>7) Code[i]=1;
	}
	CLRWDT();	
	_CS1=0;//cs1=0
    	delay(200);
    	delay(200);
    	delay(200);
    	Spi_Wr(0x20);//write filter high register02
    	Spi_Wr(0x81);//unipolar + input
    	Spi_Wr(0x30);//write filter high register03
    	Spi_Wr(0x80);//filter frist notch frequency=50hz
    	CLRWDT();
    	Spi_Wr(0x10);	//chan1 
    	Spi_Wr(0x34);	//amp 32  zero self
    	delay(200);
    	delay(200);
    	delay(200);
	Spi_Wr(0x68);
	i=Spi_Rd();
	j=Spi_Rd();
	k=Spi_Rd();
	eeprom_write(0x04,j);
	eeprom_write(0x05,i);
	CLRWDT();
	Spi_Wr(0x11);	//chan2
        Spi_Wr(0x34);	//amp 32
	i=0x80;
	while(i>0x7f)
	{
		delay(100);
		Spi_Wr(0x09);//read cummunication reg
		i=Spi_Rd();		
	}
	Spi_Wr(0x69);
	i=Spi_Rd();
	j=Spi_Rd();
	k=Spi_Rd();
	eeprom_write(0x06,j);
	eeprom_write(0x07,i);
	CLRWDT();
	
	Spi_Wr(0x12);	//chan3
        Spi_Wr(0x34);	//amp 32       
	while(i>0x7f)
	{
		delay(100);
		Spi_Wr(0x0a);//read cummunication reg
		i=Spi_Rd();	
	}
	Spi_Wr(0x6a);
	i=Spi_Rd();
	j=Spi_Rd();
	k=Spi_Rd();
	eeprom_write(0x08,j);
	eeprom_write(0x09,i);
	CLRWDT();	

}
void getai(unsigned char k)
{
	unsigned char i,j,m;
	unsigned long tp1;		
	_CS1=0;	
	switch(k)
	{
		case 0:
		m=0x08;
		break;
		case 1:
		m=0x09;
		break;
		case 2:
		m=0x0a;
		break;
		case 3:
		m=0x0b;
		break;
		case 4://cu50
		m=0x0e;//1110//chan 5-->6
		break;		
	} 
        delay(200);
        delay(200);
	i=0x80;
	while(i>0x7f)
	{
		delay(100);
		Spi_Wr(m);//read cummunication reg
		i=Spi_Rd();
	}
	m=m+0x50;	//read adc
	Spi_Wr(m);
	i=Spi_Rd();
	j=Spi_Rd();         
	
	adc=i;
	adc=adc<<8;
	adc=adc+j;
	_CS1=1;

}
void main(void)
{
	WD_Init();//看门狗初始化
	Port_Init();//端口初始化
	Chip_Init();//AD7714芯片初始化
	Tmr0Init();//计时器初始化
	while(1)
	{	
	 //定时采集
		{			
			getai(Chan);					
	        	Chan=(Chan>3)?0:Chan+1;//0--4通道切换      
		}
	}			

⌨️ 快捷键说明

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