sbit Synchro_SQ50 at PORTA.B3; sbit Synchro_SQ50_Dir at TRISA.B3; int i,j,k; unsigned char CRam1[64]; char TEXTE[128]; char *txt; unsigned char I2_Adresses_Devices[8]; unsigned char check_device(unsigned char dev_address); unsigned char check_device(unsigned char dev_address,char Bavard) { char Cx,OK; unsigned char k1; k1=0; OK=0; if(Bavard>0) { strConstRamCpy(txt,"Device @ "); ByteToStr(dev_address,CRam1); strcat(txt,CRam1); UART1_Write_Text(txt); } // test specifique avec analyser logic SQA // if(dev_address==160) Synchro_SQ50=1; // pour Analyse signal SSP1CON1.B7=0; //WCOL_bit I2C1_Start(); Cx=I2C1_Wr(dev_address); if(Cx == -1) //check if collision happened { Cx = SSP1BUF; //empty the buffer, SSPCON1.WCOL=0; // clear the collision status bit } I2C_Stop(); Synchro_SQ50=0; if( Cx!=0 ) { OK=0; if(Bavard>0)UART1_Write_CText(" not found"); } else { OK=1; I2_Adresses_Devices[k1]=dev_address; if(Bavard>0) { UART1_Write(TAB); strConstRamCpy(CRam1, " Device # find at @ "); *(CRam1+9)=k+48; ByteToStr(dev_address,CRam1+20); UART1_Write_Text(CRam1); UART1_Write_CText(" soit "); ByteToHex(dev_address,CRam1); UART1_Write_Text(CRam1); CRLF1(); } k1++; } I2C1_Stop(); Delay_ms(50); while(I2C1_Is_Idle()==0); if(Bavard>0) CRLF1(); return(OK); } for (i=0x20;i<254;i=i+2) { c1=check_device(i,1); Delay_ms(50); } CRLF1(); UART1_Write_CText("Liste des adresses de base devices I2C decouvertes :\r\n"); for (k=0;k<8;k++) { strConstRamCpy(CRam1, " Device # @= "); *(CRam1+ 9)=k+49; if (I2_Adresses_Devices[k]>0) ByteToHex(I2_Adresses_Devices[k],CRam1+15); else *(CRam1+ 11)=0; UART1_Write_Text(CRam1); CRLF1(); }