Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

adresse de tableau pour PIC16F648A



  1. #1
    arzew

    Smile adresse de tableau pour PIC16F648A


    ------

    bonjour à vous et meilleurs voeux pour 2008

    je pensais avoir tout compris sur la création de tableaux sur PIC mais ....
    Après bien des recherches sur le net sur la création de ces tableaux, je ne comprend pas ce qui se passe dans mon programme.
    Ceci est un programme d'affichage sur LCD, le choix des mots à afficher
    est fonction de MOTx .
    Il existe 2 tableaux l'un à l'adresse 0x600 et l'autre à 0x900.


    debut
    movlw 0x06
    movwf PCLATH
    movlw 0
    call MOT6
    ;clrf PCLATH
    movwf PORTB
    loop goto loop

    Org 0x600
    MOT2 addwf PCL,1
    DT "Bienvenue",0

    MOT3 ADDWF PCL, 1
    DT "ALARM(0) CODE(1)",0

    MOT4 ADDWF PCL, 1
    DT "PROG.TEL(2)",0


    Org 0x900
    MOT5 ADDWF PCL, 1
    DT "ALARME :",0

    MOT6 ADDWF PCL, 1
    DT "MAR(1) ANNUL(2)",0

    MOT7 addwf PCL,1
    DT "Votre Code puis#",0

    Si je choisis de mettre un tableau entre 0x00 et 0x700 d'adresse l'appel et le retour du tableau se fait bien, l'affichage sur PORTB est OK, je reste dans la boucle LOOP.
    Par contre si je mets un tableau à partir de 0x800 le retour à LOOP se fait mais le pointeur de programme continue à scruter le reste de la mémoire programme !
    Je suis obligé de mettre PCLATH = 0x00 au retour du MOT lu (clrf PCLATH dans le programme ci-dessus).
    Quelle est cette raison svp ?

    Merci de votre aide

    Arzew

    -----

  2. Publicité
  3. #2
    freepicbasic

    Re : adresse de tableau pour PIC16F648A

    pour l'adresse il s'agit de 0x900 non pas 0x800 et l'on doit mettre "movlw 0x09" dans PCLATH.

    Le stack n'empile pas le PCLATH , donc au retour l'adresse des goto et call pointe sur 0x06 adresse haute contenu dans PCLATH.
    La sauvegarde et restoration du PCLAtH est indispensable, si l'adresse de retour est en page 0 le "clrf PCLATH" suffit après chaque appel si le goto ou call suivant est en page 0.
    Code:
    debut
    
        movlw 0x06
        movwf PCLATH
        movlw 0
        call MOT6
        movwf PORTB
        movlw 1
        call MOT6
        movwf PORTB
        movlw 2
        call MOT6
        movwf PORTB
    
        movlw 0x0
        movwf PCLATH
        loop goto loop
    A+, pat

  4. #3
    pico03

    Re : adresse de tableau pour PIC16F648A

    Bonjour à tous
    Je ne suis pas un grand spécialiste des pics et ce n’est pas exactement la question, mais à priori, je ne vois pas l’intérêt d’avoir une multitude de références de branchement (MOT1, MOT2…) à l’intérieur d’une table. Cela oblige à avoir une multitude de call sans possibilité de boucle, alors qu’en plaçant uniquement des ’’ DT ’’ dans une table on peut accéder à tous les postes de cette table par une simple boucle en incrémentant W.
    Michel

  5. #4
    arzew

    Re : adresse de tableau pour PIC16F648A

    bonsoir,

    cela ne répond pas à ma question.
    En essayant ceci sur MPLAB on s'en rend mieux compte:

    Ici je n'ai pas besoin de mettre PCLATH = 0 , au retour de MOT5 le PC reste dans la boucle DO LOOP
    movlw 0x07
    movwf PCLATH
    movlw 1
    call MOT5
    movwf PORTB

    loop goto loop
    ORG 0x700
    MOT5 ADDWF PCL, 1
    DT "ALARME :",0

    Ici par contre il faut donner une valeur zéro à PCLATH au retour de MOT5
    movlw 0x08
    movwf PCLATH
    movlw 1
    call MOT5
    movwf PORTB
    clrf PCLATH

    loop goto loop
    ORG 0x800
    MOT5 ADDWF PCL, 1
    DT "ALARME :",0
    Je comprend bien que les pages de RAM programme sont données par PCLATH et les lignes programme dans ces pages sont données par PCL.
    Ici PCLATH est sur 4 bits et PCL sur 8 bits

    Ma question était pourquoi, seulement à ce niveau d'adresse, il faut entrainer cette action ?

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

    Re : adresse de tableau pour PIC16F648A

    Citation Envoyé par pico03 Voir le message
    Bonjour à tous
    Je ne suis pas un grand spécialiste des pics et ce n’est pas exactement la question, mais à priori, je ne vois pas l’intérêt d’avoir une multitude de références de branchement (MOT1, MOT2…) à l’intérieur d’une table. Cela oblige à avoir une multitude de call sans possibilité de boucle, alors qu’en plaçant uniquement des ’’ DT ’’ dans une table on peut accéder à tous les postes de cette table par une simple boucle en incrémentant W.
    Michel
    bonsoir,

    je n'avais pas vu ton poste ...
    Il y a peut-être un moyen plus simple et plus rapide ... je suis preneur.
    Ce système n'est d'aucune manière le mien, je l'avais trouvé pas trop mal.
    Il permet d'avoir plusieurs textes que l'on peut choisir selon le moment,
    l'incrémentation se fait par contre à l'intérieur dans une boucle (non représentée ici) qui reprendrait le call MOT5 tant que 0 n'est pas lu.

  8. #6
    DavidDB

    Re : adresse de tableau pour PIC16F648A

    Citation Envoyé par arzew Voir le message
    cela ne répond pas à ma question.

    Ma question était pourquoi, seulement à ce niveau d'adresse, il faut entrainer cette action ?
    Salut,

    Ouvre le datasheet de ton PIC, à la page 28 (pour le ds40044d) et l'explication est donnée au tableau 4-4.

    En deux mots, pour les adresses inférieures 0x800 avec les instuctions CALL et GOTO, il ne faut pas spécifier les bits 3-4 du registre PCLATH vu qu'il ne sont pas utilisé et surtout ne font pas partie de l'opercode (regarde le codage du CALL et GOTO au tableau 15-2 page 116 du même datasheet pour comprendre si ce n'est pas assez clair).
    Normal vu que 0x7FF est codé sur 10 bits et pour 0x800 il en faut 11; soit le bit 3 de PCLATH et les autres étant gérés par l'opercode lui-même.

    Pour résumer, avec un CALL ou GOTO, il faut gérer PCLATH pour les adresse supérieure à 0x7FF.

    David.

  9. Publicité
  10. #7
    arzew

    Re : adresse de tableau pour PIC16F648A

    bonsoir,

    Voilà une réponse qu'elle est bonne
    Merci beaucoup pour ta lumière.

    Cordialement

    Arzew

Discussions similaires

  1. [Brun] adresse pour piece detachee video
    Par golgoth133 dans le forum Dépannage
    Réponses: 2
    Dernier message: 12/11/2007, 19h12
  2. PIC: Adresse des Ports .... pour un débutant
    Par jt06 dans le forum Électronique
    Réponses: 2
    Dernier message: 18/10/2007, 18h18
  3. Adresse pour construction maison bioclimatique
    Par Nithril dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 23
    Dernier message: 01/08/2007, 21h09
  4. programmation PIC16F648A et 16F628
    Par alainav1 dans le forum Électronique
    Réponses: 3
    Dernier message: 25/03/2007, 15h41
  5. [Brun] Bonne adresse pour depannage
    Par Sheraf dans le forum Dépannage
    Réponses: 4
    Dernier message: 24/02/2007, 13h38
Découvrez nos comparatifs produits sur l'informatique et les technologies.