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

question sur PIC16FXXXX



  1. #1
    sparda663

    question sur PIC16FXXXX


    ------

    Bonjour à tous, j'étudie actuellement les microcontroleur et il y a une chose que je n'ai pas trop saisie, pendant l'execution d'un programme ( en code assembleur par exemple) , quand on arrive à un appel de sous programme ( CALL sous_programme) , à ce moment là , le program counteur (PC) met dans la pile la dernière adresse sur laquelle il pointait et pointe sur l'adresse du sous programme et à la fin de son execution l'adresse sur laquelle pointait le PC est sortie de la pile .

    Je voulais savoir, sachant que le PC pointe toujours sur l'instruction suivante à effectuer, au moment de l'appel du sous programme est-ce que le PC est incrémenté ( PC<=PC+1) ou est ce que c'est à la fin de l'execution du sous programme ? (lorsqu'on sort l'adresse de la pile)

    Merci.

    -----

  2. Publicité
  3. #2
    vincent66

    Re : question sur PIC16FXXXX

    Bonsoir,
    C'est l'adresse de l'instruction suivant le call qui est placée dans la pile, et en retour de sous programme elle est transférée de la pile dans le pc...
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  4. #3
    sparda663

    Re : question sur PIC16FXXXX

    Ok donc le PC = PC+1 se fait avant . Merci ! et une dernière question, le program counter est sur 13 bits tandis que le registre d'instruction (IR) est sur 14 bits , il vient d'ou le bit de différence entre les deux? Merci.

  5. #4
    vincent66

    Re : question sur PIC16FXXXX

    Les instructions sont codées sur 14 bits, le pc permet d'adresser 2¹³ soit 8192 instructions...
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

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

    Re : question sur PIC16FXXXX

    il vient d'ou le bit de différence entre les deux?
    Ils viennent du PCLATH (la bête noire du débutant !!! )
    A+, pat

  8. #6
    sparda663

    Re : question sur PIC16FXXXX

    Ah ok 11 bits d'instruction et 2 bits pour le PCLATH . Merci , mais par contre le bus de transmission entre le registre d'instruction et l'ALU est sur 8 bits , ce qui veut dire que l'instruction est sur 8 bits et les 6 bits restant pour l'OP CODE ? je suis un peu perdu .

  9. Publicité
  10. #7
    RISC

    Re : question sur PIC16FXXXX

    Salut Sparda,

    Il faut distinguer 3 coeurs PIC 8bits :
    * baseline (instructions 12 bits),
    * mid-range (instructions 14 bits, 8 niveaux de pile, PC 13bits max (8KW FLASH)) => 35 instructions
    * enhanced mid-range (instructions 14 bits, 16 niveaux de pile, PC 15bits max (32KW FLASH)) => 49 instructions

    Il existe un Manuel ancien sur le coeur mid-range qui explique en détail son fonctionnement ainsiq eu la construction des instructions.
    A ma connaissance, il n'y a pas l'équivalent pour le coeur enhanced mid-range mais il existe un webinar avec de la documentation

    Il est facile de reconnaitre les PIC16 avec coeur enhanced mid-range car ils ont une référence de type PIC16F1xxx (4 chiffres après le F ou LF)

    tu peux aller sur le site de Bigonoff qui explique dans le détail les midrange

    a+
    Ma marotte ? les microcontrôleurs ;=)

  11. #8
    vincent66

    Re : question sur PIC16FXXXX

    Le bus interne d'instructions est de 14 bits, le bus de données de 8...
    Leonardo était ingénieur "sans papier", et moi diplômé juste...technicien...

  12. #9
    RISC

    Re : question sur PIC16FXXXX

    Salut,
    Citation Envoyé par vincent66 Voir le message
    Le bus interne d'instructions est de 14 bits, le bus de données de 8...
    ...pas toujours...comme je l'ai indiqué dans mon précédent post il existe un coeur baseline dont les instructions sont sur 12 bits :
    http://www.microchip.com/pagehandler.../baseline.html

    Liste des PIC baseline : http://www.microchip.com/ParamChartS...g=en&pageId=74

    Ce qu'il faut comprendre c'est que la référence ne permet pas de savoir quel coeur il y a dedans..il existe des baseline dans les familles PIC10/12/16
    Il existe aussi des midrange dans les familles PIC10/12/16
    Pour les enhanced midrange c'est plus facile car il y a 4 chiffres après le F donc PIC12F1xxx et PIC16F1xxx

    Le bus de donnée est bien sûr toujours sur 8 bits

    a+
    Dernière modification par RISC ; 05/11/2014 à 00h02.
    Ma marotte ? les microcontrôleurs ;=)

  13. #10
    sparda663

    Re : question sur PIC16FXXXX

    Merci de vos reponses , mais je ne saisie toujours pas comment on peu transferer une instruction de 14bits a l'aide d'un bus de 8bits ? ...

  14. #11
    DAUDET78

    Re : question sur PIC16FXXXX

    Citation Envoyé par sparda663 Voir le message
    on peu transferer une instruction de 14bits a l'aide d'un bus de 8bits ? ...
    Je ne connais pas les PICs. Mais sur d'autres processeurs 8bits, il y a des instructions qui demandent deux octets (donc 16 bits) pour être exécutées . Donc deux accès à la mémoire programme
    J'aime pas le Grec

  15. #12
    sparda663

    Re : question sur PIC16FXXXX

    Je vous remercie tous de vos réponse mais peut être que je m'exprime mal, le vrai problème est là :
    Nom : bug.png
Affichages : 23
Taille : 112,9 Ko

    Si un spécialiste du PIC saurait m'expliquer ça? Comment on envoi une instruction de 14 bits à un décodeur d'instruction à l'aide d'un bus de 8 bits ??? sachant que l'instruction se fait en 1 cycle.

    Merci.

  16. Publicité
  17. #13
    RISC

    Re : question sur PIC16FXXXX

    Salut,
    Ceci est un schéma très "simplifié". Le reste de l'explication nécessite l'analyse des 35 instructions sur 14 bits.
    Comme c'est une architecture de type RISC, la plupart des instructions sont sur un seul mot de 14 bits.
    Ce mot contient à la fois le code opération (Opcode) et l'opérande.
    Ce qui est sophistiqué sur les PICs c'est que l'Opcode est à largeur variable....et c'est là que tu buttes très probablement.

    Si tu regardes bien la sortie de Instruction reg il y a 2 BUS.
    Le bus "Direct Addr" est sur 7 bits (au maximum).
    L'autre bus qui sort est, je pense, sur 14 bits (au maximum) et se divise en 2.
    Une partie est sur 8 bits max (pour les données immédiate) et va sur le MUX.
    L'autre partie du bus va vers l'unité "Instruction decode and control" et elle est peut-être sur 14 bits.

    A mon avis il faudrait ajouter un 3e bus qui irait de l'Instruction Reg au Program counter

    Comment j'arrive à cette conclusion ?
    Il faut regarder les différents formats d'instructions existants : figure 29-1 du "Midrange Family Reference Manual".

    Il existe 3 formats différents pour l'opcode :
    bit oriented
    byte oriented
    literal and control
    Pour chacun des format on voit la partie décodée et la partie qui va dans l'ALU ou l'adressage indirect
    Il manque donc pour le cas des GOTO ou CALL un bus qui véhicule une partie de l'instruction durectement vers le program counter en haut

    Prenons plusieurs exemples (tu regarderas le manuel "Midrange Family Reference Manual").
    Code:
    1/ exemple 1 : chargement du working register W avec une valeur immédiate
    mnemonique  operande    codage binaire     
    MOVLW         k         11 00xx kkkk kkkk    
    Donc dans ce cas l'instruction est codée sur 6 bits et 8 bits vont dans le MUX
    
    2/ exemple 2 : saut à une adresse absolue
    mnemonique  operande    codage binaire     
    GOTO         k         10 1kkk kkkk kkkk 
    Dans ce cas l'instruction est codée sur 3 bits et 11 bits vont dans le PC par mon bus supposé (3e bus)
    
    3/ exemple 3 : forcage d'un bit dans une adresse RAM ou SFR
    mnemonique  operande    codage binaire     
    BSF         k         01 01bb bfff ffff 
    Dans ce cas l'instruction est codée sur 4 bits + bits pour le no du bit (au total 7), 7 bits vont dans le bus "direct addr"
    Il faut comprendre que le schéma que tu vois est simplifié. Il y a probablement beaucoup d'autres connections non montrées dessus.

    J'espère que cela éclaircit un peu les choses.
    Attention il y a des choses que j'ai supposées basées sur mon analyse des instructions. Je ne suis pas architecte...en microcontroleurs ;=)
    Il se peut que dans la réalité les choses soient différentes

    a+
    Dernière modification par RISC ; 05/11/2014 à 22h26.
    Ma marotte ? les microcontrôleurs ;=)

  18. #14
    freepicbasic

    Re : question sur PIC16FXXXX

    Voilà la bête noire qui revient le PCLATH

    il y a effectivement 2 bus un data un programme
    (à mon avis à l'origine c est une histoire de protection , impossible d'exécuter un code en RAM)...
    Le processeur est donc un 8 bits mais avec une particularité un bus PC de 13 bits pour la série 16F qui sont en fait séparés en 2 registres.
    (parfois 12 bits série 12C ou 16 bits série 18F)
    2 registres => PCL 8 bits et PCLATH de 5 bits

    Dans l'instuction GOTO ou CALL
    il y a 8 + 3 bits soit 11 bits , il en manque donc 2
    BIZARRE !

    En fait les bits manquant seront pris dans le PCLATH.
    Et que les bits manquants !

    Si l'instruction de saut contient les bits il sont mis sur le PC et le reste pris dans PCLATH mais PCLATH ne change pas !
    Seul l'instruction comme MOVWF etc... peut le changer.
    Et le contenu sera pris en compte seulement lors du prochain saut !

    par exemple
    dans le cas du goto seulement 2 de poids fort
    dans le cas du ADD PCL,f , saut relatif positif en fait , un sublw serait un saut négatif,
    on prendra alors les 5 bits qui manque.

    cela signifie que le saut relatif se fait dans l'espace d'un secteur de 0x00 à 0xFF (8 bits de pcl)
    en fait -1 puisque le ADD prend une place.

    Lorsqu'on fait un CALL l'adresse est empilée et le retour se fera forcément à la bonne adresse.
    Mais Attention !
    Ces 11 bits du call déterminent un espace de 2k mots de code programme
    Si l'on sort de cette espace on doit modifier le PCLATH !
    Et lors du retour, le PCLATH ne pointe plus sur le secteur appelant mais celui appelé ,il faudra alors restaurer le PCLATH sur le bon secteur de code sinon le prochain saut qui serait dans le secteur appelant ira dans l'autre secteur précédemment appelé .

    On peut donc parler de saut court et de saut long.
    court dans l'espace de 2k, long dans un autre espace de 2 k.

    Si le programme dépasse les 2K , soit on met l'adresse haute dans le PCLATH pour chaque call ou goto, soit on gère plus finement mais avec un certain risque de plantage en cas d'oublie.
    A+, pat

  19. #15
    sparda663

    Re : question sur PIC16FXXXX

    Merci à tous pour vos réponses , tout est clair maintenant.

Discussions similaires

  1. Réponses: 14
    Dernier message: 10/03/2014, 23h40
  2. question stupide mais question quand même
    Par nylyly2 dans le forum Orientation avant le BAC
    Réponses: 6
    Dernier message: 20/02/2008, 16h15
  3. Ptite question sur une question de géo3D : Asie 06
    Par anonymus dans le forum Mathématiques du collège et du lycée
    Réponses: 2
    Dernier message: 01/06/2007, 14h51
  4. Question sur une question ( algèbre lin.)
    Par xMrDibbsx dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 14/10/2006, 00h39
  5. Question sur VCO dans ce schéma (et autre question)
    Par freesbeep dans le forum Électronique
    Réponses: 0
    Dernier message: 08/12/2005, 23h01
Découvrez nos comparatifs produits sur l'informatique et les technologies.