Você está na página 1de 26

Interrupções e timers

Guilherme Luiz Moritz1


1 DAELT - Universidade Tecnológica Federal do Paraná

4 de dezembro de 2013

Moritz, G.L. Interrupções e Timers


Objetivos

Compreender o funcionamento de um display de sete


segmentos

Compreender o sistema de interrupções do PIC

Compreender a arquitetura de Timers do PIC

Moritz, G.L. Interrupções e Timers


Display de Sete Segmentos

Figura : Display de 7 segmentos (cátodo comum)

Moritz, G.L. Interrupções e Timers


Multiplexação de displays de 7 segmentos

Moritz, G.L. Interrupções e Timers


74HC4511

Moritz, G.L. Interrupções e Timers


Introdução

Vivemos num mundo controlado pelo tempo

Muitas das ações que um microcontrolador toma devem


ser regradas pelo tempo

O sistema de timers e interrupções provê maneiras do


microcontrolador responder em tempo aos estímulos do
sistema

Moritz, G.L. Interrupções e Timers


Interrupções

Interrupções

Moritz, G.L. Interrupções e Timers


Conceito de interrupção

Uma interrupção de um processador funciona de maneira


análoga a uma interrupção do mundo real

Num processador, ela é atendida de maneira urgente.

É importante salvar o contexto antes de atender a


interrupção

Moritz, G.L. Interrupções e Timers


O que gera uma interrupção no PIC?

Escrita na EEPROM

Comparador

UART RX e TX

Timer 1 (Capture e Match e Overflow)

Timer 2 (Match)

Interrupções externas (GPIO)

Outros chips possuem outras fontes

Moritz, G.L. Interrupções e Timers


Como configurar uma interrupção no PIC
INTCON -> Liga ou desliga as diferentes interrupções
(mascara)
PIE1 -> Peripheral enable IRQs
Habilite a geração de interrupção do periférico!

Moritz, G.L. Interrupções e Timers


Como configurar uma interrupção no PIC

Figura : Sistemas de interrupção do PIC

Moritz, G.L. Interrupções e Timers


O que acontece quando o PIC detecta uma
interrupção?

Completa a instrução corrente

Salva o Program Counter

Limpa o GIE

Executa o código na posição correspondente a interrupção


(0x0004)

No fim o programa usa uma instrução especial que


restaura o Program counter, continuando daonde o
programa parou

Moritz, G.L. Interrupções e Timers


O que acontece quando o PIC detecta uma
interrupção?

Figura : Ilustração de interrupção do PIC

Moritz, G.L. Interrupções e Timers


Salvamento de contexto

O estado dos registradores do PIC devem ser salvos para


execução da interrupção

O MicroC faz este trabalho

Se for usar assembly, deve ser feito no código

Moritz, G.L. Interrupções e Timers


Regiões Críticas

Regiões onde o processador não pode parar para realizar


outra tarefa

Mascaramento de interrupções

Moritz, G.L. Interrupções e Timers


Como fazer no MicroC?

void interrupt() {
counter++;
TMR0 = 96;
INTCON = 0x20;
}

Moritz, G.L. Interrupções e Timers


Como fazer no MicroC?

void interrupt() {
if (INTCON.TMR0IF){
counter++;
TMR0 = 96;
INTCON.TMR0IF = 0;
}
else if (INTCON.RBIF){
counter++;
TMR0 = 96;
INTCON.RBIF = 0;
}
}

Moritz, G.L. Interrupções e Timers


Contadores

Contadores

Moritz, G.L. Interrupções e Timers


O que é um contador?

Figura : Contador digital

Moritz, G.L. Interrupções e Timers


Usos do contador

Contar tempo [com o auxílio do módulo de


capture/compare/pwm (será estudado na aula sobre
PWM)]

Contar eventos

Moritz, G.L. Interrupções e Timers


Timer1 do PIC

Figura : Timer 1 do PIC16f628A

Olhar datasheet!
Moritz, G.L. Interrupções e Timers
Timer 1 - Passo a passo

O Prescaler sempre está ativo: Deve se configurar sua


taxa (T1CKPS1 e T1CKPS0) no T1CON

Selecione o modo: TMR1CS (0: externo, 1: interno)

Ative T1OSCEN: O oscilador começa a contar e o valor de


TMR1H e TMR1L são incremendados a cada ciclo de
clock

Quando a contagem estoura, a flag TMR1IF é setada (e


gera uma interrupção caso a mesma esteja configurada)

Moritz, G.L. Interrupções e Timers


Outros Timers

Timer 0 - WatchDog timer

Timer 2 - Base de tempo para o PWM e o CCP

Moritz, G.L. Interrupções e Timers


Timer 0 do PIC

Figura : Timer 0 do PIC16f628A

Olhar datasheet!
Moritz, G.L. Interrupções e Timers
Contando tempo com o Timer 0

Tempo de estouro (8bits) = ciclo de máquina * prescaler *


(256 - TMR0)
1
Ciclo de máquina = Fosc/4
Prescaler: PS< 2 : 0 >
Valor de contagem é carregado em TMR0

Como fica para o estouro de 16 bits?

Moritz, G.L. Interrupções e Timers


Timer 0 - Passo a passo
Selecione o modo do timer no OPTIONREG (T0CS: 0 =
timer e 1 = counter)
Caso se desejar utilizar o prescaler, o mesmo deve ser
habilitado com o bit PSA do OPTIONREG. O valor do
prescaler é configurado em PS2-PS0
Se a interrupção for utilizada, GIE e T0IE devem ser
configurados no INTCON
Para contar tempo
Escreva o valor de TMR0 (condição inicial)
Lendo-se TMR0 tem se o número de ciclos passados (o
que pode ser convertido em tempo)
A flag de interrupção TMR0IF do INTCON é setada toda
vez que TMR0 estoura.
Para contar pulsos
A polaridade dos pulsos em RA4 deve ser selecionada pelo
TOSE do option reg
O número de pulsos é contado em TMR0, as interrupções
funcionam normalmente
Moritz, G.L. Interrupções e Timers

Você também pode gostar