Structure d’un programme en assembleur programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 1 Les fichiers d’en-tête ;************************************************************************* ; Ce programme génère une horloge en RB0 ; de fréquence 24 fois plus faible que celle du quartz. * ; il utilise la carte PicDem2Plus équipée d'un PIC16F877A * ;************************************************************************* LIST P=16F877A ; directive qui définit le processeur utilisé #include <P16F877A.INC> ; fichier de définition des constantes ;----- Register Files---------------------- ;----- STATUS Bits ---------------------- INDF TMR0 PCL STATUS FSR PORTA PORTB PORTC PORTD ……………… IRP RP1 RP0 NOT_TO NOT_PD Z DC C EQU H'0000' EQU H'0001' EQU H'0002' EQU H'0003' EQU H'0004' EQU H'0005' EQU H'0006' EQU H'0007' EQU H'0008' EQU EQU EQU H'0007' H'0006' H'0005' EQU H'0004' EQU H'0003' EQU H'0002' EQU H'0001' EQU H'0000' programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 2 Le registre de configuration ;************************************************************************ ; BITS DE CONFIGURATION ;************************************************************************* __CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF ; _XS_OSC l'oscillateur est configuré en oscillateur à quartz haute fréquence ; _WDT_OFF le watchdog est désactivé ; _CP_OFF le code de protection de la mémoire programme est désactivé ; _CPD_OFF le code de protection de la mémoire EEPROM est désactivé ; _LVP_OFF la programmation basse tension est désactivée ; ces opérations sont nécessaires pour fonctionner en mode "debug" programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 3 Les directives « org » et « end » org 0x00 goto debut org 0x10 debut … end ; adresse pointée après un reset ; ; l’instruction qui va suivre se trouvera à cette adresse ; saut à l’étiquette marquant le début du programme ; cette adresse doit être supérieure à 0x04 ; étiquette marquant le début du programme ; directive signalant la fin du programme programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 4 La déclaration des variables CBLOCK 0x20 Variable1 : 1 Variable2 : 1 tableau : 8 ENDC ; début de la zone variable ; Variable1 a une taille de 1 octet ; Variable2 a une taille de 1 octet ; tableau est une variable de 8 octets programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 5 L’écriture de variables 0x1A ou H’1A’ ou B’10101111’ D’12’ ou .12 A’C’ ou ‘C’ 1Ah : notation hexadécimale ; : notation binaire ; : notation décimale. : code ASCII programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 6 Les facilités d’écriture assignations MASQUE EQU 0X45 définitions #DEFINE SORTIE PORTB,0 bsf SORTIE macro instructions Macro1 macro Suite d’instructions….. edm ; fin de la macro programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 7 Programme complet ;************************************************************************* ; Ce programme génère une horloge en RB0 ; de fréquence 24 fois plus faible que celle du quartz. * ; il utilise la carte PicDem2Plus équipée d'un PIC16F877A * ;************************************************************************* LIST P=16F877A ; directive qui définit le processeur utilisé #include <P16F877A.INC> ; fichier de définition des constantes ;************************************************************************ ; BITS DE CONFIGURATION ;************************************************************************* __CONFIG _HS_OSC & _WDT_OFF & _CP_OFF & _CPD_OFF & _LVP_OFF ; _XS_OSC l'oscillateur est configuré en oscillateur à quartz haute fréquence ; _WDT_OFF le watchdog est désactivé ; _CP_OFF le code de protection de la mémoire programme est désactivé ; _CPD_OFF le code de protection de la mémoire EEPROM est désactivé ; _LVP_OFF la programmation basse tension est désactivée ; ces opérations sont nécessaires pour fonctionner en mode "debug" ;************************************************************************ ; DEMARRAGE SUR RESET * ;************************************************************************ org 0x0 ; Adresse de départ après reset goto debut org 0x10 ; adresse de début du programme debut programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 8 Programme complet ;**************************************************************** ; INITIALISATION * ;**************************************************************** ; initialisation du PORTB en sortie (voir datasheet) bcf STATUS, RP0 bcf STATUS, RP1 clrf PORTB bsf STATUS, RP0 movlw b'00000000' movwf TRISB bcf STATUS, RP0 ; passage en banque 0 ; RAZ des bascules D ; passage en banque 1 ; PORTB en sortie ; retour en banque 0 ;**************************************************************** ; PROGRAMME PRINCIPAL * ;**************************************************************** boucle bsf PORTB,0 ; mise à 1 de la sortie nop ; 2 temps morts pour compenser le saut nop bcf PORTB,0 ; mise à 0 de la sortie goto boucle ; rebouclage END ; directive signalant la fin du programme ;******************************************************************** programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 9 programmation des microcontrôleurs PIC ENSET d'Oran / IUFM Aix Marseille - mai 09 - 10