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); } }
-----