[Programmation] assembleur FSR INDF
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

assembleur FSR INDF



  1. #1
    holala02

    assembleur FSR INDF


    ------

    Bonjour tout le monde;
    je me suis coincé dans ce code:

    Code:
    movlw 0x50
    movwf mavariable
    movlw mavariable
    
    movwf FSR
    
    movf INDF, w
    movlw 0x50
    là je charge ma valeur 0x50 (équivalent de 80 en decimal)

    puis j'insere ma valeur dans ma variable

    puis je prends l'adresse de ma viariable et je l'insere dans le registre FSR POURQUOI ? il sert à quoi le FSR

    le pire c'est que je ne sais pas pourquoi je dois recupere mon adresse grace à

    Code:
    movlw INDF, w
    o.O ???

    je peux facilement utilise

    Code:
    movlw 0x50
    movwf mavariable
    movlw mavariable
    et j'ai l'adresse donc c'est quoi l'utilité de ces deux registres enfin ils ont dit que INDF n'est pas un registre

    j'ai cherche dans le datasheet et j'aimerai savoir un truc SVP:

    Nom : Sans titre-1.jpg
Affichages : 425
Taille : 131,2 Ko

    C'est quoi un BANK ? pourquoi il y'a deux banks ?

    autre choses SVP

    ils ont dit que le registre FSR se trouve dans l'adresse 0x04 dans les deux banques alors que c'est faux, le registre FSR se trouve dans l'adresse 0x04 dans la banque 0 et dans l'adresse 0x84 dans la banque 1

    est ce que je me trompe ?

    Merci de m'eclairé cette partie vraiment je me sens perdu

    -----

  2. #2
    Jack
    Modérateur

    Re : assembleur FSR INDF

    ca serait bien que tu cites le microcontroleur en question.

  3. #3
    holala02

    Re : assembleur FSR INDF

    ah je m'excuse, j'ai juste oublié
    le pic c'est: p16f84a

  4. #4
    satinas

    Re : assembleur FSR INDF

    Dans le format des instructions machine de 12 bits du pic 10F200, on a réservé 5 bits pour l'adresse de la case mémoire.
    Donc on ne peut adresser que 32 octets. Si ta mémoire RAM dépasse 32 octets, il faut l'organiser en banks de 32 octets.

    Bon t'as changé de pic ...
    Dans le format des instructions machine de 14 bits du pic 16F84, on a réservé 7 bits pour l'adresse de la case mémoire.
    Donc on ne peut adresser que 128 octets. Si ta mémoire RAM dépasse 128 octets, il faut l'organiser en banks de 128 octets.

    Il y a une zone du registre status dans lequel on indique dans quel bank on travaille.
    Certains registres très utilisés sont dupliqués à un même offset dans toutes les banks, de façon à ce qu'on puisse y accéder quelque soit la bank en cours.

    Quand tu fait "movwf mavariable", tu fais de l'adressage direct. Tu vas chercher le contenu de la case mémoire dont l'adresse a été attribuée à mavariable lors de l'assemblage.
    Tu découvres l'adressage indirect. Tu mets dans FSR l'adresse de la case mémoire que tu veux lire ou écrire, et tu utilises INDF pour y accéder.
    Donc on accède à l'octet dont l'adresse est dans FSR, c'est pour cela que INDF n'est pas un registre physique, c'est juste un mot qui veut dire, va chercher l'adresse dans FSR et lit/écrit.

    FSR il répond aux adresses absolues 0x04 et 0x84, et il est situé à l'adresse relative 0x04 dans toutes les banks.

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

    Re : assembleur FSR INDF

    Pour comprendre comment ça marche on t'a donné le lien vers BIGONOFF.
    Poser des questions décousues ne t'avancera à rien.

  7. #6
    holala02

    Re : assembleur FSR INDF

    Merci Satinas.
    j'ai changé le pic pour suivre le tutorial que tu m'as donné, sincerement j'ai compris beaucoup de chose grace à ce tutorial mais vu que je suis debutant je me bloque beaucoup.

    j'ai copier/coller l'exemple de tutoriel pour faire un sous programme:

    movlw 0x25
    tempo
    movwf ma_variable
    boucle
    decfsz ma_variable, f
    goto boucle
    return


    MPlab X exécute ce programme sans probleme, mais sous isis il me dit qu'il y'a un probleme quand j'enleve le return isis ne dit rien :/

    l'erreur c'est:
    [PIC16 CORE] PC=0x0008 Stack underflow executing RETURN instruction

    desole pour ces questions, mais j'aimerai comprendre avant de poursuivre et donc j'ai besoins de vos aides

    Merci beaucoup d'avance

  8. #7
    satinas

    Re : assembleur FSR INDF

    Il faut donner la totalité de ton programme, Isis je connais pas, mon fer à souder n'a pas de nom, lui.
    Dernière modification par satinas ; 10/02/2017 à 17h40.

  9. #8
    holala02

    Re : assembleur FSR INDF

    voici le programme complet:

    Code:
    #include "p16f84a.inc"
    
    ; CONFIG
    ; __config 0xC007
     __CONFIG _FOSC_EXTRC & _WDTE_ON & _PWRTE_ON & _CP_ON
    
    
    
    RES_VECT  CODE    0x0000            ; processor reset vector
        GOTO    START                   ; go to beginning of program
    
    ; TODO ADD INTERRUPTS HERE IF USED
    
    MAIN_PROG CODE                      ; let linker place main program
    
    START
    
     	CBLOCK 0x0C
    	ma_variable
    	ENDC
    
    	    movlw 0x25
    	tempo
    		movwf ma_variable
    	    boucle
    		decfsz ma_variable, f
    		goto boucle
    	return
    
        END
    Images attachées Images attachées  

  10. #9
    satinas

    Re : assembleur FSR INDF

    Tu viens du C et tu ne sais pas ce qu'est un return ?
    Relis bien le dernier message d'Antek, et va bosser
    Dernière modification par satinas ; 10/02/2017 à 17h56.

  11. #10
    holala02

    Re : assembleur FSR INDF

    Je boss dur chef x)

    J'ai relis le chapitre, j'ai compris mon erreur
    voici mon programme de clignotement de ma façon

    Code:
    ; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR
        
    ; PIC16F84A Configuration Bit Settings
    
    ; Assembly source line config statements
    
    #include "p16f84a.inc"
    
    ; CONFIG
    ; __config 0xC007
     __CONFIG _FOSC_EXTRC & _WDTE_ON & _PWRTE_ON & _CP_ON
    
    
    
    RES_VECT  CODE    0x0000            ; processor reset vector
        GOTO    START                   ; go to beginning of program
    
        	#DEFINE LED PORTA, 2
    	#DEFINE BOUTON PORTB, 2
        
    ; TODO ADD INTERRUPTS HERE IF USED
    	class
    	    bsf STATUS , RP0
    	    movwf TRISA
    	    bcf STATUS, RP0
    	    bsf LED
    	return
    	
    MAIN_PROG CODE                      ; let linker place main program
    
    START
    
     	CBLOCK 0x0C
    	ma_variable
    	ma_variable2
    	ma_variable3
    	ENDC
    
    
    	    movlw b'11111011'
    	    call class
    	    
    	    clrf ma_variable
    	    clrf ma_variable2
    	    clrf ma_variable3
    	    
    	    movlw 0xFF
    	    movwf ma_variable
    	    movlw 0xFF
    	    movwf ma_variable2
    	    movlw 0xFF
    	    movwf ma_variable3
    	boucle
    	    DECFSZ ma_variable, f
    	    goto boucle
    	boucle2
    	    DECFSZ ma_variable2, f
    	    goto boucle2
    	boucle3
    	    DECFSZ ma_variable3, f
    	    goto boucle3
    
    	    movlw b'00000100'
    	    call class
    	
    	    clrf ma_variable
    	    clrf ma_variable2
    	    clrf ma_variable3
    	    
    	    movlw 0xFF
    	    movwf ma_variable
    	    movlw 0xFF
    	    movwf ma_variable2
    	    movlw 0xFF
    	    movwf ma_variable3
    	boucle4
    	    DECFSZ ma_variable, f
    	    goto boucle4
    	boucle5
    	    DECFSZ ma_variable2, f
    	    goto boucle5
    	boucle6
    	    DECFSZ ma_variable3, f
    	    goto boucle6
    
        END
    il y'a un truc le 10eme clignotement n'est pas temporisé avec les autres il le fait vite fait :/

    un truc que je ne comprends pas dans ce code c'est le changement des banks

    le registre TRISA se trouve dans le bank 1 alors que PORTA se trouve dans le bank 0

    dans le tuto ont fait ça:

    Code:
    	    bsf STATUS , RP0
    	    movwf TRISA
    	    bcf STATUS, RP0
    	    bsf LED
    normalement et si j'ai bien compris ils doivent faire ça:
    Code:
    	    bsf STATUS , RP1
    	    movwf TRISA
    	    bcf STATUS, RP0
    	    bsf LED
    RP1 puis RP0 non ?

  12. #11
    holala02

    Re : assembleur FSR INDF

    Nom : Sans titre-1.jpg
Affichages : 315
Taille : 131,2 Ko

    dans le Datasheet le RP0 commence et se termine entre Bank 0 (00h - 7Fh)

    RP0: Register Bank Select bits (used for direct addressing)
    01 = Bank 1 (80h - FFh)
    00 = Bank 0 (00h - 7Fh)

    alors que le trisa se trouve dans le bank1

    j'ai pas pigé :/

  13. #12
    antek

    Re : assembleur FSR INDF

    Citation Envoyé par holala02 Voir le message
    normalement et si j'ai bien compris ils doivent faire ça:
    Code:
    	    bsf STATUS , RP1
    	    movwf TRISA
    	    bcf STATUS, RP0
    	    bsf LED
    RP1 puis RP0 non ?
    Pour sélectionner bk0 ou bk1 seul RP0 change.

  14. #13
    Jack
    Modérateur

    Re : assembleur FSR INDF

    Conformément aux règles participatives du forum programmation, les sujets portant sur la programmation des
    µContrôleurs doivent être traitées dans le forum électronique.

  15. #14
    holala02

    Re : assembleur FSR INDF

    Salut mes amis;
    voici mon code ultim pour faire clignoté ma LED j'avance bien

    Code:
    ; TODO INSERT CONFIG CODE HERE USING CONFIG BITS GENERATOR
        
    ; PIC16F84A Configuration Bit Settings
    
    ; Assembly source line config statements
    
    #include "p16f84a.inc"
    
    ; CONFIG
    ; __config 0xC007
     __CONFIG _FOSC_EXTRC & _WDTE_ON & _PWRTE_ON & _CP_ON
    
    
    
    RES_VECT  CODE    0x0000            ; processor reset vector
        GOTO    START                   ; go to beginning of program
    
        	#DEFINE LED PORTA, 2
    	#DEFINE BOUTON PORTB, 2
        
    ; TODO ADD INTERRUPTS HERE IF USED
    	ETAT_LED
    	    bcf STATUS , RP0
    	    bsf LED
    	return
    
    	EFFACER
    	    movlw 0x0C
    	    movwf FSR
    	    suivant
    		clrf INDF
    		incf FSR, f
    		btfsc FSR, 4
    		goto suivant
    	return
    
    
    	
    MAIN_PROG CODE                      ; let linker place main program
    
    START
    
     	CBLOCK 0x0C
    	    ma_variable
    	    ma_variable2
    	    ma_variable3
    	ENDC
    
    debut
    
    	    bsf STATUS , RP0
    	    bcf TRISA, 2
    	    
    	    call ETAT_LED
    	    
    	    call EFFACER
    	    
    	    movlw 0xFF
    	    movwf ma_variable
    	    movlw 0xFF
    	    movwf ma_variable2
    	    movlw 0x05
    	    movwf ma_variable3
    	    
    	boucle
    	    DECFSZ ma_variable, f
    	    goto boucle
    
    	    DECFSZ ma_variable2, f
    	    goto boucle
    	    
    	    DECFSZ ma_variable3, f
    	    goto boucle
    
    	    bsf STATUS , RP0
    	    bsf TRISA, 2
    	    call ETAT_LED
    
    	    call EFFACER
    	    
    	    movlw 0xFF
    	    movwf ma_variable
    	    movlw 0xFF
    	    movwf ma_variable2
    	    movlw 0x05
    	    movwf ma_variable3
    	    
    	boucle2
    	    DECFSZ ma_variable, f
    	    goto boucle2
    
    	    DECFSZ ma_variable2, f
    	    goto boucle2
    
    	    DECFSZ ma_variable3, f
    	    goto boucle2
    
    	    goto debut
        END
    est ce qu'il y'a des remarques avant que je passe ce chapitre de clignotement LED ?

    autres questions SVP qui tourne dans ma tete:

    le OPCODE de ce pic PIC16F84A est en 14bit, comment il est en 14bit alors qu'on est sur un pic de 8bit oO ???

    Question importante sur mon code:

    Quand j'eteind la LED en fait elle ne s'eteind pas c'est juste que le pin RA2 au lieu de donne le 5V (1Bit) on lui donne la masse (0bit) et ça j'ai pas trop aimé comment je peux desactivé le pin.

    j'ai cherche sur le datasheet le clrf mettre seulement des 1, donc jamais il sera en etat disabled :/

    comment le faire SVP

  16. #15
    satinas


Discussions similaires

  1. Assembleur
    Par om38100 dans le forum Électronique
    Réponses: 13
    Dernier message: 21/11/2013, 01h44
  2. assembleur
    Par invite11df21b5 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 26/02/2013, 14h00
  3. assembleur
    Par bird12358 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 30/09/2009, 18h07
  4. Assembleur
    Par invitee8b04b8f dans le forum Technologies
    Réponses: 12
    Dernier message: 20/12/2008, 20h12
  5. assembleur
    Par inviteacc27a21 dans le forum Électronique
    Réponses: 3
    Dernier message: 10/09/2007, 06h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...