Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Como Configurar e Utilizar Interrupções em Microcontroladores

Interrupções são mecanismos essenciais em sistemas embarcados, permitindo que um microcontrolador responda rapidamente a eventos externos ou internos sem a necessidade de um loop de consulta constante. Este artigo irá explorar a importância das interrupções no ambiente de microcontroladores, como configurá-las e utilizá-las de maneira eficaz.

Interrupções são especialmente importantes para aplicações que exigem resposta em tempo real, como sistemas de controle industrial, automação residencial, e dispositivos IoT. Elas permitem que o microcontrolador execute outras tarefas enquanto aguarda um evento específico, melhorando a eficiência e a performance do sistema.

Exemplos:

  1. Configuração de Interrupção Externa em um PIC Microcontrolador:

    Vamos configurar uma interrupção externa no pino RB0/INT do microcontrolador PIC16F877A. A interrupção será acionada por uma mudança de estado no pino (bordo de subida).

    #include <xc.h>
    
    // Configurações do microcontrolador
    #pragma config FOSC = XT        // Oscilador XT
    #pragma config WDTE = OFF       // Watchdog Timer desativado
    #pragma config PWRTE = OFF      // Power-up Timer desativado
    #pragma config BOREN = ON       // Brown-out Reset ativado
    #pragma config LVP = OFF        // Low Voltage Programming desativado
    #pragma config CPD = OFF        // Data EEPROM Memory Code Protection desativado
    #pragma config WRT = OFF        // Flash Program Memory Write Protection desativado
    #pragma config CP = OFF         // Flash Program Memory Code Protection desativado
    
    void __interrupt() ISR(void) {
       if (INTF) { // Verifica se a interrupção foi causada pelo pino RB0/INT
           // Código da rotina de interrupção
           PORTBbits.RB1 = ~PORTBbits.RB1; // Inverte o estado do pino RB1
           INTF = 0; // Limpa a flag de interrupção
       }
    }
    
    void main(void) {
       TRISBbits.TRISB0 = 1; // Configura o pino RB0 como entrada
       TRISBbits.TRISB1 = 0; // Configura o pino RB1 como saída
       PORTBbits.RB1 = 0;    // Inicializa o pino RB1 em 0
    
       INTEDG = 1; // Interrupção no bordo de subida
       INTE = 1;   // Habilita a interrupção externa
       GIE = 1;    // Habilita interrupções globais
    
       while (1) {
           // Loop principal
       }
    }
  2. Configuração de Interrupção de Timer em um Microcontrolador AVR:

    Vamos configurar uma interrupção de timer no microcontrolador ATmega328P, usado comumente no Arduino. A interrupção será acionada a cada segundo.

    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    ISR(TIMER1_COMPA_vect) {
       PORTB ^= (1 << PORTB5); // Inverte o estado do pino 13 (LED)
    }
    
    void setup() {
       DDRB |= (1 << DDB5); // Configura o pino 13 como saída
    
       // Configura o Timer1
       TCCR1B |= (1 << WGM12); // Modo CTC (Clear Timer on Compare Match)
       OCR1A = 15624; // Valor de comparação para 1 segundo (16MHz / 1024 / 1Hz - 1)
       TIMSK1 |= (1 << OCIE1A); // Habilita a interrupção de comparação
       TCCR1B |= (1 << CS12) | (1 << CS10); // Prescaler de 1024
    
       sei(); // Habilita interrupções globais
    }
    
    void loop() {
       // Loop principal
    }

To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.