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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Goto , call pile sur pic 16f
Guigui02
Débutant
Débutant
Messages : 42
Enregistré en : mars 2017

#1 Message par Guigui02 » mar. 15 mai 2018 09:57

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

Goto , call pile sur pic 16f
satinas
Expert
Expert
Messages : 1225
Enregistré en : novembre 2015

#2 Message par satinas » mar. 15 mai 2018 11:38

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)

Goto , call pile sur pic 16f
Guigui02
Débutant
Débutant
Messages : 42
Enregistré en : mars 2017

#3 Message par Guigui02 » mar. 15 mai 2018 12:24

Ok merci beaucoup de ta reponse donc il faut que je revoie mon proggrame sniff :mur: . Car en fait tout fonctionne bien enfin presque car le pic se bloque aleatoirement j’ai donc penssé a un debordement de la pile je vais essayer de regler ce probleme et voir si sa resout . Merci encore

Goto , call pile sur pic 16f
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#4 Message par Gérard » mar. 15 mai 2018 16:00

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.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Goto , call pile sur pic 16f
Guigui02
Débutant
Débutant
Messages : 42
Enregistré en : mars 2017

#5 Message par Guigui02 » mar. 15 mai 2018 18:59

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
Guigui02
Débutant
Débutant
Messages : 42
Enregistré en : mars 2017

#6 Message par Guigui02 » mar. 15 mai 2018 20:10

Rectif : je n’ai rien changé au programme et je n’ai pas touché aux boutons de reglages et beuggggg j’ai l’mpression qu’il bug toute les 9h environ ....

Goto , call pile sur pic 16f
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#7 Message par Gérard » mar. 15 mai 2018 20:44

Regarde ici, elle fonctionne avec une RTC type DS3231 (plus précise que la DS1307) et la passage été/hiver et hiver/été est automatique.
De plus, elle ne bogue pas. dehors!!
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Goto , call pile sur pic 16f
Guigui02
Débutant
Débutant
Messages : 42
Enregistré en : mars 2017

#8 Message par Guigui02 » mar. 15 mai 2018 20:49

Le proggrame est en C je connais que lassembleur mais merci

Goto , call pile sur pic 16f
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » mer. 16 mai 2018 01:21

Bonsoir Guigui02, Gérard, et tout le forum,

Mais nous le code, ainsi que le schéma si tu as, et on regardera ensemble :wink:

==> A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Goto , call pile sur pic 16f
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#10 Message par Gérard » mer. 16 mai 2018 08:35

Guigui02 a écrit :Le proggrame est en C je connais que lassembleur mais merci


Le programme est en Basic.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 48 invités