Salut,

lorseque j'ai compilé mon programme sur PCW, il m'a sorti 3 warning et 0 error:



puis lorseque j'ai voulu le charger dans le PIC ( placé sur un programmateur) avec ICPROG, avant la fin du chargement , un message d'erreur est sortie m'indiquant que la programmation s'est interrompue à l'adresse 0000h ?? "failed in adress 0000h"


qu'est ce que je dois faire, j'ai pas compris les 2 premiers warning ?

seraient-t-ils la cause de l'erreur avec le ICPROG ?

et merci d'avance pour votre aide !

voici le code de mon programme :

Code:
#include <16F877a.h>
//#device adc=8
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)



#define DEM1      PIN_A0
#define DEM2      PIN_A1   // pin reliée au démultiplexeur
#define DEM3      PIN_A2
#define DEM4      PIN_A3
#define A4        PIN_A4
#define A5        PIN_A5

#define TIS       PIN_E0  // pin relié au relais de choix Temp/Isol pour Simplexe
#define TID       PIN_E1  // pin relié au relais de choix Temp/Isol pour Duplexe
#define CTD       PIN_E2  // pin relié au relais de choix test de température C1/C2 pour Duplexe

#define R1        PIN_C0  // pin reliée au  relais 1 via l'étage de puissance
#define R2        PIN_C1  // pin reliée au  relais 2 via l'étage de puissance
#define R3        PIN_C2  // pin reliée au  relais 3 via l'étage de puissance
#define R4        PIN_C3  // pin reliée au  relais 4 via l'étage de puissance
#define LED_isol  PIN_C4  // pin reliée a une LED qui indique que le test en cours est un test d'isolement
#define LED_temp  PIN_C5
#define C6        PIN_C6
#define C7        PIN_C7


#define D0        PIN_D0
#define D1        PIN_D1
#define D2        PIN_D2
#define D3        PIN_D3
#define D4        PIN_D4   //  pin du PIC relié au Décodeur (affichage)
#define D5        PIN_D5
#define SIM       PIN_D6
#define DUP       PIN_D7

#define B0        PIN_B0
#define B1        PIN_B1
#define B2        PIN_B2
#define B3        PIN_B3
#define B4        PIN_B4   //  pin du PIC relié au Décodeur (affichage)
#define B5        PIN_B5
#define B6        PIN_B6
#define B7        PIN_B7


int simpl, dupl, isol, temp ;


void affichage_led(byte encodeur)

{
if (simpl=1)
 {
  switch (encodeur)
   {

case (0x04) :   // test d'isolement C1m

     {
     output_d(0X41) ;  // 4---> LED simplxe , 1 --> LED C1m

     break;
     }

case (0x05) :  // test d'isolement C1M

     {
     output_d(0X42) ;

     break;
     }

case (0x06) :  // test d'isolement mM

      {
      output_d(0X43) ;

      break;
      }

case (0x08) :  // test d'isolement C2m

      {
      output_d(0X44) ;

      break;
      }

case (0x09) :  // test d'isolement C2M

      {
      output_d(0X45) ;

      break;
      }

   }
 }

  if (dupl=1)
 {
  switch (encodeur)
   {

case (0x04) :   // test d'isolement C1m

     {
     output_d(0X81) ;  // 8---> LED Duplexe , 1 --> LED C1m

     break;
     }

case (0x05) :  // test d'isolement C1M

     {
     output_d(0X82) ;

     break;
     }

case (0x06) :  // test d'isolement mM

      {
      output_d(0X83) ;

      break;
      }

case (0x08) :  // test d'isolement C2m

      {
      output_d(0X84) ;

      break;
      }

case (0x09) :  // test d'isolement C2M

      {
      output_d(0X85) ;

      break;
      }

   }
  }
}





void choix_et_affich_isol(byte encodeur)  // cette fonction lorsequ'elle est exécuté fait éteindre la LED d'isolement, pkoi  ???!, port c ?

{
if (isol==1)

 {


  switch (encodeur)
   {

case (0x04) :   // test d'isolement C1m

     {
     output_c(0X19) ;   // 1--> LED isolement, 9--> combinaison relais
     affichage_led(encodeur);
     break;
     }


case (0x05) :  // test d'isolement C1M

     {
     output_c(0X11) ;
     affichage_led(encodeur);
     break;
     }



case (0x06) :  // test d'isolement mM

      {
      output_c(0X18) ;
      affichage_led(encodeur);
      break;
      }


case (0x08) :  // test d'isolement C2m

      {
      output_c(0X1A) ;
      affichage_led(encodeur);
      break;
      }

case (0x09) :  // test d'isolement C2m

      {
      output_c(0X84) ;
      affichage_led(encodeur);
      break;
      }



   }

 }

}





void reset(byte encodeur)

{

 if ( (encodeur==0x00) || (encodeur==0x01) )
  {
    simpl=0 ;
    dupl=0;
    isol=0;
    temp=0;
    output_low(LED_isol);
    output_low(LED_temp);
    output_low(TIS);
    output_low(TID);
    output_low(CTD);
    output_a(0x00);
    output_b(0x00);
    output_c(0x00);
    output_d(0x00);
    output_e(0x00);
  }

}







void choix_simplex_duplex(byte encodeur)  // cette fonction est rebouclé tout le temps , on peut passer entre les deux boutons en traversant le programme sans alterer le reste car le main est un ensemble de fonction avec des case et si aucune n'est validé , on retourne a la fonction du début qui est choix simplex/duplex
{

reset(encodeur);  // cette fonction n'est exécutée que si le dernier bouton appuyé est SIMPL ou DUPL --> il ya pas donc de risque d'une reset en boucle
           // même si on ne touche pas à un bouton (après avoir appuyé sur SIMPL ou DUPL ) la fonction reset() est exécutée ( car elle est à l'intérieur d'une boucle) .

  switch (encodeur) {



 case (0x00) :  // bouton simplexe
{
//reset(encodeur);

output_high(SIM) ;  // c temporaire, juste pour visualiser
  simpl=1;
  dupl=0;
  break;
}

 case  (0x01) : // bouton duplexe
{
//reset(encodeur);
output_high(DUP) ;
  dupl=1;
  simpl=0;
  break;}

  }
}


void  choix_isol_temp(byte  encodeur)

{

switch (encodeur)

 {


 case (0X02) :  // bouton isolement appuyé

   {
   output_c(0x10) ;      // LED d'isolement allumée
      // output_high(LED_isol) ;
      // output_low(LED_temp) ;

  isol=1;
  temp=0;

   if (simpl==1)
       {
      // output_low(TIS) ;
      output_e(0x0) ;         // passer d'un eventuel test en Temp
       }


   if (dupl==1)
       { // output_low(TID) ;
         output_e(0x0) ;         // passer d'un eventuel test en Temp
       }

   break;

    }

 case (0X03) :    // bouton temperature appuyé
    {

    output_c(0x20) ;   // c bon, ca n'affecte pas la commande des 4 relais et la LED reste allumé pendant la sélection de voies.
       //output_low(LED_isol) ;
       //output_high(LED_temp) ;

  isol=0;
  temp=1;


  if (simpl==1)
     { // output_high(TIS) ;
        output_e(0x01) ;   // passer à un test en Temp
     }

  if (dupl==1)
     { // output_high(TID) ;
       output_e(0x02) ;     // passer à un test en Temp
     }

   break;
    }
 }

}

void select_voie(byte encodeur)

{
 if (simpl==1) {

  switch (encodeur) {
 case (0x08)  :             {

output_a(0x00) ;

break; }

 case  (0x09)  :  //     0b00001101 : // voie 2, simplexe

    {
output_a(0x01) ;

break; }

 case (0x0a) : //   0b00001110 : // voie 3, simplexe

    {
    output_a(0x02) ;
    break;
    }

 case (0x0b) : // voie 4, simplexe

    {
     output_a(0x03) ;
     break;
     }

 case (0x0c) : // voie 5, simplexe

    {
    output_a(0x04) ;
    break;
    }

 case (0x0d) : // voie 6, simplexe
 
    {

output_a(0x05) ;

break; }

 case (0x0e) : // voie 7, simplexe

    {

output_a(0x06) ;

break; }

 case (0x0f) : // voie 8, simplexe

    {

output_a(0x07) ;

break; }

} // fin pour switch

     } // pour if


     if (dupl==1) {

 switch (encodeur) {

 case (0x08) : // voie 1, duplexe
 
    {
output_a(0x08) ;

break; }

 case (0x09) : // voie 2, duplexe

    {

output_a(0x09) ;

break;  }

 case (0x0a) : // voie 3, duplexe

    {

output_a(0x0a) ;

break; }

 case (0x0b) : // voie 4, duplexe

    {

output_a(0x0b) ;

break; }

 case (0x0c) : // voie 5, duplexe

    {

output_a(0x0c) ;

break; }

 case (0x0d) : // voie 6, duplexe
 
    {

output_a(0x0d) ;

break; }

 case (0x0e) : // voie 7, duplexe

    {

output_a(0x0e) ;

break; }

 case (0x0f) : // voie 8, duplexe

    {

output_a(0x0f) ;

break; }

  }  // fin pour switch

 }  //fin pour if

}



byte  encodeur;

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);  // convertisseur ana/num désactivé !
   set_tris_a(0) ;
   set_tris_c(0) ;
   set_tris_d(0) ;
   set_tris_e(0) ;
   set_tris_b(0XFF) ;

 output_d(0)   ;
 output_c(0)   ;


// encodeur=input_b() >> 4 ;  // même principe en input ??


output_low(LED_isol) ; // LED éteinte
output_low(LED_temp) ;


while (1)
   {

encodeur=input_b() >> 4 ;

choix_simplex_duplex(encodeur) ;

choix_isol_temp(encodeur) ;

choix_et_affich_isol(encodeur) ;

select_voie(encodeur);


   }

}