COURS : STRUCTURE D`UN PROGRAMME EN ASSEMBLEUR

publicité
COURS : STRUCTURE D’UN PROGRAMME EN ASSEMBLEUR
STRUCTURE D’UN PROGRAMME ASSEMBLEUR
Un programme assembleur est organisé en plusieurs parties distinctes :
- Les définitions utiles à la génération du code assembleur par le logiciel (telles que
les références du PIC utilisé)
- La définition des MACRO s’il y en a ;
- La définition des constantes et des variables ;
- L’implémentation du vecteur RESET ;
- L’écriture des sous-routines ;
- L’écriture du programme principal.
; ---------------------------------------------; EXEMPLE DE PROGRAMME
;-----------------------------------------------
MACRO1
#DEFINE
VARIABLE1
SROUTINE1
PROGRAMME
LIST
#include
p=16C57C
<p16C5X.inc>
Définition du PIC
MACRO
BCF
BCF
ENDM
STATUS,RP0
STATUS,RP1
Définition de(s) MACRO(S)
CONSTANTE1 3
EQU
0x20
Définition de(s) VARIABLE(S)
et de(s) CONSTANTE(S)
ORG
GOTO
0x7FF
PROGRAMME
Implémentation du vecteur
RESET
ORG
MOVLW
TRIS
RETLW 0
0x000
0x0E
PORTA
Sous-routine(s)
ORG
CALL
GOTO
0x200
SROUTINE1
PROGRAMME
Programme principal
END
ETIQUETTES
FIN du fichier source
INSTRUCTIONS
Remarques importantes :
- La notation des nombres hexadécimaux et binaires peut varier d’un logiciel à
l’autre (exemple, 02h ou 0x02 pour l’hexadécimal ; B’000000001’ ou
000000001B pour le binaire)
- Les définitions relatives au PIC, ainsi que la déclaration des macros peuvent
également varier d’un logiciel à l’autre.
LYCEE LA FAYETTE
1
COURS : STRUCTURE D’UN PROGRAMME EN ASSEMBLEUR
I. DEFINITIONS RELATIVES AU PIC
Les deux premières lignes qui définissent le PIC à utiliser sont propres au logiciel MPLAB
utilisé. On indique qu’il faut créer le programme pour un PIC 16C57C de la famille 16C5X.
LIST
#include
p=16C57C
<p16C5X.inc>
II. DEFINITION DES MACROS
Une macro permet de rendre plus simple l’écriture d’un programme. En effet, le programme,
dès lors qu’il trouvera le nom d’une macro, la remplacera par la suite des instructions qu’elle
contient.
Le programmateur, s’il utilise souvent la même suite d’instructions, à intérêt à utiliser les
macros afin d’éviter de recopier plusieurs fois la même chose.
La définition d’une MACRO se fait :
- En donnant le nom de la MACRO ;
- En écrivant les instructions que doit exécuter la MACRO ;
- En indiquant au logiciel que la définition de la MACRO est terminée (ENDM)
MACRO1
MACRO
BCF
BCF
ENDM
STATUS,RP0
STATUS,RP1
; Macro portent le nom MACRO1
; Instructions de la macro
;…
; Fin de la macro
Les deux programmes suivants sont strictement identiques si MACRO1 a été définie comme
précédemment :
DEBUT
BCF
BCF
MOVLW
BCF
BCF
MOVLW
BCF
BCF
GOTO
END
LYCEE LA FAYETTE
STATUS,RP0
STATUS,RP1
0x03;
STATUS,RP0
STATUS,RP1
0x04;
STATUS,RP0
STATUS,RP1
DEBUT
DEBUT
MACRO1
MOVLW
MACRO1
MOVLW
MACRO1
GOTO
END
0x03;
0x04;
DEBUT
2
COURS : STRUCTURE D’UN PROGRAMME EN ASSEMBLEUR
III. DEFINITION DES VARIABLES ET DES CONSTANTES
Une variable est une donnée dont la valeur est enregistrée en mémoire RAM à une adresse
précise : l’exemple ci-dessous déclare une variable, nommée VARIABLE1, et dont l’adresse
en mémoire RAM est 0x20.
VARIABLE1
EQU
0x20
On peut donc écrire et lire une variable ; les données seront lues ou écrites en RAM.
Une constante est une valeur fixe, elle n’est pas enregistrée en mémoire RAM. Le logiciel
remplace juste le nom de la constante par sa valeur. Par exemple, la ligne ci-dessous déclare
une constante, nommée CONSTANTE1, dont la valeur est 3 :
#DEFINE
CONSTANTE1
3
Les deux programmes suivants sont strictement identiques si CONSTANTE1 a été définie
comme précédemment :
DEBUT
MOVLW
GOTO
END
3
DEBUT
DEBUT
MOVLW
GOTO
END
CONSTANTE1
DEBUT
IV. IMPLEMENTATION DU VECTEUR RESET
Lors d’un RESET, le PIC commence à exécuter le programme à une adresse particulière
nommée « vecteur RESET ».
Par exemple, suite à un reset, le PIC 16C57C commence l’exécution du programme à
l’adresse 0x7FF (cette adresse peut changer en fonction de la référence du PIC utilisé).
L’adresse EPROM (c'est-à-dire l’adresse de la mémoire de données) à laquelle se trouvent
les instructions est définie par la fonction : ORG (adresse)
Le programme suivant permet donc, lors d’un RESET, de demander au PIC d’aller lire les
instructions sur programme situées à partir de l’étiquette PROGRAMME via l’instruction
GOTO.
PROGRAMME
LYCEE LA FAYETTE
ORG
GOTO
0x7FF
PROGRAMME
…
…
…
ORG
GOTO
0x200
PROGRAMME
Le PIC exécute cette instruction
lors du RESET
Le début du programme se situe
en 0x200
3
COURS : STRUCTURE D’UN PROGRAMME EN ASSEMBLEUR
V. LES SOUS-ROUTINES
Une sous-routine est un morceau de programme que le PIC va exécuter pendant le
déroulement du programme principal. Lors de l’appel d’une sous-routine :
- Le PIC va où se trouve la sous-routine ; il laisse donc en suspend l’exécution du
programme principal pendant un temps ;
- Il exécute le programme contenu dans la sous-routine ;
- A la fin de la sous-routine, il retourne à l’endroit du programme principal, juste
après l’appel de la sous-routine.
Une sous-routine est toujours écrite avant le programme principal en mémoire EPROM. La
fin du programme d’une sous-routine se termine par RETLW 0.
Exemple : La sous-routine nommée SROUTINE1 se trouve à l’adresse 0x000 :
SROUTINE1
ORG
MOVLW
TRIS
RETLW 0
0x000
0x0E
PORTA
Exemple d’utilisation d’une sous-routine : Dans un programme principal, pour appeler une
sous-routine on utilise l’instruction :
CALL
NOM_DE_LA_SOUS_ROUTINE
SROUTINE1
 : Appel de
SROUTINE1
PROGRAMME
 : RESET
ORG
GOTO
0x7FF
PROGRAMME
ORG
MOVLW
TRIS
RETLW 0
0x000
0x0E
PORTA
 : Exécution de la sousroutine
ORG
MOLVW
TRIS
MOLW
TRIS
CALL
0x200
0x03
PORTB
0x04
PORTC
SROUTINE1
 : Exécution du
programme
….
….
….
….
 : SAUT vers
le programme
 : Retour vers
le programme
 : Exécution de la suite du
programme
END
LYCEE LA FAYETTE
4
Téléchargement