Tmr0
• Contador: A cada transição do pino RA4 (TOCKI: pulso de clock externo).
• Timer: A cada ciclo de máquina. O TMR0 muda de estado, segundo o valor do Prescaler (PS). Prescaler é um registrador que permite um recurso de contagem além do limite do registrador do timer TMR0. Ex.: PS configurado como 1:4. São necessários 4 ciclos de máquinas ou 4 pulsos externos, para que o TMR seja incrementado de 1 unidade. O PS é de 8 bits, mas não é disponível para leitura nem escrita, sendo que toda vez que se escreve em TMR0, PS é zerado.
Configurar o TMR0 Configurar o TMR0 (8 bits) para que gere interrupções a cada 1 segundo, como um relógio normal. Consideraremos que o CLK da CPU seje 4 MHz.O clock interno será de 1 MHz. Logo, Tcpu = 1 us, ou seja, a cada 1us TMR0 avança uma unidade. Como queremos gerar interrupções a cada 1 segundo, a freqüência de geração dessas interrupções deverá ser de 1 Hz, entretanto o clock interno funciona em uma freqüência 1.000.000 maior que 1Hz. Usar o TMR0 sem o recurso do PRESCALER, necessitaria contar 1.000.000 / 256 = 3906,25 interrupções. Se o PRESCALER estiver programado em 1:64, a freqüência de entrada no TMR0 será de 1 MHz : 64 = 15625 Hz. setup_timer0 (RTCC_INTERNAL | RTCC_DIV_64); Se programarmos o TMR0 para dividir esse sinal 15625 por 125, teremos um sinal de saída de 125 Hz, para isso, basta carregá-lo a cada estouro de contagem com o valor:256 (28) – 125 = 131. set_timer0 (131);P: Para utilização do PS no TMR0 deve-se: • Configurar OPTION_REG:
PSA = 1: Prescale aplicado ao WDT (Watch Dog Timer).
PSA = 0; Prescale aplicado ao TMR0. • Configurar o valor do PS em OPTION_REG
|(PS2,PS0 ) Prescaler Rate Select bits