Ir ao conteúdo
  • Cadastre-se

Como fazer configurar o TIMER1 do PIC16F688?


Posts recomendados

Boa Tarde, estou com o seguinte problema estou tentando fazer uma interrupção por timer1 que conta até 500 ms. O código não funciona, mas não consigo achar o erro. Segue ele:

 

void interrup()
{
    if(TMR1IF_bit)
    {
        TMR1IF_bit = 0x00;
        TMR1L = 0x0B;
        TMR1H = 0xDC;
        RC4_bit = ~RC4_bit;
    }
}

void main() 
{
    CMCON0 = 0x07;
    CMCON1 = 0x02;
    
    INTCON = 0xC0;
    TMR1IE_bit = 0x00;
    
    TMR1L = 0x0B;
    TMR1H = 0xDC;
    T1CON = 0b00110001;
    
    TRISC = 0x00;
    RC3_bit = 0x00;
    RC4_bit = 0x00;
    
    while(1)
    {
        RC3_bit = 0x01;
        delay_ms(1000);
        RC3_bit = 0x00;
        delay_ms(1000);
    }
}

 

Na simulação ele não inverte o estado do pino RC4.

 

 

Link para o comentário
Compartilhar em outros sites

Opa realmente estava invertido, porém ainda faltava configurar os registradores corretamente, segue o código:

 

void Interrupt()
{
    if (TMR1IF_bit)
    {
       TMR1IF_bit = 0x00;
       TMR1H = 0x0B;
       TMR1L = 0xDC;


       RC3_bit = ~RC3_bit;
    }
}

void main()
{
    CMCON0 = 0x07;
    T1CON = 0x31;
    INTCON = 0xC0;


    TMR1IF_bit = 0x00;
    TMR1H = 0x0B;
    TMR1L = 0xDC;
    TMR1IE_bit = 0x01;

 

    TRISC = 0x00;
    RC3_bit = 0x00;
    RC4_bit = 0x00;
  
    while(1)
    {
       RC4_bit = 0x01;
       delay_ms(1000);
       RC4_bit = 0x00;
       delay_ms(1000);
    }
}

 

Obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...