algorithme pour decoder 4 bits en 16 flags en assembleur
Affichage des résultats 1 à 2 sur 2

algorithme pour decoder 4 bits en 16 flags en assembleur



  1. #1
    invite7ff929b6

    Question algorithme pour decoder 4 bits en 16 flags en assembleur


    ------

    Bonjour

    Je vous explique mon probleme, j'ai un pic16f84a qui reçoit un code sur 4 bits (RB3,4,5 et 6) et je veu que suivant ce code il ait le flag correspondant qui soit mis a 1
    un exemple pour une meilleur comprehension :
    code reçut : b'0010' , flag2 mis a 1
    code reçut : b'0101' , flag5 mis a 1
    jusqu'au flag16

    Donc il me faudrait un algorithme qui me fasse ce boulot mais qui n'utilise pas la methode du compteur programme car j'utilise des interuptions et sa fou le bordel

    deux exemples que j'ai laissé tomber :

    un parcequ'il est trop long :

    decodeur CLRF reserve_1 ; nettoyage des reserves de flag
    CLRF reserve_2

    MOVF sauv_4bits_PORTB,0 ; mise du code dans W
    SUBLW b'0000' ; soustraction du code avec 0000
    BTFSC STATUS,Z ; test du resultat
    RETURN ; si la soustraction donne 1 alors partir sinon code suivant
    MOVF sauv_4bits_PORTB,0
    SUBLW b'0001'
    BTFSC STATUS,Z
    GOTO decod_1
    MOVF sauv_4bits_PORTB,0
    SUBLW b'0010'
    BTFSC STATUS,Z
    GOTO decod_2
    MOVF sauv_4bits_PORTB,0
    SUBLW b'0011'
    BTFSC STATUS,Z
    GOTO decod_3
    MOVF sauv_4bits_PORTB,0
    SUBLW b'0100'
    BTFSC STATUS,Z
    GOTO decod_4
    MOVF sauv_4bits_PORTB,0
    SUBLW b'0101'
    BTFSC STATUS,Z
    GOTO decod_5
    MOVF sauv_4bits_PORTB,0
    SUBLW b'0110'
    BTFSC STATUS,Z
    GOTO decod_6
    MOVF sauv_4bits_PORTB,0
    SUBLW b'0111'
    BTFSC STATUS,Z
    GOTO decod_7
    MOVF sauv_4bits_PORTB,0
    SUBLW b'1000'
    BTFSC STATUS,Z
    GOTO decod_8
    MOVF sauv_4bits_PORTB,0
    SUBLW b'1001'
    BTFSC STATUS,Z
    GOTO decod_9
    MOVF sauv_4bits_PORTB,0
    SUBLW b'1010'
    BTFSC STATUS,Z
    GOTO decod_10
    MOVF sauv_4bits_PORTB,0
    SUBLW b'1011'
    BTFSC STATUS,Z
    GOTO decod_11
    MOVF sauv_4bits_PORTB,0
    SUBLW b'1100'
    BTFSC STATUS,Z
    GOTO decod_12
    MOVF sauv_4bits_PORTB,0
    SUBLW b'1101'
    BTFSC STATUS,Z
    GOTO decod_13
    MOVF sauv_4bits_PORTB,0
    SUBLW b'1110'
    BTFSC STATUS,Z
    GOTO decod_14
    MOVF sauv_4bits_PORTB,0
    SUBLW b'1111'
    BTFSC STATUS,Z
    GOTO decod_15

    RETURN

    decod_1 BSF reserve_1,flag_telec_avant ; si code=0001 alors mettre a 1 flag correspondant
    RETURN ; et partir
    decod_2 BSF reserve_1,flag_telec_arriere
    RETURN
    decod_3 BSF reserve_1,flag_telec_gauche
    RETURN
    decod_4 BSF reserve_1,flag_telec_droite
    RETURN
    decod_5 BSF reserve_1,flag_telec_stop
    RETURN
    decod_6 BSF reserve_1,flag_telec_7
    RETURN
    decod_7 BSF reserve_1,flag_telec_8
    RETURN
    decod_8 BSF reserve_1,flag_telec_9
    RETURN
    decod_9 BSF reserve_2,flag_telec_10
    RETURN
    decod_10 BSF reserve_2,flag_telec_11
    RETURN
    decod_11 BSF reserve_2,flag_telec_12
    RETURN
    decod_12 BSF reserve_2,flag_telec_13
    RETURN
    decod_13 BSF reserve_2,flag_telec_14
    RETURN
    decod_14 BSF reserve_2,flag_telec_15
    RETURN
    decod_15 BSF reserve_2,flag_telec_16

    RETURN

    l'autre parcequ'il me donne un comportement bizard et qu'il n'est pas au point :

    decodeur CLRF reserve_1 ; nettoyage des reserves de flag
    CLRF reserve_2


    MOVF sauv_4bits_PORTB,0 ; mise du code dans W, code de la forme '00011110'
    ADDWF PCL,1 ; adition de W avec le compteur de ligne de programme
    NOP ; si le code=0 (cad demande telec/auto) ne rien faire
    RETURN
    BSF reserve_1,flag_telec_avant ; si code=0001 alors mettre a 1 flag correspondant
    RETURN ; et partir
    BSF reserve_1,flag_telec_arriere
    RETURN
    BSF reserve_1,flag_telec_gauche
    RETURN
    BSF reserve_1,flag_telec_droite
    RETURN
    BSF reserve_1,flag_telec_stop
    RETURN
    BSF reserve_1,flag_telec_7
    RETURN
    BSF reserve_1,flag_telec_8
    RETURN
    BSF reserve_1,flag_telec_9
    RETURN
    BSF reserve_2,flag_telec_10
    RETURN
    BSF reserve_2,flag_telec_11
    RETURN
    BSF reserve_2,flag_telec_12
    RETURN
    BSF reserve_2,flag_telec_13
    RETURN
    BSF reserve_2,flag_telec_14
    RETURN
    BSF reserve_2,flag_telec_15
    RETURN
    BSF reserve_2,flag_telec_16

    RETURN

    -----

  2. #2
    invite7ff929b6

    Re : algorithme pour decoder 4 bits en 16 flags en assembleur

    C'est bon j'ai resolut le probleme du deuxieme code

    en additionnant au PCL je revenai en debut de page de 256bits au lieu de passer a la suivante donc il a suffit que j'ecrive tout mon code du decodeur dans la meme page de 256bits

    pour ceux que sa aide...

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. Macro avec mplab en assembleur pour pic
    Par invite7ff929b6 dans le forum Électronique
    Réponses: 0
    Dernier message: 17/03/2007, 15h38
  3. Programmation assembleur pour TI-89 titanium
    Par invitea1b49bb7 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 22/08/2006, 21h06
  4. Programme en assembleur pour une modulation FSK
    Par invitee37923cb dans le forum Électronique
    Réponses: 0
    Dernier message: 02/02/2006, 09h00
  5. Convertir 12 bits série en 7 bits paralléle avec un HC11 ?
    Par invite0ee134f7 dans le forum Électronique
    Réponses: 2
    Dernier message: 03/03/2005, 09h39