ASM problème en assembleur
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

ASM problème en assembleur



  1. #1
    invite464a02ec

    Red face ASM problème en assembleur


    ------

    Salut a tous,
    Quelques petits problème en ASM :

    Petite question sur l’instruction suivante:
    xorlw (0x01 ^ 0x00)
    Comment ça marche ! Que fait-on ?
    Ensuite 2éme question :
    Sur un pic 16f84A j’ai les port B 0 , 1 , 2 , 3, 4 , 5 chacun avec une led en sortie.
    Sur le port B 6 en entée ( un capteur ). Et enfin sur le port B7 une led en sortie :
    Si je fais ceci :
    La var Don = B. 00111111

    Movfw Don
    Movwf PortB

    Est-ce que le prot B6 va être affecté ? Même si il est en entrée ?
    Comment faire pour mettre les données de Don dans B 0,1,2,3,4,5 sans toucher a B 6 et 7 ?

    Est-ce que ça c’est mieux :

    Movfw Portb,6
    Movwf don,6

    Movfw Portb,7
    Movwf don,7

    Movfw Don
    Movwf PortB

    Une autre solution plus rapide ?

    Merci.

    -----

  2. #2
    RISC

    Re : ASM problème en assembleur

    Bonjour,

    Je te conseille l'excellent site de Bigonoff qui comporte des cours en français sur les PIC et qui va t'aider à maitriser les PIC16 :

    http://www.abcelectronique.com/bigon....php?par=907e0

    Télécharge le cours sur le PIC16F84 dans la page ci-dessus.

    a+

  3. #3
    invite464a02ec

    Re : ASM problème en assembleur

    Merci
    Mais j'ai mangé les nombreuses pages de Mr BIGONOFF.
    J'ai bien compris la commande xorlw mais de ce type :

    xorlw b.01010101 ;

    Mais ce que je ne sais pas c'est " (0x01 ^ 0x00) " .

    @+

  4. #4
    invitea0ac6aa2

    Re : ASM problème en assembleur

    Bonjour vavoum et tout le monde
    Il me semble que xorlw (0x01)
    donne la meme chose que xorlw (0x01 ^ 0x00).
    C'est ce que j'ai vérifié avec mplab

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

    Re : ASM problème en assembleur

    Bonjour
    Ce que je dis est sous reserve de verification, mais il me semble que le signe ^ et le signe pour la fonction OU, donc dans l'expression "xorlw (0x01 ^ 0x00)", le preprocesseur remplace 0x01 ^ 0x00 par son resultat, 0x01 et ecris en binaire xorlw 0x01 dans le .HEX.
    Gilles

  7. #6
    invitea0ac6aa2

    Re : ASM problème en assembleur

    Parfaitement d'accord gedonet, c'est exactement ce que je disais. Le problème est de savoir pourquoi écrire un litéral (0x01 ^ 0x00) au lieu de (0x01) puisque XOR entre 0 et 1 donne 1 .
    A moins que, pourquoi faire simple quand on peut faire compliqué...
    michel

  8. #7
    invite092cb13c

    Re : ASM problème en assembleur

    Citation Envoyé par pico03 Voir le message
    Parfaitement d'accord gedonet, c'est exactement ce que je disais. Le problème est de savoir pourquoi écrire un litéral (0x01 ^ 0x00) au lieu de (0x01) puisque XOR entre 0 et 1 donne 1 .
    A moins que, pourquoi faire simple quand on peut faire compliqué...
    michel
    Rebonjour
    Je ne connais pas le contexte de la ligne en question, mais il arrive que dans de l'assemblage conditionnel on utilise ce type d'ecriture, par exemple j'ai ecrit une routine pour le RS232 pour les 16F, qui en fonction de le frequence du quartz et de la vitesse souhaité, calul automatiquement SPBRGA, verifie l'erreur sur la vitesse et choisit le mode haute ou basse vitesse. Pour ces operations, on peut avoir à utiliser des fonctions logiques pour charger des valeurs dans des registres.
    On peut aussi voir le source du debugger de Bigonoff qui calcul la vitesse de transmission, et pour ne pas utiliser de variable modifie, par l'ajout de nop, la longueur du source et doit donc le reloger pour qu'il soit toujours en fin de memmoire flash.
    Mais je suis d'accord avec pico03 l'ecriture de la ligne n'a pas trop d'interret, si ce n'est d'embrouiller les programmeurs moins aguerris.
    Gilles

  9. #8
    invite092cb13c

    Re : ASM problème en assembleur

    Suite
    Pour la seconde question de vavoum, la methode la plus simple, c'est de tester le bit qui t'interesse, pour ton cas tu peux ecrire:

    btfsc PORTB,6
    goto traitement si capteur=1
    goto traitement si capteur=0 ou suite du programme

    ou l'inverse:

    btfss PORTB,6
    goto traitement si capteur=0
    goto traitement si capteur=1 ou suite du programme


    Gilles

  10. #9
    invite464a02ec

    Re : ASM problème en assembleur

    Merci Gedonet et pico03
    pour les explications de xorlw (0x01 ^ 0x00).
    Pour ce qui est de "Movfw Portb,7 et Movwf don,7"
    Nul ! et regardant plus en détail les cours de Mr Bigonoff.
    J' ai vu la plus grosse bourde de l'année.

    Merci a tous!

Discussions similaires

  1. Convertir un programme en C en ASM
    Par inviteeddea82a dans le forum Électronique
    Réponses: 6
    Dernier message: 17/04/2012, 17h43
  2. Réponses: 4
    Dernier message: 14/05/2007, 21h42
  3. :fs: Passer du .c en .asm
    Par invitee37923cb dans le forum Logiciel - Software - Open Source
    Réponses: 18
    Dernier message: 08/02/2006, 22h09
  4. Catégorie des ASM
    Par invite8aa7c171 dans le forum Secourisme spécial Croix-Rouge
    Réponses: 7
    Dernier message: 08/12/2005, 12h34
  5. Asm-> Hexadecimal
    Par acx01b dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 24/01/2005, 21h13
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...