INTERRUPÇÕES

Eng David M Risnik

 

Um dos grandes atrativos de um microcontrolador é a possibilidade de se programar as interrupções ! O nome Interrupt pode não ser muito sugestivo , mas sua função é uma das mais importantes em programação , por isto vou falar um pouco dela .

 Certa ocasião encontrei um texto muito interessante que fornecia bem a idéia do que vem a ser o interrupt , descrito em linguagem fácil ser entendida: , e vou repassa-lo aqui.

Imagine que o primeiro sistema de telefone tenha sido instalado entre sua casa e a de um amigo.  Tudo novidade , e vc para saber se do outro lado da linha alguem quer falar com vc , de tempos em tempos , suspende seu trabalho normal e  vai ao aparelho ouvir se tem alguem na linha esperando por você !  Interessante sim , mas nada  prático . Talvez você passe o dia inteiro indo ao telefone , e ninguem esteja por lá ...tempo perdido ! Então alguem teve uma brilhante ideia: acrescentar ao sistema do telefone um sinal que vai "avisar" - tocando uma campainha  - quando alguem quiser conversar com vc , assim não será mais necessário suspender inutilmente seu trabalho de rotina a todo instante .  Magnífico !!! Pronto esta configurada a facilidade básica do INTERRUPT : um sinal que "avisa" (interrompe) o micro - sempre que alguém (algum dispositivo ou circuito externo ou interno) ter necessidade de "conversar" com ele. (Já ouviram falar em Interrupt Request - IRQ ?)

Um micro (controlador ou processador) tem uma "rotina" -escrita em Software- que o faz seguir passo a passo seu procedimento (trabalho de rotina) . Seria mais ou menos como você desempenhando suas tarefas , não tendo que ir atender ao telefone inutilmente pra ver se tem alguem por la. Quando algum periférico ou dispositivo interno ao microcontrolador (exemplo timer) requisitar sua atenção (chama-se atender ao serviço de uma interrumpt) ele gera um sinal de INTERRUPÇÃO , avisando ao micro que ele deve S-U-S-P-E-N-D-E-R temporariamente suas tarefas de rotina , e atender imediatamente ao chamado - igual ao que fez o toque do telefone . Assim o micro não vai mais perder seu precioso tempo (micro ou nano segundos) verificando de tempo em tempos se tem alguem requisitando sua atenção , porque ele ja sabe que quando isto for necessário , o sinal de interrupt o avisara !

Muito bem , mas como é este sinal de interrupção ? uma campainha ? uma luz ?  Nada disto , o micro não ouve nem enxerga ! O sinal de Interrupt é um nivel logico (normalmente zero) que é aplicado a um PINO especifico do CI . Assim , por exemplo , no 80C31 o pino 12 é reservado ao sinal de INT_0 . Esta é uma interrupção que pode ser acessada EXTERNAMENTE ao micro . Qualquer um pode ativá-la , bastando levar seu nivel a zero , ou seja aterrrar o pino .

Mas pra que serve exatamente isto ? Nada melhor do que um exemplo pratico para esclarecer . Imagine que desejamos CONTAR um determinado evento - sejam peças numa esteira de fabrica , ou carros passando na rua . Instalamos uma foto celula ou outro sensor e enviamos o sinal ao INTERRUPT do micro ! Um software simples irá acumular o numero de interrupções que ocorrem num determinado intervalo de tempo , e exibir no display este número . Ou então se quisermos "medir" a frequência de um sinal , podemos também aplica-lo ao interrupt (em niveis lógicos) e contar durante um segundo quantas interrupções ocorreram . Ou ... mil e uma funções diferentes poderemos controlar utilizando esta importante facilidade que o microcontrolador nos oferece .

Serviço de interrupção: no microcontrolador existe um ENDEREÇO especialmente designado ao atendimento de uma interrupção . Por exemplo o endereço 0003 é o serviço de interrupção da INT_0 - do pino 12 , lembram-se ? Isto quer dizer o seguinte: sempre que o pinto 12 receber um nivel logico zero , esteja onde estiver o software rodando , ele é suspenso (paralizado temporariamente) e a rotina de execução é DESVIADA para o endereço 0003 , onde o projetista já colocou uma rotina ESPECIFICA PARA O TRATAMENTO DESTA INTERRUPÇÃO . (por exemplo um contador de eventos). Ao termino deste tratamento (normalmente alguns micro segundos ou menos) , uma instrução - RETI -  restaura no micro exatamente as condições que ele estava executando ANTES de surgir a interrupt.  Isto a um observador externo (nós humanos) na maioria das vezes causa a nítida impressão de que o micro executa VARIAS funções simultaneamente , que na verdade são tarefas executadas SEQUENCIALMENTE uma após a outra .