T.P. Réseaux : Bus CAN TP n°2 : Utilisation du compilateur C18 Semestre 3 TP n°2 : Utilisation du compilateur C18 Ce deuxième TP doit vous permettre d'apprendre à travailler avec le compilateur C18. Ce compilateur gratuit de Microchip est un peu déroutant au début, mais les instructions sont plus proches du microcontrôleur que celles du compilateur CCS, un peu à l'image des instructions en assembleur. Premier programme : Del clignotante à 1Hz Pour ce premier programme, on choisit de faire clignoter la Del verte associée à la ligne 5 du port A. Le programme #include <p18f4580.h> // Déclaration du µC //#pragma config OSC=HS, PWRT=ON, WDT=OFF, LVP=OFF // Configuration des fusible du µC #include <delays.h> // Appel de la librairie des temporisations #define Del_Ve PORTAbits.RA5 // Associe le nom Del_Ve à la ligne RA5 void main (void) // Fonction main pour démarrer { TRISAbits.RA5 = 0; // Configuration de la ligne A5 du Port A en sortie while (1) // Boucle infinie { Del_Ve = 0; // La ligne RA5 est mise à 0 : La Del verte s'allume Delay10KTCYx (250); // Temporisation de 500ms Del_Ve = 1; // La ligne RA5 est mise à 1 : La Del verte s'éteint Delay10KTCYx (250); } } Explication et Comparaison avec CCS #include <p18f4580.h> // Déclaration du µC Pas de différence avec le compilateur CCS, il faut appeler le fichier associé au composant //#pragma config OSC=HS, PWRT=ON, WDT=OFF, LVP=OFF // Configuration des fusibles du µC Oscillateur > 4MHz; PWRT Reset à la mise sous tension; WatchDogTimer (Chien de garde) bloqué; LowVoltageProgrammation bloqué. Ligne placée en commentaire en présence d'un bootloader. #include <delays.h> // Appel de la librairie des temporisations Une première différence avec CCS, la librairie des fonctions de temporisations doit être spécifiée. #define Del_Ve PORTAbits.RA5 Autre différence, mais plus intéressante, on peut associer directement une ligne d'un port à un nom. Ce qui va simplifie la commande de la ligne (voir plus bas). Ce type de déclaration est aussi possible avec le compilateur CCS, même si elle n'est pas utilisée systématiquement. TRISAbits.RA5 = 0; // Associe Del_Ve à la ligne RA5 // Configuration de la ligne A5 du Port A en sortie Configuration d'une ligne d'un port en entrée ou en sortie Del_Ve = 0; I.U.T. de Nîmes // La ligne RA5 est mise à 0 : La Del verte s'allume Département : G.E.I.I. page 1 T.P. Réseaux : Bus CAN Semestre 3 Pour mettre à 1 ou à 0 la ligne, l'écriture est simplifiée et l'action est plus évidente. La Del est branchée à l'envers, donc il faut un niveau logique bas pour qu'elle s'allume. Delay10KTCYx (250); TP n°2 : Utilisation du compilateur C18 // Temporisation de 500ms avec un quartz de 20MHz Insère une temporisation de 250 x 10.000 cycles. Un cycle dure : → Donc la tempo durera : Deuxième programme : Chenillard sur les 3 Dels Pour ce deuxième programme, on réalise un chenillard sur les 3 Dels rouges, vertes et jaunes reliées au 18F4580. #include <p18f4580.h> // Déclaration du µC //#pragma config OSC=HS, PWRT=ON, WDT=OFF, LVP=OFF // Configurations des fusibles du µC #include <delays.h> // Appel de la librairie des temporisations #define Del_Ve PORTAbits.RA5 // Associe Del_Ve à la ligne A5 #define Del_Ro PORTBbits.RB1 // Associe Del_Ro à la ligne B1 #define Del_Ja PORTBbits.RB4 // Associe Del_Ja à la ligne B4 void main (void) { TRISAbits.RA5 = 0; TRISBbits.RB1 = 0; TRISBbits.RB4 = 0; while (1) { // Fonction main pour démarrer // Configuration de la ligne RA5 du Port A en sortie // Configuration de la ligne RB1 du Port B en sortie // Configuration de la ligne RB4 du Port B en sortie // Boucle infinie Del_Ro = 1; Del_Ve = 0; Delay10KTCYx (250); Del_Ve = 1; Del_Ja = 0; Delay10KTCYx (250); Del_Ja = 1; Del_Ro = 0; Delay10KTCYx (250); // La ligne RB1 est mise à 1 : La Del rouge s'éteint // La ligne RA5 est mise à 0 : La Del verte s'allume // Temporisation de 500ms // La ligne RA5 est mise à 1 : La Del verte s'éteint } } I.U.T. de Nîmes Département : G.E.I.I. page 2