aeonxzero
Messages postés5Date d'inscriptiondimanche 8 novembre 2009StatutMembreDernière intervention 4 août 2010
-
21 juin 2010 à 18:16
aeonxzero
Messages postés5Date d'inscriptiondimanche 8 novembre 2009StatutMembreDernière intervention 4 août 2010
-
4 août 2010 à 22:35
Bonjour à tous, eh bien voila: je suis actuelement en train de construire un robot en suivant le livre "Petits Robots Mobiles" de Frédéric Giamarchi. Mon problème vient d'un script en assembleur (language que je ne maitrise pas encore) écrit dans ce livre. Ce script sert à programmer un PIC 16F84 .
Je précise que j'ai déja réussi à debbuger une dizaine de fois le programme pour d'autre problèmes mais celui-ci m'est insoluble.
Pour information j'utilise MPLAB IDE v6.61
Je dipose ci-dessous les 3 scripts (répartit dans 3 fichiers différent): macro.inc ; Config.inc et Prog_1.asm
Lorsque je compile le tout, j'obtiens l'erreur suivante:
"error 116: Address label duplicated or different in the second pass" et on me précise: "Sens_Ga_Av" et "Sens_Dr_Av". (techniquement c'est sur 2 lignes différentes car l'IDE considére 2 erreurs).
Je suis allé voir l'aide de l'IDE mais cela ne m'a pas plus avançé.
Si quelqu'un peut m'aider ou sait résoudre cet insoluble probleme, il me serait d'une aide vraiment très précieuse. Toutes les réponses sont les bienvenue.
Merci d'avance.
aeonxzero
Messages postés5Date d'inscriptiondimanche 8 novembre 2009StatutMembreDernière intervention 4 août 2010 22 juin 2010 à 12:14
salut;
Si j'ai bien compris tu pense qu'il faut que je déclare Sens_Ga_Av et Sens_Dr_Av.
Je ne vois pas comment Sens_Ga_Av et Sens_Dr_Av sont apparu comme probleme dans la compilation; je pensait que cela était lié aux lignes:
#define Moteur_Dr_Av bcf Sens_Dr
et
#define Moteur_Ga_Av bcf Sens_Ga
Le probleme c'est que je ne vois pas comment faire (comme je suis débutant).
Je vais tester:
#define Sens_Ga_Av
#define Sens_Dr_Av
Mais je ne sais pas si cela va débloquer mon probleme.
Je te tiens au courant.
Merci encore pour ta réponse.
aeonxzero
Messages postés5Date d'inscriptiondimanche 8 novembre 2009StatutMembreDernière intervention 4 août 2010 22 juin 2010 à 18:21
Oups, erreur de copier-coller; dans le script que je vous ai fournit il manque une partie, la voici ci-dessous (j'ai repris à partir de "DEBUT" dans Prog_1.asm):
DEBUT
call INIT
movlw 0x10
movwf MLI_rapport_Dr
movlw 0x10
movwf MLI_rapport_Ga
clrf CAN_Compt_Test
Bouc_depart
Del_Verte_Off
Del_Jaune_On
call Tempo_250ms
Del_Jaune_Off
Del_Rouge_On
call Tempo_250ms
Del_Rouge_Off
Del_Verte_On
call Tempo_250ms
btfsc Poussoir
goto Bouc_depart
PROG
call CAN
movf CAN_Compt_Test,W
movwf MLI_rapport_Dr
movwf MLI_rapport_Ga
btfss Entree_A
goto Test_2
btfss Entree_B
goto Test_3
Test_1
Sens_Dr_Av
Sens_Ga_Av
goto Test_Fin
Test_2
btfss Entree_B
goto Test_3
Sens_Dr_Ar
Sens_Ga_Av
goto Test_Fin
Test_3
Sens_Dr_Av
Sens_Ga_Ar
btfss Entree_A
call Tempo_250ms
call Tempo_250ms
call Tempo_250ms
call Tempo_250ms
Test_Fin
goto PROG
INIT
BANK1
movlw b'00000100'
movwf TRISA
movlw b'10000110'
movwf TRISB
movwf b'10000000'
movwf OPTION_REG
BANKO
movlw INTCON
clrf TMR0
clrf PORTA
clrf PORTB
return
Tempo_250ms
btfss Etat,_250ms
goto Tempo_250ms
bcf Etat,_250ms
return
Tempo_200us
btfss Etat_100us,1
goto Tempo_200us
Tempo_200us_1
btfss Compt_100us,1
goto Tempo_200us_1
return
CAN
btfss Etat,seconde
goto CAN_Fin
bcf Etat,seconde
bcf INTCON,GIE
BANK1
movlw b'10000110'
movlw TRISB
BANK0
bsf INTCON,GIE
bsf CAN_P
call Tempo_200us
bcf INTCON,GIE
BANK1
movlw b'10000111'
movwf TRISB
BANK0
bsf INTCON,GIE
clrf CAN_Compt
CAN_Mesure
btfsc CAN_P
goto CAN_Mesure
movf CAN_Compt,W
andlw 0xF8
movwf CAN_Compt_Test
CAN_Fin
return
end
Désolé pour l'erreur...je ne sais pas comment j'ai fait une bétise pareil...
Au fait je viens de tester une nouvelle compilation en ajoutant au fichier Config.inc les 2 lignes que j'avais supposé utiles. Résultat: le programme à été compilé correctement (sans aucune erreurs). A part une bonne centaine de "warning" (que je suppose normal mais ce n'est qu'une supposition) rien à signaler.
En ce qui concerne le déroulement normal du programme; j'attend de transférer ce dernier dans le PIC.
Ma question est la suivante: pourquoi ai-je dû ajouter ces 2 lignes alors que
"Sens_Ga_Ar" et "Sens_Dr_Ar" fonctionne apparement très bien; comme vous pouvez le voir, il n'y a écrit nulle part:
#define Sens_Dr_Ar
#define Sens_Ga_Ar
Si quelqu'un peut m'éclairer, son explication me serait vraiment utile pour mieux comprendre ce programme.
Merci d'avance pour l'attention que vous pourrez porter à ce programme.
cs_patatalo
Messages postés1466Date d'inscriptionvendredi 2 janvier 2004StatutModérateurDernière intervention14 février 20142 23 juin 2010 à 05:49
re,
non, ce que je pense, c'est que Sens_Dr_Av et Sens_Ga_Av sont deux symboles qui sont placés à la même adresse étant donné qu'aucun code n'est defini avec.
a mon avis, ce programme n'est pas complet si il devait se compiler.
@++
Vous n’avez pas trouvé la réponse que vous recherchez ?
aeonxzero
Messages postés5Date d'inscriptiondimanche 8 novembre 2009StatutMembreDernière intervention 4 août 2010 4 août 2010 à 22:35
Désolé pour ce bon mois de retard mais j'ai du m'absenter de mon lieu d'expérimentation.
Je viens juste de tester l'hypothèse que patatalo m'avait proposé: remplacer chaque apparition de Sens_Machin par Moteur_Machin dans le fichier Prog_1.asm
Aucun probleme pour la compilation ni pour le transfert mais une fois sur le robot, rien ne se passe. Je vais donc étudier de nouveau les interconnexions entre les différentes cartes du robot afin de voir s'il n'y à pas un autre probleme de ce coté là.
Je me suis aussi mis à apprendre l'assembleur grace aux tutoriux du site de Bigonoff que je trouve très bien fait et fort interessant.
J'aurai juste besoin de savoir si du point de vue fonctionnel, le programme est "logique", c'est à dire que lorsqu'il y a detection le robot fait faire marche arriere à l'une de ses roue puis continue son cycle de fonctionnement jusqu'a sa prochaine détection.