1. Déclarer des variables :

        CBLOCK 0x00C                     ; début de la zone variables

        mavariable : 1

         ENDC                    ; Fin



       2. Définir une constante :

        Mavariable EQU H'04'             H == héxadécimal

        MavariableEQU D'4'               D == décimal



       3. Définitions :

        #DEFINE LED1 PORTB,1                     ; LED de sortie 1

        #DEFINE LEDR PORTB,2                     ; LED de témoin de réception

        #DEFINE INPUT            PORTB,0                  ; entrée RS485



       4. Démarrage sur reset :

        org 0x000

        gotoinit



       5. La mémoire :

         La mémoire RAM
Cette mémoire est composée de 68 octets. Elle est organisée en 2 banques (bank 0 et bank 1).

Dans chacune de ses banques, on va retrouver des « cases mémoires spéciales », appelé

« registres spéciaux ». Il faut préciser que la banque 1 est « mapped in bank 0 », donc quand nous

voulons accéder aux 68 octets que ce soit de la banque 0 ou 1, on a accès à la même case

mémoire.

C’est la mémoire la plus utilisée. Cependant, toutes les données qui y sont stockées sont perdues

lors d’une coupure de courant.

La « bank 1 » permet de préparer le PIC à certaines tâches. La « bank 0 » correspond à

l’utilisation du PIC.
6. Registres de travail :

Ce sont des mémoires de 9 bits, possédant des fonctions générales ou spécialisées et étant

adressables en bloc ou bit à bit. Celui-ci va permettre de savoir s’il y a eu des modifications ou

non. Il sera donc affecté par le résultat.

        Le registre « w » :
Ce registre est utilisé par les PICs pour réaliser toutes sortes de calculs. C’est donc un registre

fondamental.

         Le registre « STATUS »
C’est un registre dont chaque bit à une signification particulière. Il est aussi très important.




Infos complètes sur le registre STATUS en annexe 1.



       7. Les drapeaux (flags)

Ce sont des indicateurs d’état, ils sont indispensables pour la programmation. Tous ces

indicateurs sont des bits du registre « status ».



         L’indicateur d’état « Z »
C’est l’indicateur d’état « Zéro ». Si le résultat d’une opération, pour lequel il est affecté, donne

le résultat « 0 », le flag « Z » passera à 1. Si le résultat est différente de « 0 », le flag « Z »

passera à « 0 ».



         L’indicateur d’état « C »
C’est l’indicateur pour « Carry » (= report). Si le résultat d’une opération entraîne un

débordement, le bit « C » sera ajouté.

Par exemple : 11111110 (254 sur 8 bits) + 00000011 (3 sur 8 bits) = 100000001 (257 sur 9 bits)

Nous avons donc 1 bit supplémentaire, notre Carry passe donc à 1.
8. L’horloge

Ici, on a une période d’horloge à 4 cycles. Donc après ces 4 cycles, notre instruction est décodée.

Il faut en moyenne 25 µsec par période.




Le cycle d’horloge interne est donné pour 1/4 de la fréquence nominale du quartz. Donc si l’on a

un quartz de 4 MHz (4 / 4 = 1 MHz), on a donc 1/1 MHz = 1 µS de temps de cycle.



       9. Les macros

Une macro sert à remplacer un morceau de code que nous utiliserons souvent.

La syntaxe consiste à mettre le nom qui sera appelé régulièrement, suivi par la directive

« macro ». A la ligne suivante, nous retrouvons la « portion de code » qui constitue la macro, et se

termine par « endm » (pour End of Macro).

Exemple :

LIREIN macro

        instructions…       ; C’est le code exécuté à l’appel de la macro « LIREIN ».

endm



       10. Codage – « Fonctions » particulières :

        Appels de procédures :
        Deux types :
               - Call : appel une procédure, et reviens au programme principal à la fin de la
                   procédure.
               - Goto : sortdu programme principal, et va à la procédure, sans revenir ensuite.
Initialisation standard :
init
          bsf STATUS,RP0        ;passe en bank 1
          clrf PORTB            ; mise du port B en sortie (0)
          clrf PORTA            ; mise du port A en sortie (0)
          bcf STATUS,RP0; repasser en bank0
gotostart

Boucle « de temps » :

     1 ms :

        tempolong
               movlw 0x04
               movwf compteur3
               boucle3
                       clrf compteur2
                       boucle2
                               clrf compteur
                               boucle1
                                       decfsz compteur1
                                       goto boucle1
                               decfsz compteur2
                               goto boucle2
                       decfsz compteur3
                       goto boucle3
        return


Syntaxe des fonctions :

Exemple : movwf

*type_d’action+ *symboles+
Dans ce cas-ci :
       *type_d’action+ == mov (déplacer)

        [symboles] == w & f




Parmi toutes les fonctions, on peut retrouver les symboles suivants :

       -    W:            registre de travail (zone « tampon » pour placer une valeur)
-     F:            signifie file. Représente une variable :
                   o    soit f (lui-même variable)
                   o    soit maVariable
       -     L:             signifie litteral. Représente un nombre (décimal, héxadécimal, …)

Dans le tableau des fonctions :




Fonction :         [add] [W] [F] = additionner W et F

Arguments :        -f      = variable additionnée à W

                   -d      = destination du résultat de W + F (peut être maVariable, ou F)

µP

  • 1.
    1. Déclarer desvariables : CBLOCK 0x00C ; début de la zone variables mavariable : 1 ENDC ; Fin 2. Définir une constante : Mavariable EQU H'04' H == héxadécimal MavariableEQU D'4' D == décimal 3. Définitions : #DEFINE LED1 PORTB,1 ; LED de sortie 1 #DEFINE LEDR PORTB,2 ; LED de témoin de réception #DEFINE INPUT PORTB,0 ; entrée RS485 4. Démarrage sur reset : org 0x000 gotoinit 5. La mémoire : La mémoire RAM Cette mémoire est composée de 68 octets. Elle est organisée en 2 banques (bank 0 et bank 1). Dans chacune de ses banques, on va retrouver des « cases mémoires spéciales », appelé « registres spéciaux ». Il faut préciser que la banque 1 est « mapped in bank 0 », donc quand nous voulons accéder aux 68 octets que ce soit de la banque 0 ou 1, on a accès à la même case mémoire. C’est la mémoire la plus utilisée. Cependant, toutes les données qui y sont stockées sont perdues lors d’une coupure de courant. La « bank 1 » permet de préparer le PIC à certaines tâches. La « bank 0 » correspond à l’utilisation du PIC.
  • 2.
    6. Registres detravail : Ce sont des mémoires de 9 bits, possédant des fonctions générales ou spécialisées et étant adressables en bloc ou bit à bit. Celui-ci va permettre de savoir s’il y a eu des modifications ou non. Il sera donc affecté par le résultat. Le registre « w » : Ce registre est utilisé par les PICs pour réaliser toutes sortes de calculs. C’est donc un registre fondamental. Le registre « STATUS » C’est un registre dont chaque bit à une signification particulière. Il est aussi très important. Infos complètes sur le registre STATUS en annexe 1. 7. Les drapeaux (flags) Ce sont des indicateurs d’état, ils sont indispensables pour la programmation. Tous ces indicateurs sont des bits du registre « status ». L’indicateur d’état « Z » C’est l’indicateur d’état « Zéro ». Si le résultat d’une opération, pour lequel il est affecté, donne le résultat « 0 », le flag « Z » passera à 1. Si le résultat est différente de « 0 », le flag « Z » passera à « 0 ». L’indicateur d’état « C » C’est l’indicateur pour « Carry » (= report). Si le résultat d’une opération entraîne un débordement, le bit « C » sera ajouté. Par exemple : 11111110 (254 sur 8 bits) + 00000011 (3 sur 8 bits) = 100000001 (257 sur 9 bits) Nous avons donc 1 bit supplémentaire, notre Carry passe donc à 1.
  • 3.
    8. L’horloge Ici, ona une période d’horloge à 4 cycles. Donc après ces 4 cycles, notre instruction est décodée. Il faut en moyenne 25 µsec par période. Le cycle d’horloge interne est donné pour 1/4 de la fréquence nominale du quartz. Donc si l’on a un quartz de 4 MHz (4 / 4 = 1 MHz), on a donc 1/1 MHz = 1 µS de temps de cycle. 9. Les macros Une macro sert à remplacer un morceau de code que nous utiliserons souvent. La syntaxe consiste à mettre le nom qui sera appelé régulièrement, suivi par la directive « macro ». A la ligne suivante, nous retrouvons la « portion de code » qui constitue la macro, et se termine par « endm » (pour End of Macro). Exemple : LIREIN macro instructions… ; C’est le code exécuté à l’appel de la macro « LIREIN ». endm 10. Codage – « Fonctions » particulières : Appels de procédures : Deux types : - Call : appel une procédure, et reviens au programme principal à la fin de la procédure. - Goto : sortdu programme principal, et va à la procédure, sans revenir ensuite.
  • 4.
    Initialisation standard : init bsf STATUS,RP0 ;passe en bank 1 clrf PORTB ; mise du port B en sortie (0) clrf PORTA ; mise du port A en sortie (0) bcf STATUS,RP0; repasser en bank0 gotostart Boucle « de temps » :  1 ms : tempolong movlw 0x04 movwf compteur3 boucle3 clrf compteur2 boucle2 clrf compteur boucle1 decfsz compteur1 goto boucle1 decfsz compteur2 goto boucle2 decfsz compteur3 goto boucle3 return Syntaxe des fonctions : Exemple : movwf *type_d’action+ *symboles+ Dans ce cas-ci : *type_d’action+ == mov (déplacer) [symboles] == w & f Parmi toutes les fonctions, on peut retrouver les symboles suivants : - W: registre de travail (zone « tampon » pour placer une valeur)
  • 5.
    - F: signifie file. Représente une variable : o soit f (lui-même variable) o soit maVariable - L: signifie litteral. Représente un nombre (décimal, héxadécimal, …) Dans le tableau des fonctions : Fonction : [add] [W] [F] = additionner W et F Arguments : -f = variable additionnée à W -d = destination du résultat de W + F (peut être maVariable, ou F)