

O maior inimigo do conhecimento não é a ignorância, mas sim a ilusão de que conhecemos. (Stephen Hawking)

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!


