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