top of page

INTERRUPÇÕES EXTERNAS

Nas aulas anteriores estudamos as interrupções por timer que como o nome torna obvio é um tipo de interrupção que depende do tempo. Hoje vamos ver um tipo de interrupção com uma funcionalidade totalmente distinta das interrupções por timer. As interrupções externas, como o próprio nome sugere é um tipo de interrupção que é acionada após um evento externo, ou seja, essa interrupção mantém a leitura do estado lógico de uma determinada porta destinada a trabalhar com essa interrupção e a partir daquele estado lógico executar alguma ação conforme programado. Um exemplo interessante é fazer o PIC acionar determinada ação após cinco pressões consecutivas em um botão, ou até mesmo executar uma ação após 5 segundos de pressão constate neste botão. Além disso, esse é um tipo de interrupção bastante usada e simples de ser trabalhada e nós vamos ver isso na prática. Para tanto, vamos abrir o nosso compilador, e vamos fazer as configurações básicas para nosso PIC 18F2550 que abordamos várias vezes nas aulas sobre TIMER.
A parte desconhecida vem a seguir, vamos configurar para que nosso PIC trabalhe com interrupções externas.





































































1 – Acesse a opção Interrupts



2 – Habilite a opção External interrupt. Observe que esse microcontrolador pode trabalhar com mais duas interrupções externas.


3 – Acesse a aba Code para ver a função de interrupção que será gerada.


Bom, tudo pronto, agora é só clicar em OK e vermos nosso código inicial gerado. Vamos fazer diferente agora, vamos programar primeiro e depois vamos aos nossos circuitos no ISIS 7.


Vi um exemplo interessante na internet e que vai facilitar o entendimento de todos. Para isso, vamos iniciar com uma variável global qualquer, logo antes da função de interrupção.


Int x;


Já dentro da função de interrupção, vamos incrementar essa variável. Assim, toda vez que a interrupção externa for acionada a nossa variável x incrementará uma unidade.


#int_EXT
void  EXT_isr(void)
{
   x++;
}


Lá dentro do nosso While vamos digitar o seguinte:


While(TRUE)
{
   If(x==3) //Se a interrupção externa for acionada três vezes
   {
     x=0; //Reinicializa a variável.
     Output_toggle(PIN_A0); //Comando explicado abaixo.
   }
}


Como prometemos no inicio de nossas aulas, vamos explicar rapidamente sobre esse comando desconhecido, o Output_toggle(). Este é um comando que inverte o sinal lógico de uma porta digital. Se esta estiver em nível baixo, a função seta nível alto, se estiver em nível alto, seta para nível baixo. Dessa forma a lógica da nossa programação é a seguinte: se eu acionar um evento externo três vezes mando nível alto no pino A0 e só terei o nível baixo novamente após acionar o evento três vezes de novo.


Bom, agora que concluímos nossa programação, vamos as nossas ligações no PIC. No entanto sei que surgirá uma dúvida e é essa: Posso ligar meu evento externo (botão, por exemplo) em qualquer porta do PIC? A resposta é não! Para esclarecer esta dúvida vamos abrir o ISIS 7 e adicionar o PIC 18F2550 e observe a imagem:







































Veja a descrição dos pinos 21 a 23, perceba que está escrito INT0, INT1, INT2 respectivamente. Isto indica que esses pinos são usados para interrupção e são esses também os pinos usados para a interrupção externa. Portanto, devemos ligar nosso evento externo em um desses pinos, em nenhum outro mais.

Nosso circuito ficará assim:



















































Carregue o código compilado e dê play a sua simulação e você verá uma execução bastante interessante e útil para seus projetos utilizando a interrupção externa. É isto galera, bons estudos e excelentes trabalhos!





bottom of page