Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
Goto , call pile sur pic 16f
Bonjour j’ai une petite question ou j’ai du mal a trouver la reponse :
Dans un pic 16f il y a apparement 8 piles (imbriquement de call) mais je vous donne un exemple :
Start
Bsf ...
Bcf ...
Call un
Un
Movlw ...
Movwf ...
Call deux
Deux
.....
.....
Dans ce cas j’imbrique un call dans un call donc je suis a 2 dans la pile
Mais si je met un goto a la place du deuxieme call (goto deux) est-ce que ma pile retombe a zero ?
J’espere que je me sus bien expliqué .... pas sur lol merci d’avance
Dans un pic 16f il y a apparement 8 piles (imbriquement de call) mais je vous donne un exemple :
Start
Bsf ...
Bcf ...
Call un
Un
Movlw ...
Movwf ...
Call deux
Deux
.....
.....
Dans ce cas j’imbrique un call dans un call donc je suis a 2 dans la pile
Mais si je met un goto a la place du deuxieme call (goto deux) est-ce que ma pile retombe a zero ?
J’espere que je me sus bien expliqué .... pas sur lol merci d’avance
Goto , call pile sur pic 16f
Bonjour Guigui02
Le pic a effectivement une pile de 8 niveaux, qui sert uniquement pour stocker 8 adresses de retour lors de sous-programmes appelés ou d'interruptions déclenchées.
Le pointeur de pile est modifié par les instructions suivantes :
+1 si CALL
+1 si démarrage d'une routine d'interruption (ISR)
-1 si RETURN
-1 si RETLW
-1 si RETFIE (sortie de la routine d'interruption)
Dans le cas où tu fais call puis goto, tu as incrémenté le pointeur de pile 1 fois, et il n'a jamais été décrémenté, donc il est resté à 1.
Un goto absolu (GOTO) modifie juste le pointeur d'instruction.
Un goto relatif (BTFSC,BTFCS,INCFSZ) le modifie aussi, en fait il exécute un nop pour sauter l'instruction qui suit.
Un call (CALL,ISR) le modifie aussi mais après avoir stocké sa valeur+1 dans la pile et incrémenté le pointeur de pile.
Un return (RETURN,RETLW,RETFIE) le modifie aussi mais après avoir décrémenté le pointeur de pile et récupéré l'adresse de retour.
sauf oubli ou erreur
Dans le datasheet, tu vas au chapitre "Instructions Set Summary" et tu cherche "TOS" (top of stack)
Le pic a effectivement une pile de 8 niveaux, qui sert uniquement pour stocker 8 adresses de retour lors de sous-programmes appelés ou d'interruptions déclenchées.
Le pointeur de pile est modifié par les instructions suivantes :
+1 si CALL
+1 si démarrage d'une routine d'interruption (ISR)
-1 si RETURN
-1 si RETLW
-1 si RETFIE (sortie de la routine d'interruption)
Dans le cas où tu fais call puis goto, tu as incrémenté le pointeur de pile 1 fois, et il n'a jamais été décrémenté, donc il est resté à 1.
Un goto absolu (GOTO) modifie juste le pointeur d'instruction.
Un goto relatif (BTFSC,BTFCS,INCFSZ) le modifie aussi, en fait il exécute un nop pour sauter l'instruction qui suit.
Un call (CALL,ISR) le modifie aussi mais après avoir stocké sa valeur+1 dans la pile et incrémenté le pointeur de pile.
Un return (RETURN,RETLW,RETFIE) le modifie aussi mais après avoir décrémenté le pointeur de pile et récupéré l'adresse de retour.
sauf oubli ou erreur
Dans le datasheet, tu vas au chapitre "Instructions Set Summary" et tu cherche "TOS" (top of stack)
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
- Gérard
Expert- Messages : 1644
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
Avec un GOTO, tu fais un saut inconditionnel.
Un CALL appelle un sous-programme dont il faut obligatoirement revenir. Il est aussi possible d'appeler un autre s/p à partir du 1er, dans ce cas, il faut revenir 2x pour retourner au programme principal.
Un CALL appelle un sous-programme dont il faut obligatoirement revenir. Il est aussi possible d'appeler un autre s/p à partir du 1er, dans ce cas, il faut revenir 2x pour retourner au programme principal.
Goto , call pile sur pic 16f
Oui je vais essayer de remodifier mon programme en fait c’est une horloge avec pic 16f876 , DS1307 et 4 afficheur 8 digits et 3 petits boutons pour regler l’heure hier je l’ai mise en route et regler l’heure ce matin les digits avais buggé j’ai debranché et rebranché le pic c’est repartit a la bonne heure car le ds1307 a une memoire interne c’est juste le pic qui a buggé et depuis elle tourne nikel car c’est dans la gestion des bouton de reglages que j’ai des gotos imbriqué des des call donc j’espere pouvoir regler le probleme
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Goto , call pile sur pic 16f
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 44 invités