instruction PIC
|
|
SALUT,
Comment traduire l'instruction suivante :
goto $ -1
en langaga assembleur.
Merci
Numéro de l'article: 84595
| De: djw
| Date: 2004-04-06 15:57:50
|
RE: instruction PIC
Ben, c'est déja de l'assembleur lol...
Tu mets la valeur PC-1 => PC, sans connaitre le jeu d'isntruction des pics, ca devrait faire un branchement sur lui meme
autrement dit :
loop goto loop
Numéro de l'article: 84600
| De: pazcal
| Date: 2004-04-06 16:04:57
|
RE: instruction PIC
Ok merci
Numéro de l'article: 84602
| De: djw
| Date: 2004-04-06 16:09:27
|
RE: instruction PIC
non ça saute a la ligne du dessus, par exemple :
---
btfss porta,1
goto plusloin
goto $-2 ;on saute a 'btfss porta,1'
---
pour goto $-1 ça sera exactement pareil, a part que dans cet exemple tu sauteras a 'goto plusloin'
---
on peut aussi faire avec 'goto $+x', par exemple :
---
btfss porta,1
goto plusloin
goto $+2 ;on saute a 'btfss porta,2'
nop
btfss porta,2
---
pazcal > pour un branchement 'sur lui meme' c'est :
goto $
;o)
@++
manu
Numéro de l'article: 84604
| De: manu
| Date: 2004-04-06 16:11:08
|
RE: instruction PIC
si tu comprends pas dis moi le ;)
Numéro de l'article: 84608
| De: manu
| Date: 2004-04-06 16:13:41
|
RE: instruction PIC
Dis manu , tu serais pas répondre à mon pb plus bas sur le timer ? Tu as l'air calé sur les pics
Numéro de l'article: 84611
| De: fab
| Date: 2004-04-06 16:20:26
|
RE: instruction PIC
ok,
Mais si je comprend bien cette instruction es ta double tranchant, elle peut nous bloquer dans un programme. On peut tourner en rond
Numéro de l'article: 84623
| De: djw
| Date: 2004-04-06 16:31:55
|
RE: instruction PIC
voila exactement, mais des fois dans certains programmes, on cherche a tourner en rond, avec un pic on ne peut jamais rien faire, donc si tu attends quelque chose, par exemple un niveau haut ou un niveau bas sur une I/O d'un port tu le fais 'tourner en rond' en attendant cet évènement, je t'ai mis un exemple sur ton post qu'il y a plus haut ;)
fab > je vais voir ;)
Numéro de l'article: 84625
| De: manu
| Date: 2004-04-06 16:34:15
|
RE: instruction PIC
Ben, c'est parfois fait pour... ds le cas, ou tu as un programme qui attends des interruptions... Tu peux parfois utiliser ca... C'est clair que si le branchement n'est pas conditionnel, tu restes bloqué dessus, a moins d'avoir recours a des ruses de sioux tordues, du style modifier la valeur de retour su le stackpointer dans la routine d'interruption, mais la c'est deja tordu lol...
Numéro de l'article: 84627
| De: pazcal
| Date: 2004-04-06 16:35:58
|
RE: instruction PIC
Ok, alors je peux m'en servir comme "pause" dans un programme qui decompte un nombre d'impulsions préprogrammer dans le PIC?
Numéro de l'article: 84631
| De: djw
| Date: 2004-04-06 16:41:04
|
RE: instruction PIC
Oui, par exemple, dans ce cas, utilise splutot un branchement conditionnel, a savoir que tu peux quitter ta boucle sous certaines conditions...
Numéro de l'article: 84643
| De: pazcal
| Date: 2004-04-06 16:51:21
|
RE: instruction PIC
par exemple lors des interruptions ou si tu attends la mise a 1 ou a 0 d'un bit tu fais ça avec des instructions 'btfss' et 'btfsc'
Numéro de l'article: 84655
| De: manu
| Date: 2004-04-06 17:14:49
|
RE: instruction PIC
Bonjour
il me semble avoir lue que Bigonoffque a dit que cette instruction goto $-1 pose des problemes avec les pic 18F donc prudence.
Puis il y a un piege ou je suis tombé une fois avec une macro placer avant l'instruction par exemple:
instruction1
bank1 ; une macro pour aller en banque 1 qui comporte 2 lignes
goto $-2
dans ce cas le goto $-2 ne pointe pas sur "instruction1" mais sur l'avant derniere ligne de la macro "bank1".Bien sur quand on y reflechit, c'est evident mais j'ai chercher un sacre moment d'ou venait mon erreur .
Donc un petit label est quelque fois preferrable.
Gilles
Numéro de l'article: 84774
| De: Gilles
| Date: 2004-04-07 01:13:01
|
RE: instruction PIC
Salut
------
Comme dit Gilles, prudence avec ce raccourci.
Il a raison de préconiser les étiquettes.
En effet, la directive "$" signifie qu'on prend en compte l'adresse de l'instruction. Pour MPASM, cette adresse celle de l'instruction courante, et non l'adresse sur laquelle pointe le compteur ordinal.
Autrement dit, écrire goto $-1 équivaut à écrire "sauter à l'adresse programme précédente".
Pour un 16F, par exemple, dont les instructions sont toutes codées sur un seul mot mémoire, alors ça veut dire "remonter d'une instruction".
Par contre, pour tout micro dont les instructions sont codées sur plus d'un octet, que ce soit un nombre fixe ou variable, alors il faut savoir les tailles des instructions en question.
C'est pourquoi je dis que c'est dangereux sur un 18F, dont les instructions sont codées parfois sur 2, parfois sur 4 octets programme.
Donc, on ne peut JAMAIS écrire goto $-1 pour un 18F.
On doit écrire soit $-2 si l'instruction est codée sur 2 octets, et $-4 si elle est codée sur 4 octets.
Autrement dit, il est préférable d'utiliser des étiquettes, on est certain de ne pas se tromper.
Pour info, l'instruction qui permet de boucler sur soi-même, c'est
goto $
A+
Bigonoff
Numéro de l'article: 86603
| De: Bigonoff
| Date: 2004-04-13 22:32:14
|