Ok Maïck je vais d'ailleurs le faire maintenant car après plusieurs tests il s'est avéré que je n'arrivais pas à déclencher l'interruption :x Tout le programme fonctionne sauf ça, pas moyen de la déclencher ! "^^ J'ai essayé de la modifier plusieurs fois en regardant bien comment bigonoff faisait et en cherchant sur internet mais j'ai pas trouvé :x
Et oui je crois que c'est le flowcode ! ^^ Ben maintenant que j'ai réussi à faire fonctionner un programme (bon sauf l'intérupt "^^) je vais continuer le basic
Et merci Mic* pour le lien ! Je vais voir mais d'après ce que tu me dis c'est exactement le genre de trucs que je cherchais J'étais tellement désespéré que j'ai construit une platine avec des del pour tester mes programmes x') Mais bon vu qu'il faut une licence je préfère rester avec ma platine perso
Et donc voici la partie de mon code qui "gère" l'interruption RB0 (le problème vient peut être de l'initialisation, je ne sais pas, auquel cas je posterai le bout de programme). J'ai retiré le programme en lui même pour vous évitez de la lecture inutile et pour vous faire gagner du temps ^^ (vous allez reconnaître les bouts de programme je pense, c'est directement issu du cours de bigonoff )
Et je pensais : si j'ai un obstacle devant et que l'interruption est déclenchée, est-ce qu'une nouvelle interruption peut se déclencher tout de suite après ? Si c'est le cas mon robot risque d'être bloquée devant un mur comme un *** ^^ Donc est-ce qu'il y a une solution genre empêcher les interruptions le temps que celle-ci se termine ?
;********************************************************************** ; ROUTINE INTERRUPTION * ;********************************************************************** ;sauvegarder registres ;--------------------- org 0x004 ; adresse d'interruption movwf w_temp ; sauver registre W swapf STATUS,w ; swap status avec résultat dans w movwf status_temp ; sauver status swappé ;Traiter directement RB0 car c'est la seule ;intéruption autorisée call intrb0 ; traiter interrupt RB0 goto restorereg ; et fin d'interruption ;restaurer registres ;------------------- restorereg swapf status_temp,w ; swap ancien status, résultat dans w movwf STATUS ; restaurer status swapf w_temp,f ; Inversion L et H de l'ancien W ; sans modifier Z swapf w_temp,w ; Réinversion de L et H dans W ; W restauré sans modifier status retfie ; return from interrupt ;********************************************************************** ; INTERRUPTION RB0/INT * ;********************************************************************** ; ;L'intérruption est déclenchée lorsque le phototransistor fixée sur le ;corps du robot devient passant. Il y a alors une impulsion sur la pin ;du microcontrolleur RB0, ce qui provoque l'intéruption, le système va ;alors arrêter ce qu'il était en train de faire et va exécuter les actions ;ci-dessous. Enfin, quand il aura terminé, il "reprendra" au moment où il ;s'était arrêté. ; ;L'intéruption consiste à reculer le robot pendant 3 secondes puis à n'actionner ;que le moteur de la rouge gauche pour que le robot tourne à droite. ; ;_______________________________________________________________________ intrb0 BANK0 ;conseil appliqué du cours ;de Bigonoff qui conseille ;d'entrer dans une sous routine ;en banque 0 (... le programme...) bcf INTCON , INTF ; effacer flag INT/RB0 return ; fin d'interruption RB0/INT
Merci d'avance pour vos futures réponses qui vont, je le pense, beaucoup m'aider !
Je voulais mettre la vidéo du test de mon programme en pièce jointe mais le forum n'a pas voulu, tant pis :x