//-----------------------------------------------------------------------------------// // Nom du projet : Cligno_led // Nom du fichier : main.c // Date de création : 06.11.2012 // Date de modification : xx.xx.xxxx // // Auteur : Philippe Bovey // // Description : Ce programme doit faire clignoter une led // // Remarques : // chemin pour trouver le headerfile // C:\Program Files\Microchip\MPLAB C30\support\dsPIC33F\h // // doc pour le DSP : // http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en546064 //----------------------------------------------------------------------------------// //--- librairie à inclure ---// #include #include //--- configuration des fusibles ---// _FOSCSEL(FNOSC_PRI); // utilisation du quartz de 8MHz externe _FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_XT); // pin OS2 garder pour l'horlohe // oscillateur XT _FWDT(FWDTEN_OFF); // ne pas activer le watchdog //--- prototype de fonction ---// void init_in_out(void); // configuration des entrées - sorties void init_timer1(void); // configuration du timer1; void leds_light(void); // permet d'allumer toutes les leds //--- programme principale ---// void main() { //--- initialisation entrées - sorties ---// init_in_out(); //--- initialisation timer1 ---// init_timer1(); //--- allumer toutes les leds ---// leds_light(); //while(1); } //--- déclaration de fonction ---// //----------------------------------------------------------------------------------// //--- nom : init_in_out //--- entrée - sortie : - / - //--- description : initilaiser les entrées et les sorties que l'on désire // : analogique ou numérique //----------------------------------------------------------------------------------// void init_in_out(void) { //--- configuration des sorties ---// TRISAbits.TRISA0 = 0; TRISAbits.TRISA1 = 0; TRISAbits.TRISA2 = 0; TRISAbits.TRISA3 = 0; TRISAbits.TRISA4 = 0; TRISAbits.TRISA5 = 0; TRISAbits.TRISA6 = 0; TRISAbits.TRISA7 = 0; } //----------------------------------------------------------------------------------// //--- nom : leds_light //--- entrée - sortie : - / - //--- description : allume toutes les leds //----------------------------------------------------------------------------------// void leds_light(void) { LATAbits.LATA0 = 1; LATAbits.LATA1 = 1; LATAbits.LATA2 = 1; LATAbits.LATA3 = 1; LATAbits.LATA4 = 1; LATAbits.LATA5 = 1; LATAbits.LATA6 = 1; LATAbits.LATA0 = 1; } //----------------------------------------------------------------------------------// //--- nom : init_timer1 //--- entrée - sortie : - / - //--- description : initilaiser le timer 1 pour avoir une horloge de 500ms //----------------------------------------------------------------------------------// void init_timer1(void) { //--- registre de configuration du Timer1 ---// T1CONbits.TON = 0; // désactiver le timer pour la configuration T1CONbits.TCS = 1; // clock externe T1CONbits.TSYNC = 1; // synchroniser la clock externe T1CONbits.TCKPS = 0b11; // prédivseur régler à 256 --> 8Mhz/256 = 31250Hz --> 32us TMR1 = 0; // mise à zéro du registre lié au timer PR1 = 15625; // période du timer --> 500ms/32us //--- registres des configurations des interruptions liées au Timer1 ---// IPC0bits.T1IP = 0b111; // choix de la priorité --> ici la plus élevée 7 = 111 IFS0bits.T1IF = 0; // remise à zéro de l'interruption IEC0bits.T1IE = 1; // activation de l'interruption lié au Timer1 T1CONbits.TON = 1; // activer le timer1 } //----------------------------------------------------------------------------------// //--- nom : _T1Interrupt //--- entrée - sortie : - / - //--- description : interruption lié au timer, doit faire clignoter une led // : chaque fois qu'on arrive dans cette boucle //----------------------------------------------------------------------------------// void __attribute__((__interrupt__)) _T1Interrupt( void ) { //--- test pour faire clignoter la led ---// if(LATAbits.LATA0 == 1) LATAbits.LATA0 = 0; else LATAbits.LATA0 = 1; IFS0bits.T1IF = 0; // remise à zéro de l'interruption }