programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autres PIC
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autres PIC



  1. #1
    invite93ed6d5d

    programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autres PIC


    ------

    Bonjour tout le monde !
    Apres avoir lu et passer des nuits blanches pour bien s'ameliorer dans la programmation des pics , je me suis lancer comme tout le monde a adopter le petit 16F84A , et voici donc mon premier programme : il sert a faire le complement a 2 du contenu du PORTA la stock dans la variable setin puis l'affiche sur le PORTB .
    Je veux votre opinion sur ce programme si c'est bien fait ou pas ? Deux petites question s'il vous plait : je veux savoir esque la declaration de la zone des variables commence par 0x00C pour tout les autres pic , puis esque pour initialiser le debut du programme en commence toujours par l'adresse 0x000 pour les tous les microcontrolleurs?
    Merci infiniment pour l'aide.

    Code:
    ;**********************************************************************************************************************
    
    ; Programme realisé par Badr en 2011 pour la creation du premier robot programmé sous MPLAB
    ; Programme de teste et d'experimentation
    ; Nom : ProgTest
    ; Microcontroller : 16F84A
    
    ;***********************************************************************************************************************
     
    ; Fichier source du PIC est P16F84A.INC
    
    ;***********************************************************************************************************************
    
            LIST P=16F84A          ; directive de validation du microcontroleur
            #include<P16F84A.INC>  ; directive de la selection du reperatoire
    
                    __CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC
    
    ;***********************************************************************************************************************
    
    ;****************************************** Declaration des variables **************************************************
    
                      CBLOCK   0x00C      ; debut de la zone variables
                               setin : 1    ; 1 byte
                               ENDC       ; fin de la declaration
    
    ;***********************************************************************************************************************
    
    ; Debut de l'initialisation :
                   
                                  org       0x000    ; adress du debut
                                  goto      bobo     ; go to bob instruction
    
    ; Debut de le configuration des ports : 
                                
                           bobo
                                  bsf        STATUS,RP0 ; ouvrire banque N1
                                  movlw      h'FF'      ; charger le work avec la valeur FF
                                  movwf      TRISA      ; basculer le work vers trisa
                                  movlw      h'00'      ; charger le work avec la valeur 00
                                  movwf      TRISB      ; basculer le work vers trisb
                                  bcf        STATUS,RP0 ; ouvrir banque N0
                          
    ; Debut du programme initiale :
                     
           
                           repet     
                                  movf       PORTA      ; charger le work avec porta
                                  movwf      setin      ; deplacer le work vers la variables setin
                                  comf       setin,f    ; faire le comlement a 1 de la variable setin
                                  incf       setin,f    ; setin+1 dans la variable setin
                                  movlw      setin      ; charger le work avec la variable setin
                                  movwf      PORTB      ; faire afficher le work sur porta
                                  goto       repet      ; goto repet instruction
                                  END                   ; fin du programme-GO directive

    -----
    Dernière modification par gienas ; 13/12/2011 à 14h38. Motif: Ajouté les balise code, obligatoires pour les programmes

  2. #2
    inviteeb160de1

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    Salut,
    Le "org xxx" permet d'indiquer que les instructions à suivre commencent à l'adresse xxx. Comme au reset le micro se branche sur l'adresse 0x00 (j'exclue le cas du bootloader), la premiere instruction executée y est stockée. De mémoire, l'adresse de branchement d'IT est à l'adresse 0x04, donc en général on fait un org 0x00 suivi d'un goto pour aller vers la suite du programme, puis un org 0x04 pour les instructions d'IT.

    Pour le CBLOCK, l'adresse qui suit définit le début de l'adressage RAM utilisé. A voir donc en fonction de la plage mémoire addressable hors registres par ton micro, ça doit changer pour chaque PIC. Mais la donnée doit bien figurer quelque part dans les header .INC tu micro que tu utilises.

    Aurélien

  3. #3
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    Bonjour Aurelien je vous remercie pour la reponse !
    Je voix d'apres la structure de la ram du 16f84 que l'adress 0x00 est totalement vide alors que les cases suivantes sont occupées,alors, pourquoi mettons nous la premiere instruction dans 0x00 alors que la suite est occupées jusqua 0x0C , pourquoi ne pas mettre org 0x0C pour qui a plus d'espace pour notre programme .

    org 0x0C
    goto main

    main
    xx xxxxx ; (instructions)
    xx xxxxx ;
    END
    Ca d'une part , d'une autre par pour configurer les variables , quand on met CBLOCK 0x04 on dit que l'adresse 0x04 et le debut de la declaration,mais , je voix que cette adresse est occupée aussi on peut voire clairement qu'il sagit du FSR.
    Pouvez vous m"expliquer svp?

  4. #4
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    desolé pour le CBLOCK 0x04 je voulais ecrire 0x0C

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

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    Ne pas confondre le CBLOCK qui définit une adresse pour la RAM et le ORG qui définit une adresse pour la FLASH.
    Dans ta RAM, les premieres adresses correcpondent aux registres courants (et sur un 16f84, yen a pas beaucoup).
    Mais quelque soit le PIC, la flash commence à 0, c'est la que ton programme se branche, et c'est la que doit impérativement se trouver ta premiere instruction, sinon tu cours le risque d'executer tout et n'importe quoi.

    Mais tout ça n'est pas expliqué dans le cours de bigonoff ?

    Aurélien

  7. #6
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    si ! c'est cours de bingoff si ma pousser a se lancer a la programmation , mais le org etait pour moi le point noir . Laisser moi deviner l'initialisation pour 16F628 .

    CBLOCK 0x20 ; adress du debut de declaration des variables
    setin : 1 ; un byte
    ENDC ; fin de la zone de declaration

    org 0x07 ; adress d'initialisation du programme
    goto main ; aller vers main
    main
    (instruction)

  8. #7
    inviteeb160de1

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    C'est bon pour la RAM et ton CLOCK, par contre d'où sors tu ton "org 0x07" ? Pourquoi pas 0x00 ? Je rapelle qu'on parle de la FLASH ! Ton debut de programme doit TOUJOURS commencer au "Reset Vector". Et ne doit pas empieter avec l'adresse de "Interrupt Vector"

    Aurélien

  9. #8
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    j'ai bien compris la lecon du CBLOCK , alors , pour le je croix qu'on doit tjrs commencer par l'adress 0x00 pour tout les micro nn?

  10. #9
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    s'il vous plait , est-ce-que les adresses d'initialisation du programme 0x00 et d'interruption 0x04 sont valables pour tout les pic?
    merci !

  11. #10
    RISC

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    Salut,

    Mon conseil est de ne PAS utiliser CBLOCK car cela produit un fichier assembleur absolu non relogeable et non portable.
    Il vaut mieux laisser l'assembleur/le compilateur organiser au mieux les données et le code (sauf pour les interruptions ou il faut forcer l'adresse des fonctions d'interruption).

    Code:
    ;=================================== DATA MEMORY	
    
    ;-----------------------------------
    ; USER DEFINED VARIABLES
    ;-----------------------------------
    		
    VARIABLES     UDATA   
    
    Tmp_WREG    RES 1                   ; temporary storage for W register
    Tmp_STATUS RES 1                   ; temporary storage for STATUS register
    Tmp_PCLATH  RES 1                   ; temporary storage for PCLATH register
    ...
    
    
    ;=================================== PROGRAM MEMORY			
    			
    ;-----------------------------------
    ; VECTORS
    ;-----------------------------------
    
    RESET_V     CODE    0x0000          ; reset vector
                goto    Main                    ; jump to start of program
    
    INT_V:       CODE    0x0004          ; interrupt vector
                 goto    Int_Service_Routine     ; jump to interrupt service routine
        
    
    ;-----------------------------------
    ; MAIN PROGRAM LOOP
    ;-----------------------------------
    
                CODE               
    Main:	
        clrf    PORTB                   ; initialize PORTB
        movlw   0x05                    ; initialize Count variable
    ...
    regards

  12. #11
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    Merci RISC pour le conseil , mais ce n'ai pas ce que je demendais . Je cherche a savoir si l'initialisation : org 0x000 et org 0x004 sont valables pour touts les autres pics et non juste pour le 16F84

  13. #12
    RISC

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    Bonsoir,

    La réponse courte est oui pour les PIC16Fxxx.
    Je pense que le cours de Bigonoff couvre cela très en détail.

    Attention c'est différent pour les PIC18, PIC24,...

    Le manuel de référence pour les PIC16F avec des instructions de 14 bits (coeur mid-range) est celui-ci :

    http://ww1.microchip.com/downloads/e...Doc/33023a.pdf

    a+

  14. #13
    inviteeb160de1

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    Ca ne sert à rien d'appliquer betement org 0 et org 4 si tu ne les comprends pas.
    Retiens juste qu'il faut un org pour le Reset Vector et un autre pour l'Interrupt Vector. Apres, faut quand meme lire la datasheet.

    Aurélien

  15. #14
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    si j'ai bien lu le data sheet et j'ai bien metrisé toutes les instructions necessaire pour rediger le programme que l'on desire . je sais bien que le 0x000 est une instruction pour dire que le programme commence a l'adress 0x0004 pour inialiser les interruption .mais ma question est toute simple : est-ce-qu'on doit ecrire org 0x000 et org 0x004 pour n'importe quel quel pic qu'on utilise, juste savoir si oui ou non.
    Merci

  16. #15
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    ;***************************** ****************************** ****************************** *****************************

    ; Programme realisé par Badr en 2011 pour la creation du premier robot programmé sous MPLAB
    ; Programme de teste et d'experimentation
    ; Nom : ProgTest
    ; Microcontroller : 16F84A

    ;***************************** ****************************** ****************************** ******************************

    ; Fichier source du PIC est P16F84A.INC

    ;***************************** ****************************** ****************************** ******************************

    LIST P=16F84A ; directive de validation du microcontroleur
    #include<P16F84A.INC> ; directive de la selection du reperatoire

    __CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _HS_OSC

    ;***************************** ****************************** ****************************** ******************************

    ;***************************** ************* Declaration des variables ****************************** ********************

    CBLOCK 0x00C ; debut de la zone variables
    setin : 1 ; 1 byte
    ENDC ; fin de la declaration

    ;***************************** ****************************** ****************************** ******************************

    ; Debut de l'initialisation :

    org 0x000 ; adress du debut
    goto bobo ; go to bob instruction

    org 0x004 ; adress d'initialisation d'interruptions

    ; Debut de le configuration des ports :

    bobo
    bsf STATUS,RP0 ; ouvrire banque N1
    movlw h'FF' ; charger le work avec la valeur FF
    movwf TRISA ; basculer le work vers trisa
    movlw h'00' ; charger le work avec la valeur 00
    movwf TRISB ; basculer le work vers trisb
    bcf STATUS,RP0 ; ouvrir banque N0

    ; Debut du programme initiale :


    repet
    movf PORTA ; charger le work avec porta
    movwf setin ; deplacer le work vers la variables setin
    comf setin,f ; faire le comlement a 1 de la variable setin
    incf setin,f ; setin+1 dans la variable setin
    movlw setin ; charger le work avec la variable setin
    movwf PORTB ; faire afficher le work sur porta
    goto repet ; goto repet instruction
    END ; fin du programme-GO directive

  17. #16
    invite93ed6d5d

    Re : programme d'un 16F84A : org 0x000 et CBLOCK 0x00c est-ce-que c'est le cas pour touts les autre

    sa marche apre avoir ajouter le org 0x004 ?

Discussions similaires

  1. Cherche des cours de BASIC pour les PIC 16F84A
    Par inviteeddea82a dans le forum Électronique
    Réponses: 14
    Dernier message: 16/03/2012, 15h09
  2. PIC 16F84A ne se programme plus
    Par invite9d44df37 dans le forum Électronique
    Réponses: 4
    Dernier message: 06/08/2009, 20h10
  3. appel à l'aide pour schema + programme pic 16F84A
    Par inviteb1be5fe6 dans le forum Électronique
    Réponses: 7
    Dernier message: 10/07/2009, 21h42
  4. programme en PIC 16f84a
    Par invitedc3cc90b dans le forum Électronique
    Réponses: 5
    Dernier message: 24/12/2007, 14h19
  5. Programme et config d'un PIC 16F84A
    Par inviteaa61387f dans le forum Électronique
    Réponses: 9
    Dernier message: 21/01/2007, 21h35
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...