programmation du pic 16f84

Upload: ali-ouattara

Post on 02-Mar-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/26/2019 Programmation Du Pic 16F84

    1/10

    OUATTARA ALI Le pic16F84

    Page1/10

    CHAP. III- PROGRAMMATION DU PIC

    I. Fentre dun diteur standard pour raliser un programme en assembleur

    On remarque que l'cran se dcoupe en 4 champs :

    Champ tiquette

    Champ code opratoire (mnmonique). Dans ce champ on trouve aussi des directives d'assemblage

    Champ oprande

    Champ commentaire

    Pour passer d'un champ un autre, il suffit de mettre un espace avec la touche espace ou tabulation.

    Plusieurs espaces accols correspondent un seul et mme espace.

    II.

    Directives d'assemblage

    Une directive ne doit pas tre confondue avec les instructions du programme.

    Elle indique tout simplement lassembleur la manire dont on veut quil travaille.

    Les directives ne sont pas sensibles la casse des caractres.

    END (pas sur colonne 1): Fin du fichier contenant le programme.

    EQU (sur colonne 1) : Permet de donner des quivalences (pour des valeurs). C.--d. associer un nombre une tiquette.

    ; programme qui permet d'allumer une LED

    ; sur la sortie RB0

    List p=16F84A ; processeur utilis

    #include ; initialisation des noms de variables

    __config _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ; configuration des fusibles

    org 0x00 ; le programme dmarre toujours cette adresse 00

    goto debut ; saut au programme principal

    org 0x05 ; la premire instruction du programme se trouve ladresse 05

    debutbsf STATUS,5 ; selection du bank 1 pour accder au registre TRIS

    movlw B00000000 ; 0 = sortie

    movwf TRISB ; le port b est entirement en sortie

    bcf STATUS,5 ; retour au bank 0

    bsf PORTB,0 ; met le bit 0 du port B 1 (allume la LED)

    end ; directive de fin de programme

    Champ

    tiquette

    Champ

    oprande

    Champ

    commentaire

    Champ

    codeopratoire

  • 7/26/2019 Programmation Du Pic 16F84

    2/10

    OUATTARA ALI Le pic16F84

    Page2/10

    Exemple :

    ITES_IGN_TLC2 EQU H0D

    Quelque part dans le programme on peut utiliser ITES_IGN_TLC2.Lassembleur comprendra quil sagit du nombreH0D.

    MOVWF ITES_IGN_TLC2 ; Ecriture du contenu de W dans le registre; en RAM nomm ITES_IGN_TLC2

    #DEFINE (sur colonne 1) : Permet de donner des quivalences (pour des chanes de caractres).Cest dire remplacer un texte difficile mmoriser par quelque chose de plus simple.

    Exemple :

    #DEFINE LAMPE PORTA,1

    Quelque part dans le programme on peut utiliser LAMPE :

    BCF LAMPE ; Met le bit 1 du port A 0 (quivalent BCF PORTA,1)

    ORG (pas sur colonne 1) : Dtermine ladresse partir de laquellele compilateur doit mettre les

    instructions qui suivent cette commande

    Exemple :

    ORG 0x00GOTO debut

    Linstruction GOTO est loge ladresse 00 de la mmoire de programme. Son excution renvoie se brancher

    inconditionnellement au label debutqui se trouverait une certaine adresse.

    __CONFIG (pas sur colonne 1) : Dtermine les fusibles qui fixeront le fonctionnement du PIC.

    NB :il y a 2 tirets de 8 avant config

    Exemple :

    __CONFIG _CP_OFF & _PWRTE_ON & _WDT_ON & _HS_OSC

    _CP_OFF : Aucune protection en lecture du pic (choix par dfaut).

    _WDT_ON : WatchDog en service (choix par dfaut).

    _PWRTE_ON : Dlai de dmarrage (72 ms) du pic la mise sous tension (OFF par dfaut).

    _HS_OSC : Oscillateur quartz grande vitesse (10 MHz max) ; si cest _XT_OSC : quartz

    moyenne vitesse (4 MHz maxi) ; si cest _RC_OSC : oscillateur RC 4 Mhz maxi (choix

    par dfaut).

    La configuration peut tre faite automatiquement par le programmateur de PIC en cochant les cases

    correspondantes.

    #INCLUDE (pas sur colonne 1) : Dtermine pour le compilateur toutes les quivalences lies la

    structure du pic (pour lassembleur).

    Cette directive dviter lcriture dune multitude de lignes dassignation au dbut dechaque programme. On peut les regrouper dans un tel fichier et les appeler par une seule

    commande : #include "P16F84A.INC"ou #include

  • 7/26/2019 Programmation Du Pic 16F84

    3/10

    OUATTARA ALI Le pic16F84

    Page3/10

    Exemple :

    #INCLUDE

    CBLOCK (pas sur colonne 1): Dtermine un bloc mmoire pour rserver des octets pour diffrentes

    variables. Elle se ferme par ENDC.

    ENDC Fin de la dclaration pour le bloc mmoire ouvert par CBLOCK.

    Exemple :

    CBLOCK 0x20 ; Dclaration dun bloc mmoire ladresse 0x20de la RAM.DELAI : 1 ; Rservation de 1 octet ladresse 0x20ZONE : 3 ; Rservation de 3 octets partir de ladresse 0x21TABLE : 8 ; Rservation de 8 octets partir de ladresse 0x24ENDC ; Fin de la dclaration du bloc mmoire

    Remarque :Cette directive quivaut une srie de EQU

    MACRO (sur colonne 1): Dtermine un bloc dinstructions qui va sexcuter lors de lappel de la

    macro par le nom donn celle-ci. Elle se ferme par la directive ENDM.

    ENDM Fin de la macro.

    Exemple :

    BANK0 macroBCF STATUS,5

    endm

    Quelque part dans le programme on peut utiliser BANK0 comme une instruction.

    III. Modes dadressage

    1. Adressage inhrent

    Ce mode nest pas proprement parler un mode dadressage, mais tous les fabricants le dcomptent comme tel.

    Les instructions agissent sur les registres internes du microprocesseur. Les instructions comportent donc un

    code oprateur seul sans oprande.

    Par exemple :

    CLRW Met le registre de travail W 0 et met le bit Z 1.

    2.

    Adressage immdiat ou littral

    Dans ce mode dadressage, le code opratoire est suivi par la donne manipuler cest--dire le code oprande.

    Linstruction est donc compose dun code oprateur et dun code oprande seul.

    Une instruction litteral se reconnat facilement car elle se termine toujours par LW.

    Exemple :

    MOVLW 53 ; Stocke la valeur 53 en dcimale dans le registre W.MOVLW B00110101 ; Stocke la valeur 53 en dcimale dans le registre W.SUBLW 5Ah ; Soustraction 5A-W rsultat dans W.

  • 7/26/2019 Programmation Du Pic 16F84

    4/10

    OUATTARA ALI Le pic16F84

    Page4/10

    Remarque :

    Les chiffres hexadcimaux peuvent tre crits aussi de la manire suivante : 0x5A ou H5A.

    3.

    Adressage direct

    Par dfaut, le microcontrleur travail en adressage direct. Le code opratoire est suivi dun octet non sign qui

    est ladresse effective pour une page prcise (bank 0 1) de la donne, ou oprande, manipuler. Il peut tre

    suivi dune valeur prcde par une virgule.

    Exemple :

    ANDWF 0x20,0 ; ET logique entre W et le contenu de ladresse 0x20, rsultat dans W.ANDWF 0x20,1 ; ET logique entre W et le contenu ladresse 0x20, rsultat ladresse 0x20

    ;(autre criture possibleANDWF 0x20car par dfaut la valeur vaut 1 si;absente).

    MOVF 0x0C,0 ;Lecture du registre 0x0C (RAM utilisateur), rsultat dans W.MOVF 0x3A ;Lecture du registre 0x3A (RAM utilisateur), rsultat dans 0x3A. Permet de

    ;tester le bit Z.

    4. Adressage indirect

    Dans ce mode dadressage, loprande est constitu par INDF. Il suffit de spcifier la valeur dadresse sur 8 bits

    dans le registre FSR.

    Exemple :

    Movlw 0x1A ; Charge 1Ah dans WMovwf FSR ; Charge W, contenant 1Ah, dans FSRMOVF INDF,0 ; Lecture du registre point par la valeur contenu dans INDF

    ;(c--d le registre situ l'adresse 1Ah), rsultat dans W.

    IV. Jeu dinstructions du PIC 16F84

    1. Rsum des mnmoniques (en ordre alphabtique)

    addlw k : Additionne une constante k W. Rsultat dans W.

    addwf f,d : Additionne une variable ladresse f avec W. Rsultat dans f si d=1 ou dans W si d=0.

    andlw k : ET logique entre une constante k et W. Rsultat dans W.

    andwf f,d : ET logique entre une variable ladresse f et W. Rsultat dans f si d=1 ou dans W si

    d=0.

    bcf f,b : Met le bit b de f 0.

    bsf f,b : Met le bit b de f 1.

    btfsc f,b : Teste le bit b de f. Si ce bit vaut 0 alors linstruction suivante est ignore (instruction

    NOP excut la place).

    btfss f,b : Teste le bit b de f. Si ce bit vaut 1 alors linstruction suivanteest ignore (instruction

    NOP excut la place).

    call k : Appel un sous-programme (PC mmoris dans la pile systme).

    clrf f : Met 0 dans f.

  • 7/26/2019 Programmation Du Pic 16F84

    5/10

    OUATTARA ALI Le pic16F84

    Page5/10

    clrw : Met 0 dans W.

    clrwdt : Fait un reset du chien de garde (registre WDT counter mis 0).

    comf f,d : Complment 1 de f. Rsultat dans f si d=1 ou dans W si d=0.

    decf f,d : Dcrmente de1 la variable f. Rsultat dans f si d=1 ou dans W si d=0.

    decfsz f,d : Dcrmente de1 la variable f. Rsultat dans f si d=1 ou dans W si d=0.

    Si le rsultat de lopration vaut 0, alors linstruction suivante est ignore (instruction

    NOP excut la place).

    goto k : Branchement inconditionnel ladresse k.

    incf f,d : Incrmente de +1 la variable f. Rsultat dans f si d=1 ou dans W si d=0.

    incfsz f,d : Incrmente de +1 la variable f. Rsultat dans f si d=1 ou dans W si d=0.

    Si le rsultat de lopration vaut 0, alors linstruction suivante est ignore (instruction

    NOP excut la place).

    iorlw k : OU logique entre une constante k et W. Rsultat dans W.

    iorwf f,d : OU logique entre une variable ladresse f et W. Rsultat dans f si d=1 ou dans W si

    d=0.

    movf f,d : Met la variable contenu ladresse f dans W si d=0 ou dans f si d=1.

    movlw k : Met la variable k dans W

    movwf f : Met la variable contenu dans W ladresse f.

    nop : Aucune opration effectu (1 cycle machine excut).

    retfie : Fin du programme interruption (dpile la pile systme).

    retlw k : Fin dun sous-programme (associe call). Met la variable k dans W.

    return : Fin dun sous-programme (associe call).

    rlf f,d : Rotation logique gauche de la variable stocke ladresse f. Rsultat dans f si d=1 ou

    dans W si d=0.

    rrf f,d : Rotation logique droite de la variable stocke ladresse f. Rsultat dans f si d=1 ou

    dans W si d=0.sleep : Met le microprocesseur en mode sommeil.

    sublw k : Soustraction : k-W, rsultat dans W.

    subwf f,d : Soustraction : une variable ladresse f-W, rsultat dans f si d=1 ou dans W si d=0.

    swapf f,d : Permute les deux quartets de f. Rsultat dans f si d=1 ou dans W si d=0.

    xorlw k : OU Exclusif entre une constante k et W. Rsultat dans W.

    xorwf f,d : OU Exclusif entre une variable ladresse f et W. Rsultat dans f si d=1 ou dans W si

    d=0.

  • 7/26/2019 Programmation Du Pic 16F84

    6/10

    OUATTARA ALI Le pic16F84

    Page6/10

    2.

    Rsum des mnmoniques par catgorie

    Lgende des oprandes

  • 7/26/2019 Programmation Du Pic 16F84

    7/10

    OUATTARA ALI Le pic16F84

    Page7/10

    Note :

    1. Quand la sortie est modifie par elle-mme, par exemple MOWF PORTB,1 la valeur utilise est ltat

    rel de laccs correspondant. Si par exemple ltat du latch associ est 1 mais que la broche soit force

    0 par un court-circuit extrieur la valeur affecte par linstruction est zro.

    2. Si linstruction est excute sur le compteur du TIMER (TMR0) le pr-diviseur est remis zro sil est

    utilis.

    3.

    Si un saut est effectu, cette instruction ncessite deux cycles machine, le second est excut comme unNOP.

    V. Structures algorithmiques fondamentales

    1. Dfinitions

    Organigramme(en anglais flowchart), se dit aussi ordinogramme : cest un schma synoptique qui analyse

    dans le dtail les diffrentes phases du problme traiter.

    Algorithgramme :Cest la transposition dun organigramme en tches simplifies.

    2. Structure linaire ou squentielle

    Exemple :P = U x I

  • 7/26/2019 Programmation Du Pic 16F84

    8/10

    OUATTARA ALI Le pic16F84

    Page8/10

    3.

    Structure itrative

    Structure itrative : boucle tant que

    Tant que < condition ralise >

    Faire quelque chose

    Rpter

    Remarque :Le travail peut ne jamais tre effectu

    Structure itrative : boucle jusqu :

    Faire quelque chose

    Jusqu ce que < condition ralise>

    Remarque :Le travail effectuer lest au moins une fois.

    4. Structure alternative

    Exemple : Un candidat est reu si M > 10

  • 7/26/2019 Programmation Du Pic 16F84

    9/10

    OUATTARA ALI Le pic16F84

    Page9/10

    5.

    Structures algorithmiques lmentaires pour pic

    TYPE DE STRUCTURE FORMAT POUR PIC Commentaires

    If N=5 Thenaction

    End If

    Dbut

    MOVF N,0SUBLW 5

    BTFSS STATUS,Z

    GOTO FinSiaction

    FinSi

    ..

    ; N dans W; 5 - W dans W

    ; Si le rsultat est nul, (c..d. bit Z du registre statut=1) il

    ; y a skip (On excute l'action)

    ; Si le rsultat est 0, (c..d. bit Z du registre statut=0),

    ; on saute au label FinSi (on sort de la structure)

    If N5 Thenaction

    End If

    Dbut

    MOVF N,0

    SUBLW 5

    BTFSC STATUS,Z

    GOTO FinSiaction

    FinSi

    ..

    ; N dans W

    ; 5 - W dans W

    ; Si le rsultat est 0, (c..d. bit Z du registre statut=0); il y a skip (on excute l'action)

    ; Si le rsultat est nul, (c..d. bit Z du registre statut=1),

    ; on saute au label FinSi (on sort de la structure)

    If N > 5 Thenaction

    End If

    Dbut

    MOVF N,0

    SUBLW 5

    BTFSC STATUS,C

    GOTO FinSiaction

    FinSi

    .

    ; N dans W

    ; 5 - W dans W

    ; Si le rsultat 5-W est ngatif (c..d. bit C du registre

    ; statut=1), il y a skip (on excute l'action); Si le rsultat 5-W est positif, on sort de la structure

    If N < 5 Thenaction

    End If

    DbutMOVF N,0

    SUBLW 5

    BTFSS STATUS,C

    GOTO FinSiaction

    FinSi

    .

    ; N dans W

    ; 5 - W dans W

    ; Si le rsultat 5-W est positif (c..d. bit C du registre

    ; statut=0) , il y a skip (on excute l'action)

    ; Si le rsultat 5-W est ngatif, on sort de la structure

  • 7/26/2019 Programmation Du Pic 16F84

    10/10

    OUATTARA ALI Le pic16F84

    Page10/10

    If N=5 Then

    action1

    Else

    action2

    End If

    Dbut

    MOVF N,0

    SUBLW 5

    BTFSS STATUS,ZGOTO Sinon

    action1

    GOTO FinSi

    Sinon

    action2FinSi

    ..

    ; N dans W

    ; 5 - W dans W

    ; Si le rsultat est nul, skip (on excute Action1) ensuite; on saute au label FinSi (on nexcute pas Action2)

    ; Si le rsultat est 0, on saute au label Sinon; (on excute Action2)

    If N=5 And M=3 Thenaction

    End If

    Dbut

    MOVF N,0

    SUBLW 5

    BTFSS STATUS,ZGOTO FinSi

    MOVF M,0

    SUBLW 3

    BTFSS STATUS,Z

    GOTO FinSiaction

    FinSi

    ..

    ; Si N5

    ; on sort de la structure

    ; Si M3

    ; on sort de la structure

    For A=1 To 5action

    Next A

    Dbut

    MOVLW 1

    MOVWF A

    Testaction

    MOVF A,0ADDLW 1

    MOVWF A

    SUBLW 5

    BTFSC STATUS,C

    GOTO TestFinFor

    ..

    ; 1 dans A

    ; puis W dans A (==> 1 dans A)

    ; excution de Action

    ; A dans W

    ; puis W+1 dans W

    ; W dans A (==> A+1 dans A)

    ; 5 - W dans W

    ; Si le rsultat est ngatif (5 passages), skip, on sort de lastructure

    ; Si le rsultat est positif on saute l'incrmentation

    ; de A (label Test)

    A=1

    Do

    A=A+1

    Loop While A