Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

Anlayamadığım hatalar...

Başlatan hiashua, 09 Nisan 2008, 17:44:55

hiashua

master olarak bir pic16f877a  ve 5 tane slave olarak 12f675i haberleştirmeye çalışıyorum. Bunu yaptım ama aşağıdaki master kodları dün düzenlerken bazı değişikler yaptım bu değişiklikleri yaptıktan sonra anlamadığım hatalar alıyorum. ( yaptığım değişikler sadece dünden önce herşeyi ana döngüde yapıyordum düzenlemede fonksiyonlar oluşturup ana döngüde onları çağırıyorum yani aynı şey bunuda sadece oknabilirliği arttırmak için yaptım. )PICC ile çalışan arkadaşların yardımını istiyorum. Projem bittiğinde çok güzel olacak ve burada sizlerle paylaşmak istiyorum. Kolay gelsin.



#include <pic.h>
#include "delay.h"

#define SDA	RC4
#define SDA_DIR TRISC4
#define SCL RC3
#define SCL_DIR TRISC3	

#define INPUT	1
#define OUTPUT	0
#define LOW  	0
#define HIGH 	1
#define I2C_ST_T 50
#define I2C_ST_H 25


#define ZERO_P		0xA1
#define MAX_ADRESS	5			// it can be increased



void I2CStartCon(void)
{
	/*   make a start condition */
	SDA_DIR = OUTPUT;
	SDA = LOW;
	DelayUs(I2C_ST_T+20);
	SCL = LOW;

}
void I2CStopCon(void)
{
/*  Make a stop condition  
	End of communication seramony	*/
	SDA_DIR = OUTPUT;
	SCL = LOW;
	DelayUs(I2C_ST_H);			/*   3 delay in stop condition  */
	SCL = HIGH;
	DelayUs(I2C_ST_H);
	SDA = HIGH;
	DelayUs(I2C_ST_H);		
}



void I2COpenAdressCom(unsigned char adr)
{
	unsigned char i;		

/* 	make a float stream data on I2C bus 		*/
	for(i=8;i>0;i--)	
	{	
	if(adr & 0x80){
		SDA = HIGH;
		}
		else{
		SDA = LOW;
		}
		SCL = LOW;					
		DelayUs(I2C_ST_H);
		SCL = HIGH;	
		DelayUs(I2C_ST_H);
		adr = adr << 1;
	}
/*  Wait and get an acknowledge  */
		SDA_DIR = INPUT;
		while(SDA);			//wait slave to convert analog to digital.
		SCL = LOW;
		DelayUs(I2C_ST_H);
		SCL = HIGH;
		DelayUs(I2C_ST_H);

}

/* HATALAR AŞAĞIDAKİ FONKSİYONU GÖSTERİYOR */

unsigned char I2CRead(void){
	unsigned char x;
	unsigned char byte;
	if (x=8;x>0;x--){	
		SCL = LOW;
		DelayUs(I2C_ST_H);
		if(SDA){
			byte = byte |0x01;
		}
		else{
			byte = byte |0x00;
		}
		if(x>1)byte = byte << 1;
		SCL = HIGH;
		DelayUs(I2C_ST_H);
	}
	

	return byte;
}
void main(void)
{
	unsigned char i;
	unsigned char temp;
	unsigned char adress;
	unsigned char weights[5];
	char *Wptr;
	Wptr = &weights;
	SDA = 1;
	SCL	= 1;
	SDA_DIR = OUTPUT;
	SCL_DIR = OUTPUT;
	PORTD = 0;
	TRISD = 0;

	DelayMs(10);		// wait slave PICs to prepare themselves

	while(1){
	
			
 
			for(i=0;i<MAX_ADRESS;i++)
			{
				adress = i;
				I2CStartCon();
				I2COpenAdressCom(adress + ZERO_P);
				temp = I2CRead();
				I2CStopCon();
				*Wptr = temp;
				Wptr++;
				DelayMs(10);
			}

			

			DelayMs(250);
		
	}
}


Hata mesajları :

Advisory[1207]   : some of the command line options you are using are now obsolete
Advisory[1208]   : use --help option or refer to the user manual for option details
Error[194] C:\Documents and Settings\Administrator\Desktop\main.c 77 : ")" expected
Error[312] C:\Documents and Settings\Administrator\Desktop\main.c 77 : ";" expected
Warning[343] C:\Documents and Settings\Administrator\Desktop\main.c 89 : implicit return at end of non-void function
Error[285] C:\Documents and Settings\Administrator\Desktop\main.c 92 : no identifier in declaration
Warning[374] C:\Documents and Settings\Administrator\Desktop\main.c 92 : missing basic type; int assumed
Error[314] C:\Documents and Settings\Administrator\Desktop\main.c 92 : ";" expected
Error[285] C:\Documents and Settings\Administrator\Desktop\main.c 93 : no identifier in declaration
Warning[374] C:\Documents and Settings\Administrator\Desktop\main.c 93 : missing basic type; int assumed
Error[314] C:\Documents and Settings\Administrator\Desktop\main.c 93 : ";" expected
Warning[362] C:\Documents and Settings\Administrator\Desktop\main.c 101 : redundant "&" applied to array
/*  Merak ilmin hocasıdır.  */

picusta

unsigned char I2CRead(void)
{
   unsigned char x;
   unsigned char byte;
   if (x=8;x>0;x--)
   {   
      SCL = LOW;
      DelayUs(I2C_ST_H);
      if(SDA)
      {
         byte = byte |0x01;
      }
      else{
         byte = byte |0x00;
      }
      if(x>1)byte = byte << 1;
      SCL = HIGH;
      DelayUs(I2C_ST_H);
}


"if" değil "for" olacak galiba.
byte degiskeninin basta 0 oldugunu varsayiyorsun ()
birtane } eksik (for döngüsünün)
kodunu dogru bir indent ile yazarsan bu tür sorunlari daha yazarken çözersin.
Edit : } eksik değil, kodunu kopyalarken ben kesmisim.