Este post mostra como implementar um simples pisca led utilizando o PIC18F4520 em linguagem C e utilizando a interrupção do timer 0. Ele servirá de base para outros projetos envolvendo temporização.
Utilizamos o MPLAB, compilador C18 e o Proteus VSM para a simulação.
A base de tempo do nosso projeto será de 1 segundo e vamos configurar o timer 0 para gerar uma interrupção por segundo.
Partindo de um clock de 4MHz e utilizando o timer 0 em modo de 16 bits, podemos calcular que será necessário configurar o prescaler para fazer a divisão por 32 do sinal de clock (Fosc/4 ou 1MHz), resultando em uma frequencia de entrada de 31250Hz. Se inicializarmos o timer 0 com o valor 34286 (65536-31250), após 31250 pulsos (ou 1 segundo) o timer 0 irá gerar uma interrupção.
Observe que dentro da ISR do timer 0 é necessário recarregar o contador do timer 0 (registradores TMR0L e TMR0H) com o valor 34286 (0x85EE em hexadecimal), para que cada período de interrupção tenha a duração de 1 segundo.
O programa acima pode ser baixado aqui e o esquemático do circuito pode ser visto na figura a seguir.