MPASM

Directives

 

 

Liste alphabétique des directives :

$

_ _BADRAM

BANKISEL

BANKSEL

CBLOCK

CODE

_ _CONFIG

CONSTANT

DA

DATA

DB

DE

#DEFINE

DT

DW

ELSE

END

ENDC

ENDIF

ENDM

ENDW

EQU

ERROR

ERRORLEVEL

EXITM

EXPAND

EXTERN

FILL

GLOBAL

IDATA

_ _IDLOCS

IF

IFDEF

IFNDEF

#INCLUDE

LIST

LOCAL

MACRO

_ _MAXRAM

MESSG

NOEXPAND

NOLIST

ORG

PAGE

PAGESEL

PROCESSOR

RADIX

RES

SET

SPACE

SUBTITLE

TITLE

UDATA

UDATA_ACS

UDATA_OVR

UDATA_SHR

#UNDEFINE

VARIABLE

WHILE

 

Généralités :

Une directive indique à l’assembleur la manière dont on veut qu’il 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 :

__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 d’utiliser __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 :

bankisel <label>

Utilisé dans la génération d’un fichier objet

Voir

MPASM Assembler Help

Rechercher

Relocatables Objects


banksel :

banksel <label>

 

Utilisé dans la génération d’un fichier objet

Voir

MPASM Assembler Help

Rechercher

Relocatables Objects


cblock :

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 s’il est précédé d’un 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 h’20’

endc

 

name1 vaudra 20

name2 vaudra 21

name3 vaudra 22

name4 vaudra 27

Cette directive équivaut à une série de equ


code :

[<label>] code [<ROM address>]

Utilisé dans la génération d’un fichier objet

Voir

MPASM Assembler Help

Rechercher

Relocatables Objects


__config :

__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 :

constant <label>=<expr> [...,<label>=<expr>]

 

Crée le symbole label à qui est associée l’adresse expr

L’adresse ne peut peut être modifiée par la suite par

Label=autre_expr

C’est 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=h’0c’

La valeur de Volts sera dans la case mémoire 0c


da :

[<label>] da <expr> [, <expr2>, ..., <exprn>]

 

Utilisé pour une écriture dans la mémoire programme

Voir

MPASM Assembler Help - Rechercher - da


data :

[<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


db :

[<label>] db <expr>[,<expr>,...,<expr>]

 

Utilisé pour une écriture dans la mémoire programme

Voir

MPASM Assembler Help - Rechercher - db


de :

[<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


dt:

[<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


dw :

[<label>] dw <expr>[,<expr>,...,<expr>]

Utilisé pour une écriture dans la mémoire programme

Voir

MPASM Assembler Help - Rechercher - dw


else :

voir if


end :

Cette directive doit être placé en fin de programme


endc :

Voir cblock


endif :

Voir if


endm :

voir macro


endw :

Voir while


equ :

<label> equ <expr>

 

Associe un nombre à une étiquette.

STATUS equ H'0003'

Dans le fichier source, il suffira d’écrire STATUS, l’assembleur comprendra qu’il s’agit du nombre H’0003’

Contrairement à set, equ ne peut pas modifier un label déjà affecté


error :

error "<text_string>"

 

Permet d’écrire son propre message d’erreur (max 80 caractères)

 

if arg1 >= 55

error "la valeur max a été dépassée"

endif


errorlevel :

errorlevel {0|1|2|+<msgnum>|-<msgnum>} [, ...]

 

Détermine les types de messages d’erreur qui apparaîtront dans les fichiers .lst et .err.

-<msgnum> interdit l’impression du message <msgnum>

+<msgnum> autorise l’impression 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 :

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 :

extern <label> [, <label>...]

Utilisé dans la génération d’un fichier objet

Voir MPASM Assembler Help - Rechercher - Relocatables Objects


fill :

[<label>] fill <expr>,<count>

 

Pour PIC18CXX :

Crée la répétition count fois de expr

 

fill h’1009’, 5 ; fill with a constant

 

Si expr est une instruction assembler, elle est mise entre parenthèses

 

fill (GOTO RESET_VECTOR), NEXT_BLOCK-$


global :

global <label> [, <label>...]

 

Utilisé dans la génération d’un fichier objet

Voir MPASM Assembler Help - Rechercher - Relocatables Objects


idata :

[<label>] idata [<RAM address>]

Utilisé dans la génération d’un fichier objet

Voir MPASM Assembler Help - Rechercher - Relocatables Objects


__idlocs :

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 l’ID à deux octets expr1 à la valeur hexa de expr2

 

Cette directive n’est pas utilisée avec les PIC17CXX


if :

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 :

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 :

ifndef <label>

 

Si le label label n’a 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 d’une multitude de lignes d’assignation 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 d’includes : 256


list :

list [<list_option>, ..., <list_option>]

Envoie une liste de directives à l’assembleur

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 d’erreur
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 :

local <label>[,<label>...]

 

label sera local à la macro considérée

Il peut y avoir un autre label de même nom à l’extérieur de la macro


macro :

<label> macro [<arg>, ..., <arg>]

 

Permet d’insérer une série d’instructions 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 :

__maxram <expr>

 

Indique la valeur maximale d’une 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 d’utiliser __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 :

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


org :

[<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 à l’allumage ou après un Reset

Et utiliser l’adresse 0004 et les suivantes pour lui dire où aller après une interruption

Org H’0000’

Goto Debut


page :

Insère un saut de page dans le fichier .lst.


pagesel :

pagesel <label>

Utilisé dans la génération d’un fichier objet

Voir MPASM Assembler Help - Rechercher - Relocatables Objects


processor :

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 :

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 n’est précisé dans Node Properties, HEX est pris par défaut

Ecriture des nombres :


res :

[<label>] res <mem_units>

Fait avancer le pointeur mémoire de mem_units

 

buffer res 64

réservera 64 addresses


set :

<label> set <expr>

Crée le symbole label et lui associe l’adresse expr

STATUS set h'03'

Dans le fichier source, il suffira d’écrire STATUS, l’assembleur comprendra qu’il s’agit du nombre h’03’

Contrairement à equ, set peut être utilisé plusieurs fois sur le même label pour modifier sa valeur


space :

space <expr>

 

Insère expr ligne vides dans le fichier .lst

 

space 3 ;Insère 3 ligne vides


subtitle :

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 "<title_text>"

 

title_text sera imprimé en haut des pages du fichier .lst (60 caractères maximum)

 

title "Mire à 16F84"


udata:

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 :

variable <label>=<expr> [...,<label>=<expr>]

 

Crée le symbole label et lui associe l’adresse expr

L’adresse peut être modifiée par la suite par

Label=autre_expr

C’est la dernière affectation qui compte

 

variable Ohms=h’0c’

la valeur de Ohms sera dans la case mémoire h’0c’

On peut ensuite assigner une valeur à cette variable dans le corps du programme par

 

movlw d'12'

movwf Ohms

 

Si on n’assigne pas une valeur, le contenu de la case mémoire est erratique jusqu’à la première assignation


while :

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