assembleur decfsz
Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

assembleur decfsz



  1. #1
    holala02

    assembleur decfsz


    ------

    Bonjour tout le monde.

    J'aimerai faire comme dans l'arduino clignoté une LED
    Code:
    void loop(){ 
    digitalWrite(LED,HIGH);
    delay(500); // pause de 500ms
    digitalWrite(LED,LOW); 
    delay(500); // pause de 500ms
    
    }
    mais en assembleur j'ai pris ce microcontrolleur le pic 10f200

    donc j'ai fait ça:


    Code:
        #define LED b'00000010'
        #define ETEIND b'00000000'
    
        CBLOCK 0x10
    
        compteur1 ; ma variable
    
        ENDC
    
    clrf compteur1 ;efface le contenu de ma variable
    
    MAIN_PROG CODE                      ; let linker place main program
    
    START
        
    ;l'oscillateur est en 4Mhz selon isis   
          
        Debut 
        
        movlw LED ;mettre la valeur pin HIGH dans le registre des variable w
        tris GPIO ; utiliser le port ou bien le pin de mon micro controlleur
        bsf GPIO, 0 ; je ne sais pas à quoi sert bsf :/
        
    ;normalement mon LED est alumé
    
        decfsz compteur1, 512 ; je ne sais pas comment utilise le decfsz
    
        
    ;on eteind la lamp..
        movlw ETEIND
        tris GPIO
        bsf GPIO, 0
            decfsz compteur1, 512 ; je ne sais pas comment utilise le decfsz
        
        goto Debut                ;normalement la boucle doit recommence et hope le clignotement


    bon je ne sais pas comment utiliser decfsz

    en C/C++
    je met une variable et je fait ma variable--
    mais là je ne sais pas :/ si quelqu'un peut me donner un exemple en C

    et je ne sais pas à quoi sert bsf

    merci d'avance pour l'aide

    -----

  2. #2
    satinas

    Re : assembleur decfsz

    Bonjour,
    Sur ces 10f GPIO sert à la fois à définir la fonction de la pin (input ou output), et de la lire ou l'écrire.
    Seule l'instruction TRIS permet de sélectionner la fonction, input si bit à 1, output si bit à 0.
    Les autres instructions servent à lire la pin si elle est en input, ou l'écrire si elle est en output.

    "movlw 2" puis "tris GPIO" mettent toutes les pins en output sauf gp1, il faut le faire qu'une seule fois au début.
    gp0 est donc une output, ensuite pour allumer ou éteindre la led sur gp0 , on écrit 0 ou 1 dans le bit 0 du registre GPIO.
    On le fait par les instructions "bcf GPIO,0" ou "bsf GPIO,0".

    "decszf cpt" veut dire décrémenter la variable cpt et si elle arrive 0, alors sauter l'instruction assembleur qui suit le decsz.f
    Cela permet (par exemple) de sortir d"une boucle si l'instruction sautée est un goto.
    La boucle qui suit s'exécute 10 fois
    Code:
         movlw w,10   // instruction exécutée  1 fois
         movwf cpt    // instruction exécutée  1 fois
     bcl blalblabla   // instruction exécutée 10 fois
         blalblabla   // instruction exécutée 10 fois
         deczf cpt    // instruction exécutée 10 fois
         goto  bcl    // instruction exécutée  9 fois
         blalblabla   // instruction exécutée  1 fois
         blalblabla   // instruction exécutée  1 fois

  3. #3
    antek

    Re : assembleur decfsz

    /
    movlw LED ;mettre la valeur pin HIGH dans le registre des variable w
    tris GPIO ; utiliser le port ou bien le pin de mon micro controlleur
    bsf GPIO, 0 ; je ne sais pas à quoi sert bsf :
    - w, pour WREG, est le registre de travail de l'ALU
    - doit sortir une erreur, tris n'est pas une instruction mais un registre
    - met le bit'0' du registre 'GPIO' à 1
    Il faut auparavent avoir défini 'GPIO'

  4. #4
    antek

    Re : assembleur decfsz

    Il ne faut pas placer des variables n'importe où, sinon tu modifies des registres SFR.
    C'est juste "pour voir" ou bien tu t'intéresses à l'assembleur ?

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

    Re : assembleur decfsz

    Sur les pic à instructions 12 bits, le registre de contrôle des i/o n'est pas accessible directement, il est write-only, et il faut utiliser l'instruction TRIS pour le renseigner avec W, tout ça ne nous rajeunit pas ...

  7. #6
    antek

    Re : assembleur decfsz

    Citation Envoyé par satinas Voir le message
    Sur les pic à instructions 12 bits, le registre de contrôle des i/o n'est pas accessible directement, il est write-only, et il faut utiliser l'instruction TRIS pour le renseigner avec W, tout ça ne nous rajeunit pas ...
    Ah ouais, j'ai tout faux alors . . .

  8. #7
    satinas

    Re : assembleur decfsz

    C'est toi ou le datasheet

  9. #8
    holala02

    Re : assembleur decfsz

    Merci pour votre aide

    regarde mon code SVP, c'est pour faire clignoté une LED



    Code:
    #define LED b'00000010'
        movlw LED
        tris GPIO ;PinMode
        bsf GPIO, 0 ;digitalWrite(LED,HIGH)
    normalement ce petit code en assembleur est équivalent à ce code en arduino:
    Code:
    int LED=2;
    pinMode(LED, OUTPUT);
    digitalWrite(LED,HIGH);
    est ce que je me trompe ?

    maintenant pour faire éteindre mon LED et si j'ai bien pigé le role de bsf qui est l'équivalent de bsf je dois juste changer la valeur 0 par la valeur 1

    Code:
    #define LED b'00000010'
        movlw LED
        tris GPIO ;PinMode
        bsf GPIO, 1 ;digitalWrite(LED,HIGH)
    est ce que je me trompe ?

    regarde SVP mon code qui fait clignoté mon LED:

    Code:
    clrf compteur1
    
        Debut 
        
        movlw LED
        tris GPIO
        bsf GPIO, 0 
        
    
        movlw LED
        tris GPIO
        bsf GPIO, 1
        
    
    
        movlw 5
        movwf compteur1  
        decfsz compteur1
        
        goto Debut
    malheureusement logiquement je dois le faire clignoté mais je n'arrive pas :/


    un truc SVP comment faire Delay(500) ?

    J'ai prit l'adruino comme exemple pour que je comprend mieux le fonctionnement de l'assembleur

    Merci d'avance

  10. #9
    satinas

    Re : assembleur decfsz

    C'est un hobby ou un exercice parce que ça va être difficile de t'apprendre à programmer en assembleur en partant de zéro.
    Tu as suivi un cours ?
    Si la réponse est non, direction le cours asm pic de Mister Bigonoff
    Dernière modification par satinas ; 07/02/2017 à 14h55.

  11. #10
    holala02

    Re : assembleur decfsz

    Je suis entrain de suivre un cours en video, celui de video2brain mais il n'explique pas certain choses, donc je pose la question, je matrise le convertissage de binaire vers décimal, hexadecimal...

    mais je n'ai jamais travailler avec du code et tant que je ne comprends pas à quoi sert le fonctionnement des fonction je ne pourrai jamais faire un truc.

    c'est comme dans C/c++ pour debutant il te casse la tete avec integer prend 65000.... -650000... float 47²00.000... des nombre que tu vas pas utiliser autant qu'un debutant.

    donc j'aimerai apprendre à utiliser l'assembleur et avec le temps je vais avoir le maitrise au fur et à mesure, pourquoi il faut compliquer les choses ? pour dire que je suis le MAITRE absolut --'

    je sais travailler en arduino donc je peux utiliser l'assembleur ce qu'il me faut c'est apprendre à utiliser les fonction c'est tout

  12. #11
    satinas

    Re : assembleur decfsz

    Arduino, c'est pas de l'assembleur, et ça s'apprend aussi ...
    En C il n'y a pas beaucoup d'instructions, et elles sont assez simples. En assembleur, il y en a un paquet, et elles sont spécifiques à chaque processeur, il te faut un cours adapté aux pic. Le cours de Bigonoff est idéal car il aborde les choses progressivement. Si tu maîtrises déjà certains concepts, tu sauteras les chapitres.
    Pour faire un delay, on utilise des boucles, mais ce sont des tâches bloquantes, ou mieux des interruptions. Ton pic n'a pas de mécanisme d'interruption, ouille.
    Il faut te familiariser avec la syntaxe. Par exemple, BSF cela veut dire "bit set" et toi tu veux avec cette instruction mettre un bit à 0, ça va être dur
    La liste des instructions et leurs rôles est dans le datasheet
    http://ww1.microchip.com/downloads/e.../40001239F.pdf
    Dernière modification par satinas ; 07/02/2017 à 16h15.

  13. #12
    antek

    Re : assembleur decfsz

    Citation Envoyé par satinas Voir le message
    Le cours de Bigonoff est idéal car il aborde les choses progressivement.
    Tout à fait !
    -> http://www.abcelectronique.com/bigonoff/

  14. #13
    holala02

    Re : assembleur decfsz

    Merci pour votre patience avec moi, je sais que je suis nul en assembleur mais je veux apprendre aide moi svp.

    J'ai compris comment faire des boucles mais j'ai une question

    Code:
    decfsz compteur1, f
    decfsz sert à decrementer une valeur.

    si je met une variable

    clrf ma_var

    decfsz ma_var, f

    là il va commencer à décrémenté ma_var depuis 255 c'est pour ca pourquoi j'ai le f normalement c'est FF

    maintenant si je veux commencer par 110 ?
    0x6E

    comment je vais faire ?

    Code:
    decfsz ma_var, 0x6E
    ?

  15. #14
    antek

    Re : assembleur decfsz

    clrf ma_var
    decfsz ma_var, f
    movlw d'110'
    movwf ma_var
    decfsz ma_var, f

    Le f c'est pas pour 16 !
    Il indque que le résultat de l'opération sur le registre est placé dans le même registre.

    C'est pas comme ça que tu va apprendre, va faire un tour chez BIGONOFF.

  16. #15
    holala02

    Re : assembleur decfsz

    J'ai compris.

    j'ai essayé de faire cette boucle pendant que je lis les tutos.
    Code:
    Debut
        
        	
    	clrf compteur1
    	clrf compteur2
    	clrf compteur3
    	
        movlw b'00000010'
        tris GPIO
        bsf GPIO, 0
        
        Temporisation
        decfsz compteur1, f
        goto Temporisation
        
        decfsz compteur2, f
        goto Temporisation
        
        decfsz compteur3, f
        goto Temporisation
        
        movlw b'00000000'
        tris GPIO
    
        bsf GPIO, 0
    	
    	
    	clrf compteur1
    	clrf compteur2
    	clrf compteur3
    	
    	
    	    Temporisation2
        decfsz compteur1, f
        goto Temporisation2
        
        decfsz compteur2, f
        goto Temporisation2
        
        decfsz compteur3, f
        goto Temporisation2
        goto Debut
    ce code normalement doit allumer et éteindre la lampe chaque seconde ou presque.

    Code:
        movlw b'00000010'
        tris GPIO
        bsf GPIO, 0
    celui la allume la lampe

    Code:
        movlw b'00000010'
        tris GPIO
        bsf GPIO, 1
    celui la eteind la lampe

    J'ai ajouté la boucle sa n'eteind pas :/ pourquoi ?

  17. #16
    satinas

    Re : assembleur decfsz

    parce que "bsf gpio,1" met à 1 la pin gp1, et gp1 n'a rien à voir avec la led qui est sur gp0.
    "tris gpio" il faut le faire une seule fois en début de programme.
    Dernière modification par satinas ; 07/02/2017 à 21h09.

  18. #17
    holala02

    Re : assembleur decfsz

    Merci beaucoup pour le tutorial BIGONOFF, je commencé à comprendre.

    j'ai juste zappé Z, DC, C je n'ai pas compris ce que c'est, et je ne veux pas casser trop la tete je veux maitriser les fonctions de base puis je vais voir le reste.

    maintenant je me suis coincé sur deux choses, les trucs logique comme ANDWF et BSF

    s'il vous plait les trucs logique d'assembleur ressemble ou pas au condition logique du C

    exemple
    if(ma_var1 && ma_var2)
    {
    }
    else if (ma_var1 || ma_var2)
    {
    }

    est ce qu'ils ont le meme significatif ou pas ?
    car je n'ai pas compris le ANDWF par exemple change garde seulement les deux bits qui ont le chiffre 1 o.O
    bon ça je n'ai pas compris et c'est le cas pour le reste des logique car ils ont le meme principe.


    maintenant le bsf c'est le contraire de bcf

    bsf si j'ai bien compris change un bit en 1
    bcf change un bit en 0

    exemple:
    Code:
    movlw b'00000000'
    movwf ma_var
    
    bsf ma_var, 2
    si je ne me trompe pas, je dois avoir un truc comme ça:
    b'00000010

    est ce que je me trompe ?

    Merci encore pour votre aide

  19. #18
    satinas

    Re : assembleur decfsz

    Bonjour,
    Le C sait faire simplement certaines choses, l'asm d'autres.
    Par exemple la notion de bloc C n'existe pas, il faut utiliser par exemple un decfsz/goto pour faire l'équivalent à "if { ... }". Et pour faire '((a*b)|c)+1", il va falloir de taper les 3 opérations une par une en stockant les résultats intermédiares. Bref, tu fais le travail du compilateur. Il y a la notion de macro dans l'asm, qui permet de faire un peu comme une fonction C. Les instructions de test de ton pic sont DECFSZ, INCSZF BTFSS, BTFSC. Les 2 dernières testent un bit.

    ANDWF fait un et binaire banal de 2 coctets, le F signifiie qu'il traite une case mémoire, et sa destination dans le cas de l'asm pic, est soit la case mémoire soit le registre W.
    Le processeur RISC exécute la majorité des instructions en 1 cycle, le calcul de la durée d'exécution de tes boucles est donc facile, en C ce sera plus dur.

    BSF est un exemple de chose simple en asm, que le C ne fait pas aussi simplement.

  20. #19
    antek

    Re : assembleur decfsz

    J'ajouterais qu'il vaut mieux ne pas tenter de faire des traductions C -> assembleur.
    Il faut essayer de "penser" assembleur.

  21. #20
    antek

    Re : assembleur decfsz

    Citation Envoyé par holala02 Voir le message
    exemple:
    Code:
    movlw b'00000000'
    movwf ma_var
    bsf ma_var, 2
    si je ne me trompe pas, je dois avoir un truc comme ça:
    b'00000010
    Les octets sont numérotés de 0 à 7.
    Le bit 2 a donc le troisième rang -> b'00000100'
    je n'ai pas compris le ANDWF par exemple change garde seulement les deux bits qui ont le chiffre 1 o.O
    On fait un ET bit à bit entre 2 octets.

  22. #21
    holala02

    Re : assembleur decfsz

    J'ai reussi à faire des additions et des soustractions

    Question SVP comment utilisé ANDWF je n'ai pas compris le role de ce ANDWF ?

    je sais qu'il ne faut pas comparer assembleur avec C, mais le C utilise AND aussi

    if(ma_var AND ma_var)

    bon il ne faut pas comparer j'ai compris que si j'utilise le ANDWF je vais garder seulement les 1
    exemple:
    b'00101000'
    ANDWF
    b'11110101'
    j'aurai une resultat de

    b'00100000'


    ok c'est bien mais ca sert à quoi ?

    dans quel cas je peux utilise ce ANDWF

    Merci

  23. #22
    satinas

    Re : assembleur decfsz

    Quand t'en auras besoin ...
    Les opérations binaires il y en a dans tous les langages, ça sert à manipuler les bits dans les octets, en électronique on bidouille des pins donc des bits.
    Ca sert aussi à convertir des minuscules en majuscules.
    Dernière modification par satinas ; 08/02/2017 à 14h07.

  24. #23
    satinas

    Re : assembleur decfsz

    A titre d'exercice, essaye de faire clignoter ta led sans utiliser BSF et BCF, cela te fera découvrir l'utilisation de ANDWF, IORWF et XORWF.

Discussions similaires

  1. assembleur
    Par invite11df21b5 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 26/02/2013, 14h00
  2. pb assembleur
    Par invite89798d3f dans le forum Électronique
    Réponses: 3
    Dernier message: 24/04/2008, 11h11
  3. Assembleur VAX
    Par invited0c72bcb dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 02/05/2006, 07h48
  4. C ou assembleur ?
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 3
    Dernier message: 08/03/2006, 20h08
  5. Assembleur
    Par invite62588872 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 18/02/2006, 12h21