[stage fin DUT] Projet sur PIC16F, ça merdouille

Projet sur PIC16F, ça merdouille [stage fin DUT] - Aide aux devoirs - Emploi & Etudes

Marsh Posté le 24-04-2008 à 10:57:01    

Hello HFr !
 
Avant de rentrer dans le vif du sujet, je plante un peu le décor...
Je suis étudiant en fin de 2e année de DUT Génie Electrique et Info Industrielle.  
Je suis actuellement en stage, jusque mi-juin, et mon projet pour l'heure est de concevoir un module d'identification par clé numérique.
Il faut que je mette en place, autour d'un PIC 16F648A (pour le moment) un protocole d'E/S pour aller chercher les données contenues sur une mémoire type Touch'Memory (composants Dallas type piles boutons).
Bref, pour le moment, j'en suis à (tenter d') aller lire les infos contenues sur la Touch'Memory, par le biais d'un bit de mon PIC (bit RB4).
 
Je sais que HFr n'a pas une vocation purement électronique (genre ABCDElectronique ou autres futura-science), mais je vous soumets tout de même un petit problème que je rencontre pendant mon stage car je sais que beaucoup d'entre vous ont de bonnes connaissances dans ce domaine...
 
Voilà, j'ai mon code assembleur qui simule correctement, qui suit à la lettre le protocole imposé par le Dallas (1 temps de RESET avant de pouvoir recevoir les DATA contenues), mais lorsque je passe à l'émulation sur ICD2, l'exécution plante juste avant un return au programme principal :
 

Citation :

[...]
Init
  [...]
  call   ChargeTPSRepos  
  call   ChargeTPSResetLSB
  call   ChargeTPSResetMSB
  goto         Main
                [...]
 
ChargeTPSRepos
  movlw   0x16
  movwf   TPSRepos
  return
   
ChargeTPSResetLSB
  movlw   0xFF
  movwf   CTPSResetLSB
  movwf   TPSResetTMLSB
  return
 
ChargeTPSResetMSB
  movlw   0x01
  movwf   CTPSResetMSB
  movwf   TPSResetTMMSB
  return
 
                [...]


 
Au moment précis (visible en émulation pas-à-pas) où j'arrive sur le return que j'ai coloré en rouge, le programme ne retourne pas au Init, mais fait une boucle sans fin et finit par me planter MPLAB IDE...
 
Voilà, ça fait quelques jours que je suis bloqué à cet endroit, j'ai d'abord cru que ça pouvait venir du nombre de ligne dans le sous-programme (à la base il n'y avait qu'un seul sous-prog pour charger mes tempos...) mais ça ne change rien de séparer en petits sous-prog...
 
Bref, si vous avez une petite idée, n'hésitez pas à me faire signe :)
Je vais me renseigner autour de moi aussi, y a bien un grand manitou du PIC dans les parages !! :whistle:
 
Merci d'avance
Damien


---------------
La DiBerie | Rehost | Link
Reply

Marsh Posté le 24-04-2008 à 10:57:01   

Reply

Marsh Posté le 24-04-2008 à 11:01:10    

[réservé pour copier/coller du code si besoin...]


---------------
La DiBerie | Rehost | Link
Reply

Marsh Posté le 24-04-2008 à 12:12:59    

Je viens de constater qu'une fois arrivé à l'avant dernière ligne ==>  movwf   TPSResetTMMSB
Mon registre STATUS passe à 3F = 00111111... Il y a donc, en une ligne :
- levée du flag C ==> retenue (carry)
- levée du flag DC ==> retenue numérique (digital carry)
- levée du flag Z ==> résultat math = 0
Et le registre W passe à 00 puis à FF l'instruction suivante...
 
Une petite idée sur comment un movwf peut me mettre ces 3 flags à "1" ?
Un problème de mémoire ?


Message édité par DiB91 le 24-04-2008 à 12:19:36

---------------
La DiBerie | Rehost | Link
Reply

Marsh Posté le 24-04-2008 à 13:56:47    

Bon bah résolu en créant un nouveau projet et en copiant/collant tout mon code dans le nouveau :whistle:
Pas très pro tout ça :lol:


---------------
La DiBerie | Rehost | Link
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed