Pb pic 16f876 , Pclax, Gotox, Callx, et compagnie
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Pb pic 16f876 , Pclax, Gotox, Callx, et compagnie



  1. #1
    invite4cba64e8

    Pb pic 16f876 , Pclax, Gotox, Callx, et compagnie


    ------

    Bonjour,

    je suis un bricoleur, je programme en assembleur sur un pic 16f876.
    Je rencontre un problème au passage de la première page de code à la suivante.

    A la compilation j'ai le message " Crossing page boundary -- ensure page bits are set."

    Fidèle étudiant de Monsieur Bigonoff j'ai tenté de comprendre l'utilisation de GOTOX, PCLAX - GOTSX,CALLX, PCLAX - CALLSX.
    Mais voila, ça fait un bail que je galère.

    A la fin de mon programme je rajoute 3 fichiers en include comme ci-dessous.
    include <routines_18b20.inc>
    include <LCD_recepteur.inc>
    include <tempo.inc>

    Donc, a mon avis j'ai une partie de code qui déborde sur une autre page.

    1) Est-ce bien exact?
    2) Comment savoir Où ?
    3) Mettre un GOTOX, CALLX, ... ok mais exemple dans la routine appelée par CALLX doit-on mettre quelque chose quand celle-ci appelle une autre routine, un autre CALLX ?

    Ensuite j'ai essayé GOTOX dans cette partie: (prg principal)

    btfsc okmes ; Test si besoin mesure, saute si=0 (pas de mesure)
    call mesurex ; =1 effectue une mesure DS18b20

    call lecture_ds1307 ; lit l'heure
    call aff1307 ; affiche l'heure
    GOTOX appel

    4) Est-ce convenable? (Ca à l'air de marcher).?

    5) Est-ce convenable si je fais ceci pour la partie CALL ?

    PCLAX mesurex
    btfsc okmes ;Test si besoin mesure, saute si=0 (pas de mesure)
    CALLSX mesurex ; =1 effectue une mesure DS18b20

    CALLX lecture_ds1307 ; lit l'heure
    CALLX aff1307 ; affiche l'heure
    GOTOX appel

    J'ai testé ces manips, mais mon programme plante. Je rajoute dans les sous-routines appelées les gotox, plcax, callx, callsx, gotsx.
    je n'en finis pas de retoucher les fichiers en include aussi et toujours le même résultat.

    Si vous avez expérimenté ces macros, pouvez-vous m'aider s'il vous plaît ?

    ( un exemple vaut mieux que milles mots). Merci

    -----

  2. #2
    invite19f369ec

    Re : Pb pic 16f876 , Pclax, Gotox, Callx, et compagnie

    bonjour,
    Je n'y connais rien aux PICs mais voici quelques suggestions:
    connais-tu la taille max d'une page pour ton PIC?
    Peux-tu generer un fichier de symboles ou tu trouveras toutes les adresses des symboles?
    Si oui aux questions, verifies que tu ne passes pas d'une page a une autre.
    Par rapport a d'autres processeurs que je connais, pour pouvoir passer d'un appel court (meme page) a un appel long (autre page), il faut changer quelques bits dans le registre qui specifie la page (page 1, 2, 3 ..). Sutout si tu ecris en assembleur, sinon gérer par le compilo si tu as bien indiqué que tu acceptais les appels long dans la config.
    Bonne chance
    Michel

  3. #3
    gedonet

    Re : Pb pic 16f876 , Pclax, Gotox, Callx, et compagnie

    Bonjour
    1°Savoir si ton code deborde de la premiere page, on ne peut le savoir sans le code.
    2°Un page fait 2Kmots, cela fait 2048 lignes de code ( du code, pas des labels ou des commentaires ou des directive assembleur). Pour connaitre la taille de ton code, tu compiles et tu edites (avec notpad par exemple) le fichier nom_de ton_prog.lst, dans la premiere colonne de gauche le nombre correspond à l'adresse en flash de la ligne de code, en hexadecimal, si le nombre est inferieur à 0x800, tu es en premiere page. On peut voir cela aussi dans Mplab dans "View", "Program Memory".
    3° cela depend si ton appel se situe en page 2 et que la routine est aussi en page 2 c'est inutile, sinon oui. Utiliser un CALLX alors qu'un call suffit n'est pas genant tu perds simplement quelques cycles.
    4° je ne connais pas ton programme mais cela semble OK

    Code:
          PCLAX    mesurex
          btfsc      okmes            ;Test si besoin mesure, saute si=0 (pas de mesure)
          CALLSX   mesurex        ; =1 effectue une mesure DS18b20
          CALLX     lecture_ds1307 ; lit l'heure
    c'est l'erreur à surtout eviter si le bit okmes est à 1 pas de probleme, mais s'il est à 0, tu penses que le programme saute à la ligne "CALLX lecture_ds1307 ; lit l'heure", et bien non, il saute à la seconde ligne de la macro CALLSX, qui est "local PICI = (ICI+2 & 0x1800) ; page du saut", ce n'est pas exactement ce que tu voulais.
    Il faut toujours faire attention aux fonctions de test avant une macro c'est un vrai piege.
    Gilles

  4. #4
    invite4cba64e8

    Re : Pb pic 16f876 , Pclax, Gotox, Callx, et compagnie

    Bonjour,

    Tout d'abord merci Mich35 et Gedonet pour vos réponses.

    Effectivement une page du 16f876 fait bien 2k, soit 2048 lignes de code pur.

    Merci Gilles pour l'info concernant la recherche de l'endroit où ma page change. Je l'ignorait, cala va m'être très utile. Une fois que je sais où mon saut de page
    s'effectue je pourrai utiliser les bonnes commandes. A savoir un goto ou call normal si je suis dans la même page et la panoplie Bigonoff pour le reste.

    Vu que l'exemple ci-dessous ne marche pas, comment pourrai-je faire pour
    réaliser mon action ?
    Il me semblais avoir compris que les macros géraient le pclath.
    Où alors, faut-il abandonner les macros Bigonoff et utiliser Pagesel ?
    Bien que j'ai pas d'info pour utiliser Pagesel (dans le datasheet probablement).


    PCLAX mesurex
    btfsc okmes ;Test si besoin mesure, saute si=0 (pas de mesure)
    CALLSX mesurex ; =1 effectue une mesure DS18b20
    CALLX lecture_ds1307 ; lit l'heure

    Merci encore pour votre aide.

  5. A voir en vidéo sur Futura
  6. #5
    fopic

    Smile pic 16f876

    salut a tous

    je cherche a faire typhon qui pourrai contenir un pic 16F873 ou autre de la meme famil sur lequelle je pourrais mettre 2 sondes d'humidité une ldr (pour actionner mon projet que la nuit) une commande pour un relais (ou une vanne),une ent:sorti rs232 + un ecran lcd ,et on verra pour la programmation ,,,


    merci a encore tous.

  7. #6
    gedonet

    Re : pic 16f876

    Bonjour
    Pour ton exemple je modifierais ton code
    Code:
    	PCLAX 	mesurex
    	btfsc 	okmes 		;Test si besoin mesure, saute si=0 (pas de mesure)
    	CALLSX 	mesurex 	; =1 effectue une mesure DS18b20
    	CALLX 	lecture_ds1307 	; lit l'heure
    en:
    Code:
    	PCLAX 	mesurex
    	btfss 	okmes 		;Test si besoin mesure, saute si=0 (pas de mesure)
    	goto	okmes=0
    	CALLSX 	mesurex 	; =1 effectue une mesure DS18b20
    okmes=0
    	CALLX 	lecture_ds1307 	; lit l'heure
    Attention j'ai changé le btfsc en btfss. Dans un cas comme cela, en assembleur, il faut souvent prendre le probleme à l'envers
    Pagsel, la macro de Microchip est encore plus piegeuse que la macro de Bigonoff
    Gilles

  8. #7
    invite4cba64e8

    Re : pic 16f876

    Bonsoir,

    Merci Gilles pour ton aide, grâce à toi j'ai progresser. J'ai editer mon programme
    avec Mplab et (view/programm memory). Ainsi j'ai pu voir où le changement
    de page s'effectuait et ai pu modifier celui ci en conséquence. Ca a l'air de
    fonctionner convenablement. Il ne me reste plus qu'a me roder à cette
    technique.

    J'avais aussi envisager ta solution du petit saut court pour se sortir des pattes du btfsc et lancer un saut long. Cela me conforte dans ce sens.

    Encore merci

    Emmanuel

Discussions similaires

  1. programmation du pic 16f876
    Par invited09df1e4 dans le forum Électronique
    Réponses: 2
    Dernier message: 01/11/2008, 17h28
  2. programer un PIC 16F876
    Par Bernibernouille dans le forum Électronique
    Réponses: 8
    Dernier message: 10/08/2008, 19h54
  3. Différence entre PIC 16F876 et PIC 16F876A
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 2
    Dernier message: 09/03/2008, 14h32
  4. pic 16f876
    Par invite6568e6cf dans le forum Électronique
    Réponses: 2
    Dernier message: 21/05/2006, 18h19
  5. Pic 16f876
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 22/04/2006, 13h49
Découvrez nos comparatifs produits sur l'informatique et les technologies.