1. 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.
2. 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.
3. 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.
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)