1
TP2 Initiation aux interruptions Objet : L'objet de ce TP est d'apprendre à programmer des interruptions, donc on va programmer notre PIC16F887 à faire une tache bien déterminé (dans notre cas le clignotement des 8 LEDs du PORTD, et comme source de déclenchement d'interruption nous allons utiliser le TIMER1. Les routines de l'interruption sont très simples, à chaque débordement du registre TMR1 (16bits), nous allons faire clignoter les 8 bits du PORTC : Fréquence = 8Mhz*1/4 *1/8 *1/(2^16) = 3,82Hz (Fréquence du clignotement du PORTC ) unsigned cnt,i; // Define variable cnt void interrupt() { // Les routines de l'interruption cnt++; // Incrémentation du cnt TRISC = 0x00; // PORTC programmé en sortie PORTC = 0xFF; // PORTB = 255 for (i=0;i<=1000;i++); // Temporisation PORTC = 0x00; // PORC = 0 PIR1.TMR1IF = 0; // Initialisation du flag du TMR1 } void main() { ANSEL = ANSELH = 0; // Tout les E/S sont en numerique PIR1.TMR1IF = 0; // Initialisation du flag du TMR1 TMR1H = 0x00; // TMR1 = 0 (16 bits) TMR1L = 0x00; T1CON.TMR1CS = 0; // On compte à partir de l'oscillateur interne T1CON.T1CKPS1 = T1CON.T1CKPS0 = 1; // Prediviseur = 1:8 PIE1.TMR1IE = 1; // Autoriser les interruption aux debordement du TMR1 INTCON = 0xC0; // Initialisation des bits GIE et PEIE T1CON.TMR1ON = 1; // Activation du TMR1 cnt=0; TRISD = 0x00; // PORTD en sortie. while (1) { PORTD = 0xFF; //Clignotement du PORTD Delay_ms(1000); PORTD = 0x00; Delay_ms(1000); } } Saisissez ce programme et compilez le. En principe, le PORTD doit clignoter (période 1s), et aussi tout les LEDs du PORTC doivent s'allumer brièvement à chaque débordement du registre TMR1.

TP2

Embed Size (px)

DESCRIPTION

???????????????

Citation preview

Page 1: TP2

TP2 Initiation aux interruptions

Objet : L'objet de ce TP est d'apprendre à programmer des interruptions, donc on va programmer notre PIC16F887 à faire une tache bien déterminé (dans notre cas le clignotement des 8 LEDs du PORTD, et comme source de déclenchement d'interruption nous allons utiliser le TIMER1. Les routines de l'interruption sont très simples, à chaque débordement du registreTMR1 (16bits), nous allons faire clignoter les 8 bits du PORTC :Fréquence = 8Mhz*1/4 *1/8 *1/(2^16) = 3,82Hz (Fréquence du clignotement du PORTC )

unsigned cnt,i; // Define variable cntvoid interrupt()

{ // Les routines de l'interruption cnt++; // Incrémentation du cnt

TRISC = 0x00; // PORTC programmé en sortie PORTC = 0xFF; // PORTB = 255 for (i=0;i<=1000;i++); // Temporisation PORTC = 0x00; // PORC = 0 PIR1.TMR1IF = 0; // Initialisation du flag du TMR1 }

void main() { ANSEL = ANSELH = 0; // Tout les E/S sont en numerique PIR1.TMR1IF = 0; // Initialisation du flag du TMR1 TMR1H = 0x00; // TMR1 = 0 (16 bits) TMR1L = 0x00; T1CON.TMR1CS = 0; // On compte à partir de l'oscillateur interne T1CON.T1CKPS1 = T1CON.T1CKPS0 = 1; // Prediviseur = 1:8 PIE1.TMR1IE = 1; // Autoriser les interruption aux debordement du TMR1 INTCON = 0xC0; // Initialisation des bits GIE et PEIE T1CON.TMR1ON = 1; // Activation du TMR1 cnt=0; TRISD = 0x00; // PORTD en sortie. while (1) { PORTD = 0xFF; //Clignotement du PORTD Delay_ms(1000); PORTD = 0x00; Delay_ms(1000); } }

Saisissez ce programme et compilez le. En principe, le PORTD doit clignoter (période 1s), et aussi tout les LEDs du PORTC doivent s'allumer brièvement à chaque débordement du registre TMR1.