MPASM
Directives
Liste alphabétique des directives :
$
Une directive indique à lassembleur la manière dont on veut quil travaille
A ne pas confondre avec les instructions du programme
Les directives ne sont pas sensibles à la casse des caractères
$:
Représente la valeur courante du compteur programme (8 bits faibles)
movlw $ met la valeur du compteur dans w
goto $+6 saute à la 6° case qui suit
__badram <expr>[-<expr>][, <expr>[-<expr>]]
Indique les adresses ou les plages d adresses RAM invalides
Expr doit être inférieur ou égal à la valeur donnée par __maxram
Il faur définir __maxram avant dutiliser __badram.
__maxram H'0BF'
__badram H'07'-H'09', H'0D'-H'1E'
__maxram et __badram sont définis dans le fichier P16F84.INC fourni avec MPLAB
bankisel <label>
Utilisé dans la génération dun fichier objet
Voir
MPASM Assembler Help
Rechercher
Relocatables Objects
banksel <label>
Utilisé dans la génération dun fichier objet
Voir
MPASM Assembler Help
Rechercher
Relocatables Objects
cblock [<expr>]
<label>[:<increment>][,<label>[:<increment>]]
endc
ou
cblock [<expr>]
<label>[:<increment>]
<label>[:<increment>]
endc
Crée une liste détiquettes
A la première est associée la valeur expr
Par défaut expr est à 0000 sauf sil est précédé dun autre cblock, et dans ce cas il prend la valeur du dernier élément +1
La valeur associée à chaque étiquette suivante est incrémentée de increment qui vaut 1 par défaut
cblock h20
endc
name1 vaudra 20
name2 vaudra 21
name3 vaudra 22
name4 vaudra 27
Cette directive équivaut à une série de equ
[<label>] code [<ROM address>]
Utilisé dans la génération dun fichier objet
Voir
MPASM Assembler Help
Rechercher
Relocatables Objects
__config <expr>
ou
__config <addr>, <expr> pour les 16cxx
Etablit les bits de configuration de la case mémoire 2007h à la valeur de expr
Le type de PIC doit avoir été déclaré avant cette directive (list, processor)
__config H'FFFF'
Les bits 1 et 0 déterminent le type d'oscillateur utilisé
Le bit 2 autorise ou non le fonctionnement du Watchdog Timer
Le bit 3 autorise ou non le fonctionnement du Power UP Timer (délai de 72 ms à l'allumage qui prolonge le Power On Reset)
Le bit 4 permet d'interdire la lecture de la mémoire programme
Code Protect | Power Up Timer | Watchdog | Oscillateur | |
bit 4 | bit 3 | bit 2 | bit 1, bit 0 | |
0->Oui | 0->Oui | 0->Non | 00->LP, 01->XT |
|
1->Non | 1->Non | 1->Oui | 10->HS, 11->RC |
Les 5 bits sont à 1 par défaut
soit: pas de Code Protect, pas de Power UP Timer, Watchdog actif, oscillateur RC
Avec un 17CXX le format de sortie hexa doit être INHX32 (list)
list p=17c42,f=INHX32
La configuration peut être faite automatiquement par le programmateur de PIC en cochant les case correspondantes
constant <label>=<expr> [...,<label>=<expr>]
Crée le symbole label à qui est associée ladresse expr
Ladresse ne peut peut être modifiée par la suite par
Label=autre_expr
Cest la seule différence avec variable et set ;
Attention, c'est cette association du nom à une adresse qui est constante, le contenu de la case mémoire peut varier; en fait il n'y a que des variables, et pas de constantes au sens habituel du terme.
constant Volts=h0c
La valeur de Volts sera dans la case mémoire 0c
[<label>] da <expr> [, <expr2>, ..., <exprn>]
Utilisé pour une écriture dans la mémoire programme
Voir
MPASM Assembler Help - Rechercher - da
[<label>] data <expr>,[,<expr>,...,<expr>]
[<label>] data "<text_string>"[,"<text_string>",...]
Utilisé pour une écriture dans la mémoire programme
Voir
MPASM Assembler Help - Rechercher - data
[<label>] db <expr>[,<expr>,...,<expr>]
Utilisé pour une écriture dans la mémoire programme
Voir
MPASM Assembler Help - Rechercher - db
[<label>] de <expr> [, <expr>, ..., <expr>]
Permet d'écrire dans la mémoire EEPROM lors de la gravure du circuit
Chaque expression est ramenée à un mot de 8 bits par des 0 à gauche
Si expr est une chaîne de
caractères, elle est décomposée en une suite de mots de 8 bits
Ne pas oublier de préciser l'origine mémoire (org h'2100' pour
initialiser l'EEPROM sur les 16F8X)
org h'2100'
ou
org h'2100'
#define :
#define <name> [<string>]
Permet de remplacer un texte difficile à mémoriser par quelque chose de plus simple :
#define LedRouge PORTA,1
Au lieu de taper PORTA,1 on pourra taper LedRouge
[<label>] dt <expr> [,
<expr>, ..., <expr>]
Génère une serie d'instructions RETLW suivies par expr
expr est sur 8 bits
dt "A Message", 0
dt FirstValue, SecondValue, EndOfValues
[<label>] dw <expr>[,<expr>,...,<expr>]
Utilisé pour une écriture dans la mémoire programme
Voir
MPASM Assembler Help - Rechercher - dw
else :
voir if
Cette directive doit être placé en fin de programme
endc :
Voir cblock
endif :
Voir if
endm :
voir macro
endw :
Voir while
<label> equ <expr>
Associe un nombre à une étiquette.
STATUS equ H'0003'
Dans le fichier source, il suffira décrire STATUS, lassembleur comprendra quil sagit du nombre H0003
Contrairement à set, equ ne peut pas modifier un label déjà affecté
error "<text_string>"
Permet décrire son propre message derreur (max 80 caractères)
if arg1 >= 55
error "la valeur max a été dépassée"
endif
errorlevel {0|1|2|+<msgnum>|-<msgnum>} [, ...]
Détermine les types de messages derreur qui apparaîtront dans les fichiers .lst et .err.
-<msgnum> interdit limpression du message <msgnum>
+<msgnum> autorise limpression du message <msgnum>
errorlevel 1, -202
Cette directive est incluse dans la directive list
Si cette directive est en désaccord avec Node Properties, elle prend le dessus, mais un warning le signale à la compilation
exitm :
voir macro
expand
Affiche les macros dans le fichier
Cette directive est incluse dans la directive list
Si cette directive est en désaccord avec Node Properties, elle prend le dessus, mais un warning le signale à la compilation
Est annulé par noexpand.
extern <label> [, <label>...]
Utilisé dans la génération dun fichier objet
Voir MPASM Assembler Help - Rechercher - Relocatables Objects
[<label>] fill <expr>,<count>
Pour PIC18CXX :
Crée la répétition count fois de expr
fill h1009, 5 ; fill with a constant
Si expr est une instruction assembler, elle est mise entre parenthèses
fill (GOTO RESET_VECTOR), NEXT_BLOCK-$
global <label> [, <label>...]
Utilisé dans la génération dun fichier objet
Voir MPASM Assembler Help - Rechercher - Relocatables Objects
[<label>] idata [<RAM address>]
Utilisé dans la génération dun fichier objet
Voir MPASM Assembler Help - Rechercher - Relocatables Objects
Avec les PIC12CXX, PIC14000, et PIC16CXX :
__idlocs <expr>
établit les 4 ID locations à la valeur hexa de expr
Avec les PIC18CXX :
or _ _idlocs <expr1>, <expr2>
établit lID à deux octets expr1 à la valeur hexa de expr2
Cette directive nest pas utilisée avec les PIC17CXX
if <expr>
Si la condition est vraie, les instructions placées entre if et endif sont assemblées
if version == 100
movlw 0x0a
movwf io_1
else
movlw 0x01a
movwf io_2
endif
ifdef <label>
Si le label label a déjà été défini (par un #define ou par MPASM) les lignes qui suivent seront assemblées
Voir aussi ifndef
ifndef <label>
Si le label label na pas encore été défini (par un #define ou par MPASM) les lignes qui suivent seront assemblées
Voir aussi ifdef
#include :
#include <<include_file>>
#include "<include_file>"
Afin déviter lécriture dune multitude de lignes dassignation au début de chaque programme, on peut les regrouper dans un tel fichier et les appeler par une seule commande :
#include "P16F84.INC"
ou
#include <P16F84.INC>
Il peut y avoir des includes dans des includes, jusquà 6 niveaux
Nombre max dincludes : 256
list [<list_option>, ..., <list_option>]
Envoie une liste de directives à lassembleur
Option | Par défaut | Description |
b=nnn | 8 | Espaces de tabulation |
c=nnn | 132 | Largeur des colonnes |
f=<format> | INHX8M | Format du fichier .hex de sortie : INHX32, INHX8M, ou INHX8S |
free | FIXED | Utilise free-format parser. |
fixed | FIXED | Utilise fixed-format parser |
mm={ON|OFF} | On | Sort la memory map dans le fichier .lst |
n=nnn | 60 (décimal) | Nombre de lignes par page |
p=<type> | None | Type de PIC |
r=<radix> | hex | Base de numération par défaut : hex, dec, oct |
st={ON|OFF} | On | Sort la table des symboles dans le fichier .lst |
t={ON|OFF} | Off | Coupe les lignes du listing |
w={0|1|2} | 0 | Détermine le type de message derreur |
x={ON|OFF} | On | macro expansion on ou off |
Les directives p (processeur) f (format hexadécimal) et r (radix) sont aussi gérées par MPLAB par Project - Project - Node Properties
p remplace la directive processor (Cette directive est sans effet si elle est en désaccord avec Project - Project - Node Properties)
r remplace la directive radix (Cette directive est sans effet si elle est en désaccord avec Project - Project - Node Properties)
w remplace la directive errorlevel (Cette directive est sans effet si elle est en désaccord avec Project - Project - Node Properties)
x remplace la directive expand/noexpand (Cette directive est sans effet si elle est en désaccord avec Project - Project - Node Properties)
List seul et nolist ouvrent et ferme la sortie du listing
list p=16F84, f=INHX32, r=dec
local <label>[,<label>...]
label sera local à la macro considérée
Il peut y avoir un autre label de même nom à lextérieur de la macro
<label> macro [<arg>, ..., <arg>]
Permet dinsérer une série dinstructions dans un code source
Une macro peut appeler une autre macro.
Une macro doit être terminée par endm
Page0 macro
endm
On peut sortir de la macro par exitm qui provoque une sortie immédiate comme endm
test macro filereg
if filereg == 1 ; check for valid file
exitm
else
error "bad file assignment"
endif
endm
__maxram <expr>
Indique la valeur maximale dune adresse RAM valide
Expr doit être supérieur ou égal à la plus grande valeur de la page 0
Il doit être inférieur à 1000H.
Il faur définir __maxram avant dutiliser __badram.
__maxram H'0BF'
__badram H'07'-H'09', H'0D'-H'1E'
__maxram et __badram sont définis dans le fichier P16F84.INC fourni avec MPLAB
messg "<message_text>"
Le message sera imprimé dans le fichier .lst (_à caractères maximum)
messg "ceci est un message"
noexpand :
voir expand
nolist :
voir list
[<label>] org <expr>
Cette directive indique au compilateur à quelle adresse doivent se trouver les instructions qui suivent
En fait le PIC démarre en 0000 après un Reset et en 0004 après une interruption, il faut donc utiliser les adresses 0000 0001 0002 et 0003 pour lui dire où aller à lallumage ou après un Reset
Et utiliser ladresse 0004 et les suivantes pour lui dire où aller après une interruption
Org H0000
Goto Debut
Insère un saut de page dans le fichier .lst.
pagesel <label>
Utilisé dans la génération dun fichier objet
Voir MPASM Assembler Help - Rechercher - Relocatables Objects
processor <processor_type>
détermine le type de PIC utilisé
processor 16F84
Cette directive est incluse dans la directive list
Si cette directive est en désaccord avec Node Properties, elle prend le dessus, mais un warning le signale à la compilation.
radix <default_radix>
Détermine la base de numération par défaut:
radix hex -> hexadecimal
radix dec -> decimal
radix oct ->octal
Cette directive est incluse dans la directive list
Cette directive est sans effet si elle est en désaccord avec Project - Project - Node Properties
Si rien nest précisé dans Node Properties, HEX est pris par défaut
Ecriture des nombres :
[<label>] res <mem_units>
Fait avancer le pointeur mémoire de mem_units
buffer res 64
réservera 64 addresses
<label> set <expr>
Crée le symbole label et lui associe ladresse expr
STATUS set h'03'
Dans le fichier source, il suffira décrire STATUS, lassembleur comprendra quil sagit du nombre h03
Contrairement à equ, set peut être utilisé plusieurs fois sur le même label pour modifier sa valeur
space <expr>
Insère expr ligne vides dans le fichier .lst
space 3 ;Insère 3 ligne vides
subtitle "<title_text>"
title_text sera imprimé en deuxième ligne en haut des pages du fichier .lst (60 caractères maximum)
Voir title
subtitle "Origine internet"
title "<title_text>"
title_text sera imprimé en haut des pages du fichier .lst (60 caractères maximum)
title "Mire à 16F84"
Utilisé pour générer un fichier objet
#undefine :
#undefine <label>
supprime le symbole créé par une précédente directive #define
#undefine Ledrouge
variable <label>=<expr> [...,<label>=<expr>]
Crée le symbole label et lui associe ladresse expr
Ladresse peut être modifiée par la suite par
Label=autre_expr
Cest la dernière affectation qui compte
variable Ohms=h0c
la valeur de Ohms sera dans la case mémoire h0c
On peut ensuite assigner une valeur à cette variable dans le corps du programme par
movlw d'12'
movwf Ohms
Si on nassigne pas une valeur, le contenu de la case mémoire est erratique jusquà la première assignation
while <expr>
:
endw
Les lignes entre while et endwhile seront assemblées tant que expr sera vrai (=1)
100 lignes max
La boucle peut tourner 256 fois au maximum
Retour au sommaire
© 1999-2009 A. Ducros F5AD