Capıtulo 1
Interrupcao Externa
Secao 1.1
Nocoes basicas sobre interrupcoes em Microcontroladores PIC
Interrupcoes e obrigacao em uma programacao profissional.
Quando um evento ocorrer, uma bandeira de interrupcao sera definida forcando o programa a desviar
para o endereco de interrupcao. Isso libera a necessidade de um loop a espera do evento. As interrupcoes
podem ocorrer na mudanca de port, transbordo do temporizador, na comunicacao serial · · ·Interrupcoes recursos que permitem o tratamento imediato a eventos de maior prioridade interrompendo
a execucao normal do programa para executar tarefas de maior prioridade no momento.
Atende determinados eventos executando o codigo armazenado em uma posicao de memoria vinculada
a propria interrupcao e depois tem retorno imediato a execucao normal do programa. As interrupcoes sao
tratadas como sub-rotinas de hardware. Observe que a distancia entre o vetor de inicializacao (0000h) e o
vetor de reset (0004h) e de apenas 4 enderecos. Dessa forma quando as interrupcoes estao desabilitadas o
PC passa por 0004h normalmente durante a execucao de um programa. Quando se faz necessario o uso de
1
2 CAPITULO 1. INTERRUPCAO EXTERNA
interrupcoes, as rotinas de tratamento de interrupcao sao colocadas a partir do vetor de reset 0004h. No
intervalo entre o vetor de inicializacao e o vetor de reset e colocado um desvio para um endereco apos as
rotinas de interrupcao a partir do qual o programa realmente comeca.
Quando da interrupcao, o programa e desviado para um endereco pre-estabelecido, o vetor de reset
(0004h). O tratamento da interrupcao e feito a partir desse endereco executando rotinas associadas ao
evento da interrupcao.
O PIC 16F877A possui 15 fontes de interrupcoes:
1. Interrupcao do timer 0;
2. Interrupcao do timer 1;
3. Interrupcao do timer 2;
4. Interrupcao externa (RB0/INT);
5. Interrupcao por mudanca de estado (bits 4 a 7 do portal B);
6. Interrupcao de transmissao serial;
7. Interrupcao de recepcao serial;
8. Interrupcao do modulo comparador analogico;
9. Interrupcao do modulo CCP1;
10. Interrupcao do modulo CCP2;
1.1. NOCOES BASICAS SOBRE INTERRUPCOES EM MICROCONTROLADORES PIC 3
11. Interrupcao da memoria EEPROM;
12. Interrupcao do conversor analogico para digital;
13. Interrupcao da porta paralela escrava;
14. Interrupcao da comunicacao SPI;
15. Interrupcao por colisao no barramento I2C.
Na interrupcao estao associados quatro bits: o flag indicador de interrupcao, setado na interrupcao ou
pelo proprio programa, o bit de habilitacao de interrupcao ser alterado apenas pelo programa, PEIE inter-
rupcoes dos perifericos eGIE (bit de habilitacao global) interrupcao global quando em ‘0’ todas interrupcoes
estao desabilitadas em ‘1’ as interrupcoes habilitadas geram interrupcao na CPU.
Os flags das interrupcoes sao setados por um evento mesmo que essa interrupcao desabilitada. A inter-
rupccao INT atende diretamente os eventos externos ao microcontrolador e a interrupcao RB0 atende as
mudancas de estado do port B.
As demais interrupcoes sao internas e causadas pelos perifericos para indicar determinados eventos
(chegada de dado pelo portal serial, ”estouro”de timer, etc).
Qualquer interrupcao sempre chama o vetor de interrupcao no endereco (0004h). Obviamente e o
endereco para qualquer a rotina de tratamento de interrupcao
O teste dos bits de flags determinam interrupcao ocorrida entre todas as interrupcoes ativas. A prioridade
das interrupcoes fica determinada pela ordem dos bits do flag.
4 CAPITULO 1. INTERRUPCAO EXTERNA
Numa interrupcao nenhum registro e salvo automaticamente. Ha a necessidade de salvar os registros W,
STATUS e qualquer outro SFR antes do tratamento da interrupcao, o chamado salvamento de contexto.
Recomenda se que o registro STATUS seja zerado. Tudo isso enseja que a criacao de variaveis para
manter esses registros.
Tambem nao se deve usar durante o tratamento da interrupcao de registros em uso em outro segmento
do programa
Esses cuidados garantem o tratamento adequado das interrupcoes. pode ocorrer a qualquer momento.
Na execucao de um trecho qualquer do programa determinados enderecos de memoria (variaveis do
programa ou SFR) sao usadas, e seus valores devem ser reestabelecidos apos a interrupcao ser tratada.
Recomenda se um codigo curto para o tratamento das interrupcoes
Durante o tratamento de qualquer interrupcao chamada, todas as demais permanecem desabilitadas,
pois GIE e resetado ate a execucao da intrucao RETFIE que o seta novamente.
Os eventuais pedidos de interrupcao nesse intervalo nao sao descartados O tratamento da interrupcao e
realizado atraves do flag setado correspondente da interrupcao.
Assim e necessario resetar o flag associado a ela ao fim do tratamento . Ao contrario o programa trava
pela necessidade de responder novamente a tal interrupcao
A latencia natural e o atraso decorrente entre a chamada da interrupcao e seu tratamento, pois alem
do controle observar um processo interno de varredura de interrupcoes sera necessario um desvio para o
endereco 0004h alem das medidas preventivas ja ditas.
Valores usuais sao de 3 ciclos de maquina apos para uma interrupcao interna, e de 3 a 3,75 ciclos de
maquina para interrupcao externa. Em aplicacoes com precisao de tempo e importante considerar tais
1.2. REGISTRADORES RELACIONADOS AS INTERRUPCOES 5
atrasos.
A configuracao do periferico associado a interrupcao e o primeiro passo para o tratamento, normalmente
executada na inicializacao programa e eventualmente reconfigurado em outros trechos .
A habilitacao das interrupcoes depende da sua persistencia, em alguns casos se quer ela disponıvel todo o
tempo de execucao e assim sua habilitacao deve ser feita na inicializacao. Em outros casos o interesse pela
a interrupcao so existira a partir de um certo instante e sua habilitacao ocorre num instnate conveniente
O bit de habilitacao global (GIE) estiver habilitado para as interrupcoes geram as chamadas.
Finalmente as Rotinas de Tratamento de Interrupcao (RTI) serao chamadas para o tratamento das as
interrupcoes habilitadas.Secao 1.2
Registradores relacionados as Interrupcoes
Registradores de Controle da CPU OPTION REG
Configura:
1. PSA define TMR0 ou watchdog
2. PS2,PS1,PS0 valores do prescaler
3. TOSE Sentido da transicao da borda do sinal aplicado am TMR0
4. TOCS fonte de impulsos para TMR0: clock ou impulso externo
5. INDEDG define bordo para ativacao da interrupcao RB0/INTCON
6 CAPITULO 1. INTERRUPCAO EXTERNA
6. RBPU habilita resistor pull-up do port B
7. Na programacao usa-se option-reg , pois em PICs mais antigos existia uma instrucao option.
Figura 1.1: OPTION REG
Configura a Identificacao e configuracao de interrupcoes
1. /RBPU, Habilitacao de pull-up na porta B,
(a) 1 desabilita pull-up
(b) 0 habilita pull-up.
2. INTEDG, Selecao de borda de interrupcao,
1.2. REGISTRADORES RELACIONADOS AS INTERRUPCOES 7
(a) 1 interrupcao na borda de subida do pino RB0/INT
(b) 0 interrupcao na borda de descida do pino RB0/INT.
3. T0CS, Selecao da fonte de clock do TMR0,
(a) 1 clock na entrada do pino RA4/T0CKI
(b) 0 clock interno.
4. T0SE, Selecao da borda da fonte de clock do TMR0,
(a) 1 incrementa na borda descendente no pino RA4/T0CKI
(b) 0 incrementa na borda ascendente no pino RA4/T0CKI.
5. PSA, Sinalizacao do “prescaler”,
(a) 1 assinala o “prescaler” ao WDT
(b) 0 assinala o “prescaler” ao TMR0.
6. PS2, PS1 e PS0, Selecao da razao da escala do “prescaler”
8 CAPITULO 1. INTERRUPCAO EXTERNA
PS2 PS1 PS0 WDT TMR0
0 0 0 1 : 1 1 : 2
0 0 1 1 : 2 1 : 4
0 1 0 1 : 4 1 : 8
0 1 1 1 : 8 1 : 16
1 0 0 1 : 16 1 : 32
1 0 1 1 : 32 1 : 64
1 1 0 1 : 64 1 : 128
1 1 1 1 : 128 1 : 256
(1.1)
Registradores de Controle da CPU INTCON
Configura a Identificacao e configuracao de interrupcoes
1. GIE – Habilita tratamento Global de Interrupcoes
(a) 1 = Trata interrupcoes.
(b) 0 = Ignora interrupcoes.
2. PEIE Habilita interrupcoes dos perifericos
(a) 1 = habilitadas.
1.2. REGISTRADORES RELACIONADOS AS INTERRUPCOES 9
Figura 1.2: INTCON
(b) 0 = desabilitadas.
3. T0IE – Habilitacao da interrupcao de transbordo do Timer0
(a) 1 = habilitada.
(b) 0 = deshabilitada.
4. INTE – Habilitacao da interrupcao externa (RB0/INT)
(a) 1 = habilitada.
(b) 0 = desabilitada.
5. RBIE – Habilitacao de interrupcao por mudanca de estado na porta B (pinos RB4 a RB7)
10 CAPITULO 1. INTERRUPCAO EXTERNA
(a) 1 = habilitada.
(b) 0 = desabilitada.
6. T0IF – Flag sinalizador de estouro do timer 0
(a) 1 = houve transbordo do timer 0.
(b) 0 = nao houve transbordo.
7. INTF – Flag sinalizador de interrupcao externa (RB0/INT)
(a) 1 = ha pedido externo de interrupcao
(b) 0 = Nao ha pedido externo de interrupcao
8. RBIF – Flag sinalizador de alteracao nos pinos RB4 a RB7
(a) 1 = Houve alteracao.
(b) 0 = Nao houve alteracao.
Secao 1.3
Interrupcao em XC8
As principais caracterısticas da programacao estao mostradas na figura 1.3
Circuito com Interrupcao Externa
Objetivo: Verificar o tratamento de interrupcoes e a insercao de uma chave simples para alterar o
sequencia de comandos. Uso dos registradores OPTION REG e INTCON.
O codigo descreve a estrutura para tratamento de interrupcoes acendendo um led pendurado no PORTd,
desde que a interrupcao tenha sido estabelecida pela mudanca interrupcao externa no pino RB)/INT
1 p r o c e s s o r 16 f877a
2 #i n c l u d e p16f877a . inc
3
4 CONFIG FOSC XT & WDTE OFF & PWRTE OFF & BOREN OFF & LVP OFF & CPD OFF & WRT OFF & CP OFF
5
6 ; DEFINE O ENDEREO INICIAL E O VETOR DE INTERRUP O
7 ORG 0x00
8 goto c o n f i g u r a r
9 ORG 0x04
10 ; c a l l i n t e r rupcao
11
13
14 CAPITULO 1. INTERRUPCAO EXTERNA
12 CBLOCK 0x20
13 Loop1 , Loop2
14 ENDC
15
16 c o n f i g u r a r
17 BSF STATUS,RP0
18 CLRF TRISD
19 BSF STATUS,RP0
20 ; CONFIGURAR AS INTERRUP ES
21 ; REGISTRADOR OPTION REG
22 BCF OPTION REG, 7 ; RESISTORES PULLUP DESABILITADOS
23 BCF OPTION REG, 6 ; INTERRUPCAO EXTERNA NA BORDA DE DESCIDA
24 BCF OPTION REG, 5 ; CLOCK INTERNO PARA TIMER0
25 BCF OPTION REG, 4 ; INCREMENTA TIMER0 NA BORDA ASCENDENTE
26 BCF OPTION REG, PSA ; PREESCALER USADO PRO TIMER0
27 ; PRESCALER 1:256 NO TIMERO
28 BSF OPTION REG, 2
29 BSF OPTION REG, 1
30 BSF OPTION REG, 0
31 ; REGISTRADOR INTCON
1.3. INTERRUPCAO EM XC8 15
32 BSF INTCON, GIE ; HABILITA TRATAMENTO GLOBAL DE INTERRUPCOES
33 BCF INTCON, PEIE ; DESABILITA INTERRUPCOES DOS PERIFERICOS
34 BCF INTCON, T0IE ; DESABILITA INTERRUP O DO TIMERO
35 BSF INTCON, INTE ; HABILITA INTERRUP O EXTERNA
36 BCF INTCON, RBIE ; DESABILITA INTERRUP O DO PORTB
37 BCF INTCON, T0IF ; LIMPA O FLAG DO TIMER0
38 BCF INTCON, INTF ; LIMPA O FLAG DA INTERRUPCAO EXTERNA
39 BCF INTCON, RBIF ; LIMPA O FLAG DO PORTB
40
41 p r i n c i p a l
42 movlw 0x01
43 c a l l a c e n d e r l e d s
44 goto p r i n c i p a l
45
46 a c e n d e r l e d s
47 movwf PORTD
48 CALL at ra so
49 RRF PORTD
50 BTFSS PORTD, 7
51 GOTO a c e n d e r l e d s
16 CAPITULO 1. INTERRUPCAO EXTERNA
52 RETURN
53
54 a t ra so
55 MOVLW 0XFF
56 MOVWF Loop1
57 externo
58 MOVLW 0XFF
59 MOVWF Loop2
60 i n t e r n o
61 NOP
62 DECFSZ Loop2
63 GOTO i n t e r n o
64 DECFSZ Loop1
65 GOTO externo
66 re turn
67
68 in t e r rupcao
69 CLRF PORTD
70 CALL at ra so
71 BCF INTCON, INTF ; RESETA FLAG DA INTERRUPCAO EXTERNA
1.3. INTERRUPCAO EM XC8 17
72 RETFIE
73
74 end
O circuito, na figura 1.4 descreve a conexao de uma interrupcao externa no pic16f877:
Figura 1.4: Uso de interupcao externa Figura 1.5: Pinagem do pic16f877a
18 CAPITULO 1. INTERRUPCAO EXTERNA
*************************************** **********************************
1 p r o c e s s o r 16 f628a
2 #i n c l u d e p16f628a . inc
3
4 ORG 0x00
5 GOTO p r i n c i p a l
6 ORG 0x04
7 GOTO inte r rupcao
8
9 p r i n c i p a l
10 BSF STATUS,RP0 ;BANK1
11 MOVLW 0xFF
12 MOVWF TRISB ; portb entrada
13 CLRF TRISA ; porta sa ida
14
15 BCF STATUS,RP0 ; va i para banco 0
16 MOVLW 0x08
17 MOVWF INTCON ; Conf igura a i n t e r r u p o pe la mudan a de estado PORTB
18 BSF INTCON, GIE ; L i b e r a o g e r a l das i n t e r r u p e s S t a r t g e n e r a l i n t e r r u p t s
1.3. INTERRUPCAO EM XC8 19
19
20 LOOP ; Criado um loop cont inuo sem i n s t r u c o e s apenas esperando uma i n t e r r u p o
21 GOTO LOOP
22
23 in t e r rupcao
24 BTFSS INTCON, RBIF ; Testa se a i n t e r r u p o f o i causada pe la mudan a no PORTB
25 GOTO nao portb ; Se nao f o r o caso re to rna
26 MOVLW 0x01 ;
27 MOVWF PORTA ; Acende l ed para i n d i c a r in t e r rupcao pe lo PORTA
28 BCF INTCON, RBIF ; Limpa o f l a g de in t e r rupcao do PORTB
29
30 nao portb ; Retorno se in t e r rupcao nao f o i pe lo portb
31 RETFIE ; De qualquer forma re to rna da in t e r rupcao
32
33 end
Para o PIC16F628A visto na figura ?? :
1. Refaca o circuito e altere de forma adequada as ligacoes. Montando um conjunto entre 4 e 8 leds.
2. Escolhe convenientemente os ports para pendurar os leds
3. Insira a chave no pino de interrupcao RB0/INT e reescreva o codigo para tratar a interupcao.
20 CAPITULO 1. INTERRUPCAO EXTERNA
Secao 1.4
Uso da Interrupcao externa em assembler
1
2 LIST P=16F628 , R=DEC ; Declara o uso de ucont ro lador e s i s tema de n u m e r a o
3
4 #i n c l u d e p16f628 . inc ; I n c l u s o do arquivo de c a b e a l h o em assembler
5 ; D i r e t i v a s de c o m p i l a o
6 c o n f i g INTRC OSC NOCLKOUT & LVP OFF & WDT OFF & PWRTE ON & BODEN ON
7
8 CBLOCK 0x20 ; d e c l a r a v a r i v e i s e p o s i o na m e m r i a
9 COUNT ; contador , i n d i c a r quantos i n t e r r u p e s aconteceram
10 TEMP ; a u x i l i a r
11 Loop1 , Loop2
12 ENDC
13 ; −−−−−−−−−−−14 ; I n c i o
15 ; −−−−−−−−−−−16 org 0x00 ; I n c i o do programa em 0x00
17 GOTO CONFIG
18 ; −−−−−−−−−−−
1.4. USO DA INTERRUPCAO EXTERNA EM ASSEMBLER 21
19 ; Rotina Tratamento de I n t e r r u p o
20 ; −−−−−−−−−−−21 org 0x04 ; ve tor de i n t e r r u p o
22 movwf TEMP ; guarda v a l o r de w
23 i n c f COUNT, 1 ; incrementa COUNT com reto rno ne la mesmo
24 movlw 0x0A ; ca r r ega va l o r 10 em w
25 subwf COUNT, 0 ; subtrae w de count , e devo lve r e s u l t a d o em w.
26 b t f s s STATUS, 0 ; Testa se houve 10 i n t e r r u p e s
27 goto cont inua contador ; cont inua a cont inua contador se n o f o r 10
28 goto l impar contador ; l impa o contador
29
30
31
32 cont inua contador
33 bc f INTCON, 1 ; l impa f l a g da i n t e r r u p o para p e r m i t i r novas i n t e r r u p e s
34 movfw TEMP ; vo l t a v a l o r o r i g i n a l , antes da i n t e r r u p o , a W
35 r e t f i e ; Retornar da i n t e r r u p o
36 l impar contador
37 c l r f COUNT ; limpa contador
38 bc f INTCON, 1 ; l impa f l a g da i n t e r r u p o para p e r m i t i r novas i n t e r r u p e s
22 CAPITULO 1. INTERRUPCAO EXTERNA
39 r e t f i e ; Retornar da i n t e r r u p o
40
41 CONFIG
42 b s f STATUS, RP0 ; Trans f e r e para o banco de m e m r i a 1 , e s t o TRISx
43 c l r f TRISA ; Limpa TRISA, todos os p inos s e r o de s a d a
44 b s f TRISB , 0 ; Rb0 E S T COMO entrada
45 bc f STATUS, RP0 ; Retorna ao banco de m e m r i a 0 , e s t o PORTx
46
47
48
49 ; −−−−−−−−−−−−−−−−−−−−−−−−50 ; Def ine a f u n o dos p inos a t r a v s do r e g i s t r a d o r CMCON
51 ; −−−−−−−−−−−−−−−−−−−−−−−−52 MOVLW 0x07
53 MOVWF CMCON ; Todos os p inos s e r o d i g i t a i s , comparador e s t d e s l i g a d o
54 ; −−−−−−−−−−−−−−−−−−−−−−−−55 ; Def ine comportamento das i n t e r r u p e s
56 ; −−−−−−−−−−−−−−−−−−−−−−−−57 b s f INTCON, 7 ; GIE =1 , h a b i l i t a i n t e r r u p o g l o b a l
58 b s f INTCON, 4 ; INTE = 1 , h a b i l i t a i n t e r r u p o externa
1.4. USO DA INTERRUPCAO EXTERNA EM ASSEMBLER 23
59 bc f INTCON, 1 ; INTF = 0 , limpa f l a g de i n t e r r u p o g l o b a l
60 ; −−−−−−−−−−61 ; Loop P r i n c i p a l
62 ; −−−−−−−−−−63 p r i n c i p a l
64 movlw 0x04
65 movwf PORTA
66 CALL at ra so
67 movwf PORTA
68 CALL at ra so
69 GOTO p r i n c i p a l
70 ; e s c r e v e r r o t i n a para mostrar c a l o r de contador
71 ; −−−−−−−−−−−−−−−72 ; F u n o de a t ra so
73 ; −−−−−−−−−−−−−−−74 a t ra so movlw 0xFA
75 movwf Loop1
76 Externo movlw 0x80
77 movwf Loop2
78 Inte rno nop