<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte

 

La Programmation des pics
par Bigonoff
Premiere partie - pic 16f84 - Révision 4

Téléchargement des fichiers originels ici
Publié le 26/10/2001

Annexe1 : Questions fréquemment posées (F.A.Q.)

Index coursIndex du cours
Chapitre précédent19. La norme ISO 7816 (Suite 1)
Chapitre suivant21. Utilisation du présent document

 

Annexe1 : Questions fréquemment posées (F.A.Q.)
 
Je vais tenter de répondre ici à un maximum de questions que se posent les utilisateurs en général.
 
A1.1 Je n’arrive pas à éditer mon fichier source

Si vous avez suivi les exercices correctement, et, qu’une fois votre fichier .asm ouvert, votre clavier semble inactif, vous avez probablement placé votre fichier dans une répertoire contenant un caractère étendu.

Un cas classique est par exemple, l’utilisation du nom " leçon " pour le répertoire. MPLAB est allergique par exemple au caractère " ç ". Remplacez " leçon " par " lesson ", et tout rentrera dans l’ordre.

A1.2 Je trouve que 8 sous-programmes, c’est peu

Attention, vous ne devez pas confondre le nombre de sous-programme et le nombre d’imbrications de sous-programmes. Le nombre de sous-programme est illimité (dans la limite de la mémoire disponible).

Une imbrication, c’est quand un sous-programme appelle un autre sous-programme. Pour compter les niveaux d’imbrications, suivez le chemin de votre programme dans l’ordre d’exécution. Faites +1 pour chaque instruction " call " rencontrée et (-1) pour chaque instruction " return " ou " retlw ".

Si votre programme est correct, les 3 conditions suivantes doivent être remplies :

  • On ne doit jamais durant le comptage passer en négatif
  • On ne peut jamais dépasser 8 durant le comptage
  • A la fin de l’exécution du programme, on doit être revenu à 0
A1.3 Je n’utilise que 8 imbrications, et pourtant mon programme plante.

Vous ne devez pas oublier que les interruptions utilisent aussi la pile. Si vous utilisez les interruptions, vous n’avez droit qu’à 7 niveaux d’imbrication.

A1.4 Mon programme semble ne jamais sortir des interruptions

Vous avez oublié d’effacer le flag qui a provoqué l’interruption.

A1.5 Je n’arrive pas à ajouter un nœud à mon projet

Vous avez oublié d’éditer les propriétés du nœud principal. Même si vous ne désirez rien changer, vous devez le faire. Les dernières versions de MPLAB mémorisent votre dernière action et peuvent ne pas réclamer l’édition préalable.

A1.6 Je n’arrive pas à utiliser le simulateur, les options sont en grisé

Vous avez oublié de signaler à MPLAB que vous utilisez le simulateur. Allez dans le menu "project" et sélectionnez "edit project". Dans la fenêtre qui s’ouvre, sélectionnez "change" à côté du "development mode". et cliquez sur la case "MPLAB-SIM 16F84". Répondez oui à toutes les questions.

A1.7 Je reçois un message d’erreur EOF avant instruction END

Vérifiez si votre fichier comporte la directive END.

Si ce n’est pas le cas, ouvrez votre fichier " .asm " dans le bloc-notes de windows et vérifiez qu’il se présente correctement, avec les mises à la ligne correctes. Si ce n’est pas le cas, c’est que le fichier a été écrit avec un éditeur qui ne génère pas les bons retour de ligne. Dans ce cas, essayer un copier/coller de ce fichier dans un fichier vide créé avec un autre éditeur.

A1.8 Comment désassembler un fichier " .hex " ?

Je vais vous décrire 2 méthodes pour désassembler un fichier en format hexadécimal.

La première méthode utilise MPLAB :

  1. Allez dans le menu " File-> import -> import to memory "
  2. Sélectionnez le fichier " .hex " à désassembler
  3. Allez dans le menu " File->export->export memory "
  4. Dans la fenêtre " output format ", sélectionnez " disassembled code "
  5. Dans le menu déroulant " list files of type ", choisissez " Disasm files (*.txt) "
  6. Entrez un nom dans " file name ", et choisissez un emplacement de destination
  7. Cliquez sur <OK>. Vous obtenez un fichier texte qui contient le programme désassemblé.

La seconde méthode utilise IC-Prog, le célèbre utilitaire de programmation des pics disponible partout :

  1. Chargez le fichier " .hex " depuis le menu " File->open file "
  2. Sélectionnez " view->assembler ". C'est tout.
A1.9 Utilisation des minuscules et des majuscules

Par défaut, MPLAB effectue la distinction entre minuscules et majuscules. Si cela vous pose problème, vous pouvez le modifier dans les propriétés de votre projet. Pour effectuer cette opération :

  • Pressez <CTRL> + <F3> (ou menu " project->edit project ")
  • Dans la fenêtre " project files ", cliquez sur le premier nœud ( [.HEX] )
  • Cliquez " node properties "
  • Cochez " OFF " à la ligne " Case sensitivity "
A1.10 Le choix d'un programmateur

Je ne veux pas entrer ici dans le concret, car je veux pas faire de publicité pour un ou l'autre produit sur le marché.

Difficile également de renseigner un logiciel, car je ne peux être certain des droits de diffusion de tel ou tel logiciel.

Je me limiterai donc à un conseil : Utilisez un programmateur série ou parallèle, mais choisissez de préférence un modèle disposant de sa propre alimentation, de préférence à un modèle tirant son alimentation du port série.

A1.11 J'ai une erreur de " stack "

Je reçois également pas mal de courrier de personnes qui me disent : " Lorsque j'exécute mon programme en pas-à-pas dans MPLAB, je reçois à un moment donné un message de type : " Stack overflow " ou " Stack underflow " ".

Que signifie ces messages ?

En fait un message " stack overflow " peut signifier que vous avez dépassé les 8 niveaux de sous-programme autorisés. En effet, je rappelle qu'il n'y a que 8 emplacements sur la pile (stack), et que donc, une nouvelle tentative d'empilement, suite à une sous-routine ou une interruption provoquera l'écrasement de la pile.

Dans la plupart des cas, cependant, il s'agit d'une erreur dans la structure de votre programme. Le message " stack overflow " intervient si vous empilez plus de 7 emplacements, le message " stack underflow " intervient si vous dépilez plus que ce que vous avez empilé (par exemple, " return " sans " call ").

Pour résoudre ces problèmes, si vous n'avez pas dépassé les 8 niveaux (voir A1.2), vérifiez les points suivants :

- Chaque appel via un call doit revenir au programme appelant par un " return " ou un " retlw " - Chaque " return " ou " retlw " rencontré doit avoir été précédé du call correspondant - La sortie d'une sous-routine avec un " goto " doit mener à un point où on trouvera un " return " - Une routine ne doit pas s'appeler elle-même (sauf fonctions récursives : rares avec une telle taille de pile).
 

 

Index cours
Index du cours
Chapitre précédent
19. La norme ISO 7816 (Suite 1)
Chapitre suivant
21. Utilisation du présent document

 


Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/cours/pic16f84/PART1_coursA1.html modifiée le 14/10/2002.
Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail