Cursos / Eletrônica / Projeto de Sistemas RF / Aula
Ambas as formas de receber dados que vimos anteriormente apresentaram possíveis problemas. Uma forma de evitar tais problemas é utilizar as interrupções do PIC para receber os dados. Mas o que é uma interrupção? Como o próprio nome diz, é uma forma de "interromper" o processamento do PIC, e de fato é isso que acontece. Ao utilizar interrupções, o PIC não se preocupa em verificar a cada momento se chegaram novos dados. Quando os dados chegam, o sistema de interrupções avisa ao PIC e ele automaticamente desvia o processamento atual para o processamento da USART, que no caso da recepção é copiar o dado do RCREG para outra variável e, logo depois, ele volta para o que estava fazendo antes de ser interrompido. Ou seja, o dado vai ser processado sempre que chegar ao PIC, diminuindo assim a chance de um erro de overrun e, ao mesmo tempo, ele não vai parar as demais tarefas para ficar esperando um dado.
Mas, como você faz para utilizar as interrupções? Bem, primeiramente, você vai ter que configurar o PIC para tal. As interrupções da USART são controladas por 3 registradores: o INTCON, o PIE1 e o PIR1.
Como você pode ver, também é possível utilizar interrupções para a transmissão de dados, apesar de ser bem mais comum utilizá-las na recepção.
Em termos de código, como você vai implementar a interrupção depende da linguagem que está utilizando para programar seu PIC. Geralmente, existem códigos exemplos que você pode utilizar como base para seu código. Utilize-os para entender o que está sendo feito e, então, alterar para a sua aplicação. O que vale a pena citar é que existem dois níveis de interrupção: de alta prioridade e de baixa prioridade. A diferença entre essas interrupções é que as de baixa prioridade podem ser interrompidas pelas interrupções de alta prioridade, caso as últimas ocorram enquanto o PIC está processando o código da de baixa prioridade. Caso você esteja programando um dispositivo que utilize o mesmo nível de interrupção para várias interrupções diferentes (como, por exemplo, tratar um dado de um sensor de distância) você vai precisar verificar as várias "flags" de interrupção para saber qual delas foi a geradora da interrupção.
Versão 5.3 - Todos os Direitos reservados