Página 1 de 1

Habilitar Timer por meio do registrador

MensagemEnviado: 24 Dez 2016 11:59
por wBB
Pessoal, estou usando o MPLab onde, para habilitar uma interrupção qualquer usa-se "enable_interrupts(INT_XXX)". Preciso habilitar o Timer1, então neste caso ficaria "enable_interrupts(INT_TIMER1)". Isso funciona perfeitamente. Porém, com objetivo de tornar o código compatível com outros compiladores, estou tentando usar sempre os registradores diretamente para habilitar/setar/desabilitar as coisas. Neste meu caso a habilitação do Timer1 seria por meio do registrador T1CON (ENDEREÇO 10h) conforme mostra a figura anexa. Meu código fica mais ou menos assim:

Alguém sabe o motivo disso não funcionar com o registrador diretamente?

Código: Selecionar todos
#include <16f73>
#include <...>...
#fuses HS, NOWDT
.
.
.
// Registrador em questão
#byte T1CON = 0x10
.
.
.
void main()
{
    // Setando o bit de T1CON que DEVERIA habilitar o Timer1, mas não habilita
    T1CON = 0x01;

    // Se colocar isso abaixo, aí sim habilita o Timer1. Mas "T1CON = 0x01;" também deveria habilitar...
    enable_interrupts(INT_TIMER1)

    while (true) {

    }
}

Re: Habilitar Timer por meio do registrador

MensagemEnviado: 25 Dez 2016 09:50
por tcpipchip
unsigned char *PT_buffer=&TXB0D0;

Re: Habilitar Timer por meio do registrador

MensagemEnviado: 26 Dez 2016 11:30
por wBB
TXB0D0????????

Já resolvi. Existem dois bits em dois registradores diferentes que devem ser setados para que o Timer 1 funcione tal como se estivesse executando a função "enable_interrupts(INT_TIMER1)". São eles:
Código: Selecionar todos
// HABILITAR TIMER1==========================================
T1CON = 0x31;   //0011 0001
                // Prescale nos bits 5-4, 1:8 neste caso
                // Habilitação do Timer1 bit0
                // ds:"Timer1 can be enabled/disabled by setting/clearing
                //     control bit TMR1ON (T1CON<0>)"

PIE1_TMR1IE = 1; // bit0 do registrador PIE1
                 // ds: "This interrupt can be enabled/disabled by
                 //      setting/clearing TMR1 interrupt enable bit
                 //      TMR1IE (PIE1<0>)"

PIR1_TMR1IF = 0; // Flag de indicação de estouro do Timer1. Registrador PIR1, bit0


Obrigado!