Assembleur pour PIC - BTFSC
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Assembleur pour PIC - BTFSC



  1. #1
    Toufinet

    Assembleur pour PIC - BTFSC


    ------

    Bonjour à tous,

    Voilà, je cherche à faire ceci :
    Code:
    CBLOCK :
     data : 4
     num : 1
     bit : 1
    ENDC
    
    BTFSC data+num,bit
    Lors de la compilation, je n'ai pas d'erreur, juste un warning.
    Par contre, lors de l'application, ça ne fonctionne pas du tout... ( pourtant num et bit contiennent des valeurs correctes )

    Vous savez si il y a un moyen de faire un BTFSC data+num,bit ?

    Merci

    -----

  2. #2
    invite87be5ae9

    Re : Assembleur pour PIC - BTFSC

    Bonjour Toufinet

    Je te conseilles d'urgence le cours de l'excellentissime Bigonoff !!!

    1 - La directive "CBLOC" doit être suivie d'une adresse où seront déclarée les variables (cf Datasheet, partie "Memory organization").
    Ex : pour un 16F818 : "CBLOC 0x020"

    2 - Dans la partie "Instruction Set summary" de ta Datasheet, tu pourras remarquer que l'instruction BTFSC ne peut absolument pas s'utiliser n'importe comment : "Syntax: [ label ] BTFSC f,b"
    Cela signifie que tu y places une adresse (ou ta variable qui sera remplacée par une adresse) en premier, et la valeur d'un bit en second !
    Ce sont des valeurs littérales ! Les PICs ne peuvent absolument pas faire de calculs d'adresse comme tu sembles vouloir faire.

    Il arrive des fois de rencontrer des notations du genre :
    BTFSC variable+1, 7 ; (ou variable+2, +3, etc...)

    Avec cette notation, MPASM va automatiquement remplacer "variable+1" par "(adresse de variable)+1".
    Dans ce cas, ton PIC ne fait aucune opération avec les adresses.

    Je sais pas si mes explications sont claires, mais le cours de Bigonoff est réellement bien pour expliquer ce genre de détails.

    Bonne continuation

  3. #3
    Toufinet

    Re : Assembleur pour PIC - BTFSC

    Citation Envoyé par lolomatic Voir le message
    1 - La directive "CBLOC" doit être suivie d'une adresse où seront déclarée les variables (cf Datasheet, partie "Memory organization").
    Ex : pour un 16F818 : "CBLOC 0x020"
    ...

    Citation Envoyé par lolomatic Voir le message
    2 - Dans la partie "Instruction Set summary" de ta Datasheet, tu pourras remarquer que l'instruction BTFSC ne peut absolument pas s'utiliser n'importe comment : "Syntax: [ label ] BTFSC f,b"
    Cela signifie que tu y places une adresse (ou ta variable qui sera remplacée par une adresse) en premier, et la valeur d'un bit en second !
    Ce sont des valeurs littérales ! Les PICs ne peuvent absolument pas faire de calculs d'adresse comme tu sembles vouloir faire.

    Il arrive des fois de rencontrer des notations du genre :
    BTFSC variable+1, 7 ; (ou variable+2, +3, etc...)

    Avec cette notation, MPASM va automatiquement remplacer "variable+1" par "(adresse de variable)+1".
    Dans ce cas, ton PIC ne fait aucune opération avec les adresses.

    Je sais pas si mes explications sont claires, mais le cours de Bigonoff est réellement bien pour expliquer ce genre de détails.

    Bonne continuation
    Tout ça je l'avais bien compris ... ma question est "y-a-t'il un moyen d'effectuer ce genre d'opération ?"

  4. #4
    invite0e5af214

    Re : Assembleur pour PIC - BTFSC

    Euh attention quand même...c'est de l'assembleur là, pas un language évolué.
    Donc il n'est pas question d'écrire plusieurs opérations sur la même ligne en esperant que l'assembleur (qui n'est pas un compilateur) traduise.

    BTFSC data+num,bit ne peut pas fonctionner pour plusieurs raisons :

    Le second champ (bit) ne peut pas être un nombre stocké dans un registre, ca doit être un chiffre entre 0 et 7. S'il n'est pas connu à l'avance alors il faut ruser avec des décalages ou autres...

    data+num cela m'étonnerai beaucoup que ca marche, il faut faire l'addition avant le test :
    Code:
    (pour du 18F)
    movff data, WREG
    addwf num, w
    btfsc WREG, x
    ...

    En règle générale, mon avis est que : autant pour un language évolué on peut de temps en temps laisser trainer quelques warning, autant en assembleur soit ca assemble parfaitement, soit ca ne marchera pas
    (Ce qui ne veut pas dire qu'un assemblage parfait conduit forcement à un programme qui marche )

    Bon courage

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

    Re : Assembleur pour PIC - BTFSC

    Citation Envoyé par Toufinet Voir le message
    ...
    Tout ça je l'avais bien compris ... ma question est "y-a-t'il un moyen d'effectuer ce genre d'opération ?"
    Au temps pour moi, désolé.

    Donc, permets moi de reformuler alors ta question, pour éviter tout malentendu :

    * Tu cherches à faire un "BTFSC data+num,bit" où data, num, bit sont des variables ?

    * Ensuite, tu cherches à :
    - Additionner la valeur de data et de num ?
    ou
    - Additionner les adresses de data et de num (offset) ?

    Dans tous les cas, malheureusement, je peux déjà te dire que tu ne peux faire ni l'un, ni l'autre, en une seule instruction avec ton PIC...

  7. #6
    Toufinet

    Re : Assembleur pour PIC - BTFSC

    Additionner les adresses ( ça me semblait clair ) ..

    Peut-être qu'il y a moyen avec le FSR pour data+num ?
    Par contre pour "bit", c'est certain que c'est mort.

  8. #7
    invite0e5af214

    Re : Assembleur pour PIC - BTFSC

    Peut-être qu'il y a moyen avec le FSR pour data+num ?
    C'est à dire ?

    Tu as alloué 4 octets à partie de data.
    Quand tu utilises data tout seul, tu désigne le premier octet de cette zone.
    FSR te permettra de désigner un des trois autres octets.

  9. #8
    invite87be5ae9

    Re : Assembleur pour PIC - BTFSC

    Citation Envoyé par Toufinet Voir le message
    Additionner les adresses ( ça me semblait clair ) ..

    Peut-être qu'il y a moyen avec le FSR pour data+num ?
    Par contre pour "bit", c'est certain que c'est mort.
    Maintenant, oui, c'est plus clair
    Comme je l'ai vu, très justement précisé, sur une signature d'un membre du forum, les paramètres non donnés sont imaginés.

    En effet, il faut jouer avec ton FSR pour la partie "data+num" :
    1 - Tu positionnes ton registre FSR à l'adresse de data
    2 - Tu ajoutes à FSR la valeur de num

    Grossièrement, cela doit donner ceci (code à vérifier) :
    movlw data ; charge l'adresse de data
    movwf FSR ; enregistre dans le pointeur
    movf num, W ; charge dans W la valeur de num (l'offset)
    addwf FSR ; l'additionne avec le pointeur
    ; il reste plus qu'à récupérer dans INDF la valeur de data+num


    Pour le test du bit, c'est officiellement pas possible, il va falloir trouver autre chose ou ruser avec les décalages et les masques, comme le disait cherwam07.
    A noter qu'au final, tu utiliseras bien l'instruction BTFSC... Mais avec le registre STATUS, et certainement le bit Z.

    Bonne continuation

  10. #9
    Toufinet

    Re : Assembleur pour PIC - BTFSC

    ah oui, j'avais pas pensé à faire un masque !

    ok, merci pour tout, je pense m'en sortir avec tout ça ... et ça donnera quelquechose de bien plus propre que 32 groupes avec des BTFSC de partout

  11. #10
    invite0e5af214

    Re : Assembleur pour PIC - BTFSC

    Grossièrement, cela doit donner ceci (code à vérifier) :
    movlw data ; charge l'adresse de data
    ...
    Tu voulais surement dire
    movf data, w ?


    Sinon ca dépend si Toufinet travaille sur pic16F ou pic18F. alors ?

  12. #11
    invite0e5af214

    Re : Assembleur pour PIC - BTFSC

    Non correction

    movlw data c'est bien ca pour du 16F.

    Désolé

  13. #12
    invitef86a6203

    Re : Assembleur pour PIC - BTFSC

    Utiliser l'adressage relatif


    si num est un pointeur et data un index

    Code:
    movf num,w
    addwf data,w
    movwf FSR
    movf INDF,w
    ; W contient l'adresse calculer
    ; la remettre dans FSR
    ; et lire avec INDF
    s'il s'agit d'un tableau et que l'on desire additionner les 3 premiers octets

    Code:
    movlw num ; adresse de départ du tableau
    movf INDF,w
    incf FSR,f
    addwf INDF,w
    incf FSR,f
    addwf INDF,w
    incf FSR,f
    ; W contient le résultat

  14. #13
    invitef86a6203

    Re : Assembleur pour PIC - BTFSC

    si num est un pointeur et data un index et bit un masque de bit

    Code:
    movf num,w 
    addwf data,w 
    movwf FSR 
    movf INDF,w 
    ; W contient l'adresse calculée
    ; la remettre dans FSR 
    ; et lire avec INDF
    
    ; bit devra t être un mask 
    ; exemple pour le bit 2 , on aura 00000100b = 0x04
    Movwf FSR
    movf INDF,w
    ; un octet data en local => SauveData
    movwf SauveData
    incf FSR,f
    movf INDF,w ; W contient bit
    ANDWF SauveData,f ; mask le bit et résultat dans SauveData
    BTFSC STATUS,Z  ; si <> 0 alors le bit est présent
    goto BitSet ; vrai
    ; condition fausse

Discussions similaires

  1. PIC assembleur et gestion de mots de 16 bits
    Par invite427c7eae dans le forum Électronique
    Réponses: 10
    Dernier message: 07/10/2009, 06h53
  2. recherche assembleur pour PIC
    Par BastienBastien dans le forum Électronique
    Réponses: 5
    Dernier message: 09/03/2008, 19h28
  3. truc en langage assembleur PIC
    Par invite412b515c dans le forum Électronique
    Réponses: 0
    Dernier message: 04/06/2007, 21h05
  4. Programmation assembleur sur PIC
    Par inviteebefde8d dans le forum Électronique
    Réponses: 0
    Dernier message: 19/03/2007, 10h38
  5. Macro avec mplab en assembleur pour pic
    Par invite7ff929b6 dans le forum Électronique
    Réponses: 0
    Dernier message: 17/03/2007, 15h38
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...