Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TIMER 0
OPTION_REG
T0IF é o flag de sinalização que faz o timer retornar a zero. Para zerar o
timer, coloque nível lógico “0” no bit T0IF.
Vamos supor que queremos contar um tempo com o timer0, tempo será
de 100us e o prescaler (divisor de freqüência) será de 1:2.
Neste caso, só teremos a opção 1:2, no prescaler, quando
configurarmos zero no PS2, PS1 e PS0.
Quando fazemos o prescaler igual a 1:1, estamos fazendo com que o
TMR0 incremente seu valor em 1 a cada ciclo de máquina, ou seja, para um
cristal de 4MHz, o incremento se dará a cada 1us. Mas como neste PIC o valor
mínimo de prescaler é de 1:2, deve-se multiplicar este tempo por 2.
O estouro do timer0 ocorre quando o TMR0 chega a contagem 256,
portanto, no nosso caso, haverá um estouro a cada 256us, mas o que
queremos é 100us.
Basta, então inicializarmos o TMR0 com o valor de 255 – 100 = 155.
Exemplo
PROJETO 23 – Façamos um LED piscar a cada 1 segundo utilizando o
Timer 0.
int cont = 0; //criando uma variável de tipo inteira chamada cont de valor zero
void main ( )
{
OPTION_REG = 0x80; //Atribui prescaler de 1:2 ao TMR0, em bin 0b10000000
TMR0 = 155; //Valor inicial para o Timer0
INTCON = 0xA0; //Habilita a interrupção do TMR0, configura os registros GIE e T0IE
//0b10100000
TRISB = 0b0; //configura o pino B0 como saída
PORTB = 0b0; //desliga o pino D0, LED apagado
cont = 0;
while(1)
{
if(cont >= 5000) //se cont for maior ou igual a 5000
{
portb.f0 = ~ portb.f0; //inverte o estado do pino B0
cont = 0; //zera a variável
}
}
}
void interrupt ( )
{
cont++; //incrementa o valor de cont a cada interrupção
TMR0 = 99; //Valor inicial para o Timer0, conta de 156 a 255
INTCON = 0xA0; //Configura T0IE e limpa T0IF
}
void main ( )
{
OPTION_REG = 0x84; //Atribui prescaler de 1:32 ao TMR0
TMR0 = 99; //Valor inicial para o Timer0
INTCON = 0xA0; //Habilita a interrupção do TMR0, configura os registros GIE e T0IE
cont = 0;
while(1)
{
if(cont == 200)
{
portb.f0 = ~ portb.f0; //inverte o estado do pino B0
cont = 0;
}
}
}