Sie sind auf Seite 1von 35

h"p://www.box.

com/s/fea2e934fea1405cb647  

Prof. Pedro Pedrosa


h"p://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4227622E1    
pedrosarf@ifce.edu.br
Prof. Pedro Pedrosa
Tipos de interrupção
1.  Externa
2.  Estouro dos Timers
3.  Recepção serial completa
4.  Conversão AD completa
5.  Escrita EEPROM completa
6.  Falha no sistema oscilador
7.  Detecção de tensão baixa
Entre outras...
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Definição
Subrotinas assíncronas que são acionadas quando
eventos importantes acontecem.

Principais:
- Interrupção Externa
- Estouro dos Timers
- Recepção serial completa

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Definição
Interrupção gerada na mudança de pinos específicos do
microcontrolador.

Int. Externas disponíveis no PIC 18f2550

Identificadores  

•  Int. Externa 0 - int_ext

•  Int. Externa 1 - int_ext1

•  Int. Externa 2 – int_ext2

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Hardware das interrupções externas:

INTERRUPÇÕES  
EXTERNAS  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Hardware das interrupções externas:

INTERRUPÇÕES  
EXTERNA    0  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Hardware das interrupções externas:

INTERRUPÇÕES  
EXTERNA    1  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Hardware das interrupções externas:

INTERRUPÇÕES  
EXTERNA    2  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Habilitando interrupções
enable_interrupts(Identificador)
Habilita interrupção com o identificador indicado.
Sintaxe:

Enable_interrupts(identificador);
Exemplos:

enable_interrupts (global);

enable_interrupts (int_ext);

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Habilitação das Interrupções externas
Chamada que habilita o uso de interrupções
no seu programa. Deve-se chamar este
enable_interrupts(global); comando antes de habilitar qualquer
instrução específica.

Chamada que habilita o uso da interrupções


enable_interrupts(int_ext); externa 0 (Pino B0 – PIC18f2550)

Chamada que habilita o uso da interrupções


enable_interrupts(int_ext1); externa 1 (Pino B1 – PIC18f2550)

Chamada que habilita o uso da interrupções


enable_interrupts(int_ext2); externa 2 (Pino B2 – PIC18f2550)

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Exemplo de Habilitação
#include <18f2550.h>
#use delay(clock=20000000)
void main( )
{
enable_interrupts(global); //Habilita o uso de interrupções
enable_interrupts(int_ext); //Habilita o uso da interrupção externa 0 (Pino B0 – pic18f2550)
while(1)
{
//funções do programa do usuário
}
}

enable_interrupts(global);
-> Equivalente a -> enable_interrupts( global | int_ext);
enable_interrupts(int_ext);

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Funções de Interrupção
•  São as funções chamadas quando uma interrupção é acionada.
•  A função de uma interrupção fica logo abaixo do seu identificador.
Sintaxe:
#identificador
void nomeFuncao (void)
{
}

Exemplo com int. externa 0:


#int_ext
void trata_t0(void)
{
cont++;
}
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Funções de Interrupção
•  São as funções chamadas quando uma interrupção é acionada.
•  A função de uma interrupção fica logo abaixo do seu identificador.
Sintaxe:
#identificador IdenTficador  da  interrupção  antecedido  por  #  
void nomeFuncao (void)
{
}

Exemplo com int. externa 0:


#int_ext IdenTficador  da  interrupção  externa  0  
void trata_t0(void)
{
cont++;
}
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Ø  Funções de Interrupção
•  São as funções chamadas quando uma interrupção é acionada.
•  A função de uma interrupção fica logo abaixo do seu identificador.
Sintaxe:
#identificador Função  da  interrupção.  Pode  ter  qualquer  nome.  
void nomeFuncao (void) Deve  estar  logo  abaixo  do  idenTficador.  Usuário  
{ não  a  chama,  ela  é  executada  automaTcamente  
} quando  interrupção  é  acionada  

Exemplo com int. externa 0:


#int_ext
void trata_t0(void) Função  da  interrupção  externa  0.  
{ Incrementa  variável  cont  sempre  
cont++; que  o  botão  B0  receber  um  pulso.  
}
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Exemplo com int. externa 1:
#int_ext1
void interrupt1(void)
{
cont--;
}

Exemplo com int. externa 2:


#int_ext2
void processa_int2(void)
{
cont=0;
}

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Exemplo com int. externa 1:
#int_ext1 IdenTficador  da  interrupção  externa  1  
void interrupt1(void)
{
cont--;
}

Exemplo com int. externa 2:


#int_ext2 IdenTficador  da  interrupção  externa  2  
void processa_int2(void)
{
cont=0;
}

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Exemplo com int. externa 1:
#int_ext1
void interrupt1(void) Função  da  interrupção  externa  1.  
{ Decrementa  variável  cont  sempre  
cont--; que  o  botão  B1  receber  um  pulso.  
}

Exemplo com int. externa 2:


#int_ext2
void processa_int2(void) Função  da  interrupção  externa  2.  
{ Zera  variável  cont  sempre  que  o  
cont=0; botão  B2  receber  um  pulso.  
}

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Exemplo  1  -­‐  Hardware:  

Sempre que o bootão B1 for


pressionado e retornar à sua posição de
origem, a função de interrupção será
acionada.

Obs1: O uso de interrupções deve ser


habilitado.

Obs2: O uso da interrupção externa 0


deve ser habilitado.

Obs3: O identificador da interrupção


deve estar em algum ponto do código
com sua respectiva função logo abaixo.

Obs4: Dentro desta função da


interrupção, faça o que for conveniente
ao seu programa.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Exemplo  1  -­‐  So4ware:  

#include <18f2550.h>
#use delay(clock=20000000)
#int_ext  //idenTficador  da  interrupção  externa  0  
void  trata_int0(void)  //  Trata  interrupção  externa  0  
{  
output_high  (pin_b7);  //  Acende  LED  para  demonstrar  que  houve  interrupção    
delay_ms  (250);    
output_low  (pin_b7);  //  após  250  ms  apaga  LED  
}  
void  main()  
{  
enable_interrupts(GLOBAL|INT_EXT);  //  Habilita  interrupção  Global  e  Int_Ext  
while  (true);  //  Aguarda  por  uma  interrupção  
}
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Prof. Pedro Pedrosa
Ø  Configurando borda de habilitação da Interrupção
ext_int_edge(L_TO_H)
Habilita interrupção externa quando o pino
específico da interrupção sair de 0V para 5V.

ext_int_edge(H_TO_L)

Habilita interrupção externa quando o pino


específico da interrupção sair de 5V para 1V.

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configurando borda de habilitação da Interrupção
ext_int_edge(L_TO_H)
Habilita interrupção externa quando o pino
específico da interrupção sair de 0V para 5V.
5V  

0V  

Ao  apertar  o  botão,  o  pino  B0  sai  de  0V  para  5V,  


acionando  a  interrupção  quando  configurado  para  
acionamento  por  borda  de  subida.  

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Configurando borda de habilitação da Interrupção
ext_int_edge(H_TO_L)
Habilita interrupção externa quando o pino
específico da interrupção sair de 5V para 0V.
5V  

0V  

Ao  apertar  o  botão,  o  pino  B0  sai  de  0V  para  5V,  e  


ao  soltar  o  botão  sai  de  5V  para  0V,  acionando  a  
interrupção  quando  configurado  para  
acionamento  por  borda  de  descida.  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Prof. Pedro Pedrosa
Exemplo  2:  

#include <18f2550.h>
#use delay(clock=20000000)
#int_ext  //idenTficador  da  interrupção  externa  0  
void  trata_int0(void)  //  Trata  interrupção  externa  0  
{  
output_high  (pin_b7);  //  Acende  LED  para  demonstrar  que  houve  interrupção    
delay_ms  (250);    
output_low  (pin_b7);  //  após  250  ms  apaga  LED  
}  
void  main()  
{  
enable_interrupts(GLOBAL|INT_EXT);  //  Habilita  interrupção  Global  e  Int_Ext  
 ext_int_edge(L_TO_H);  //  Int_Ext  sensível  a  borda  de  subida  
//ext_int_edge(H_TO_L);  //  Int_Ext  sensível  a  borda  de  descida    
while  (true);  //  Aguarda  por  uma  interrupção  
}
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa
Prof. Pedro Pedrosa
Ø  Priorizando ordem de execução de interrupções
Define a ordem de execução de interrupções quando
as mesmas são acionadas ao mesmo tempo.
Sintaxe:

#priority identificador1, identificador2, identificador3

Exemplos:

#priority int_ext, int_ext2, int_ext1


Neste exemplo, int. externa 0 tem a maior prioridade e
int. externa 1 tem a menor prioridade

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Ø  Exemplo de Prioridade de interrupção
#include <18f2550.h>
#use delay(clock=20000000)
#priority int_ext, int_ext1 //Prioriza int_ext em relação a int_ext1
#int_ext
void interrupt0(void)
{
cont++;
}
#int_ext1
void interrupt0(void)
{
cont--;
}
void main( )
{
enable_interrupts(global); //Habilita o uso de interrupções
enable_interrupts(int_ext); //Habilita o uso da interrupção externa 0 (Pino B0 – pic18f2550)
enable_interrupts(int_ext1); //Habilita o uso da interrupção externa 0 (Pino B0 – pic18f2550)
while(1);
}

pedrosarf@ifce.edu.br Prof. Pedro Pedrosa


Prof. Pedro Pedrosa
Ø  Prática : Projete um contador que incremente sua contagem utilizando
um botão conectado na int. externa 0 e decremente sua contagem
utilizando um botão conectado na interrupção externa 1.
+5V  
B7  
A0   B6   Sa  
A1   B5  
A2   B4  
A3   B3   Sg  
A4   B2  
A5   B1  
B0  
+5V   Sd  

A6  
C0   C7  
C1   C6  
C2   C5  
C4  
pedrosarf@ifce.edu.br Prof. Pedro Pedrosa

Das könnte Ihnen auch gefallen