Cursos / Eletrônica / Projeto de Sistemas Microcontrolados / Aula
As interrupções são utilizadas para executar um determinado trecho de código imediatamente após a ocorrência de um evento especificado. Por exemplo, se um botão for conectado ao pino RB0 e a interrupção externa INT0 estiver habilitada, um determinado trecho de código será executado sempre que o botão for pressionado, independente da sequência de instruções do código principal (main).
Para utilizar a interrupção externa INT0 é necessário configurar os bits de alguns registradores, como é indicado no datasheet do microcontrolador.
No caso do microcontrolador PIC18F45K20, os registradores INTCON, INTCON2 e RCON precisam ser configurados para utilizar a interrupção INT0. A seguir são descritos alguns bits desses registradores.
O quadro abaixo apresenta um código exemplo que pode ser utilizado como base para configurar o pino RB0 para detectar interrupção externa INT0.
Além disso, é necessário limpar o bit de configuração PBADEN (PBADEN == ‘0’). Se o bit PBADEN estiver alto (‘1’), todos os bits da porta RB são configurados para receber sinais análogicos.
Quando a interrupção externa é detectada o microcontrolador executa as instruções indicadas no vetor de tratamento de interrupções. Para tratar as interrupções, independente do tipo de interrupção, o compilador XC8 da Microchip utilizar a instrução “__interrupt()”.
O trecho de código abaixo apresenta a forma de definir a função que trata as interrupções utilizando o compilador XC8.
O desenvolvedor tem a permissão de escolher o nome da função (nomeFuncao). Dentro da função, é necessário verificar as flag de interrupção para identificar que tipo de interrupção foi acionada (interrupção externa, interrupção por temporizador, etc).
No código mostrado no quadro acima, sempre que houver uma interrupção externa INT0 a instrução “PORTA |= 0b00001000” será executada e o bit INT0IF será limpado (‘0’) para possibilitar a detecção de uma nova interrupção.
Configurar um temporizador é configurar uma interrupção. Os temporizadores são interrupções que são detectadas quando ocorre um estouro na contagem do tempo. Sempre que a contador alcançar o tempo predeterminado uma interrupção é gerada.
Para utilizar a interrupção o temporizador TIMER0 é necessário configurar os bits de alguns registradores, conforme indica o datasheet do microcontrolador.
No caso do microcontrolador PIC18F45K20, os registradores T0CON, INTCON, TMR0L e TMR0H são utilizados para configurar o temporizador TIMER0. A seguir são descritos alguns bits desses registradores.
O quadro abaixo apresenta um código exemplo que pode ser utilizado como base para configurar o TIMER0.
Acesse o datasheet do microcontrolador PIC18F45K20 para entender melhor cada bit de cada registrador utilizado.
A definição da função “__interrupt()” também pode ser utilizada para detectar o estouro do temporizador TIMER0. É necessário somente verificar o bit de detecção da interrupção TIMER0, bit TMR0IF do registrador INTCON.
Como saber o tempo de contagem do temporizador TIMER0? Veja o passo a passo a seguir!
Vamos utilizar o trecho de código apresentado anteriormente.
Assim, diante das configurações apresentadas anteriormente, o temporizador gera uma interrupção a cada 131,072 ms.
Supondo que foram realizadas as configurações do TIMER0 descritas anteriormente e que o programador precisa executar um trecho de código a cada 525ms, uma solução é executar o código após 4 estouros do TMR0.
(4 * 131,072 ms) é aproximadamente 525 ms.
Ou seja, após quatro detecções de interrupção, através do bit INTCONbits.TMR0IF, o trecho de código deve ser executado.
Versão 5.3 - Todos os Direitos reservados