Ir ao conteúdo

Timer1 - Pic 16F627A


Dani piresk

Posts recomendados

Postado

Galera, to ficando maluco com o timer 1 desse pic.

Ele não está estourando a interrupção.

Já revisei umas 500x o código e não achei nada de anormal...

Alguma sugestão?

PS: Estou querendo estourar a interrupção a cada 0.5s +- e estou usando cristal interno do pic.


T1CON.T1CKPS1 = 1;
T1CON.T1CKPS0 = 1;
T1CON.T1OSCEN = 1;
T1CON.TMR1CS = 0;
T1CON.TMR1ON = 1;
TMR1H = 0x0B;
TMR1L = 0xDC;

PIE1.TMR1IE = 1;
INTCON.GIE = 1;

Postado

Se está incrementando o TMR1 com o ciclo de instrução, não precisa setar o bit T1OSCEN, mas, não sei se isto influencia.

Porque incluiu estas duas linhas:?

TMR1H = 0x0B;

TMR1L = 0xDC;

Tem que setar também o bit PEIE do registrador INTCON

Postado
Se está incrementando o TMR1 com o ciclo de instrução, não precisa setar o bit T1OSCEN, mas, não sei se isto influencia.

Testei aqui e realmente não influência. Na verdade isso seria para selecionar o oscilador interno do mcu, ou não? Quando eu li o datasheet eu estava meio que durmindo.. kkkkkk

Porque incluiu estas duas linhas:?

TMR1H = 0x0B;

TMR1L = 0xDC;

Ué para setar o valor inicial do timer. Está errado?

Tem que setar também o bit PEIE do registrador INTCON

Boa lembrança, mas setei aqui e não adiantou nada :(

Alguém aí, tem alguma luz para resolver meu problema?? To quebrando a cabeça aqui e nada até agora..

Postado
Desculpe, me enganei.

Está correto o valor da inicialização do TMR1.

Estranho. Deveria funcionar.

É muito estranho mesmo. :( Só comigo que acontece essas zicas!

Além do PEIE e do GIE não preciso configurar mais nada no INTCON né?

Postado

Dani,

Posta o código que trata as ints também prá gente ver melhor ok ?

Aliás, posta TODO o código né ?????? Inclusive as CONFIG WORDS ok ?

Paulo

Postado

Fuses:

3mfusespfuses.png

Código:


int ativo = 1;

void main()
{
//CMCON = 0x07;

CCP1CON = 0b00001011;
TRISB = 0;
TRISA = 0b00000111;

RA3_bit = 0;

T1CON.T1CKPS1 = 1;
T1CON.T1CKPS0 = 1;
T1CON.T1OSCEN = 1;
T1CON.TMR1CS = 0;
T1CON.TMR1ON = 1;
TMR1H = 0x0B;
TMR1L = 0xDC;

PIE1.TMR1IE = 1;
INTCON.GIE = 1;
INTCON.PEIE = 1;

while (1);
}

void interrupt()
{
if (ativo == 1)
{
ativo = 0;
RA3_bit = 1;
} else {
ativo = 1;
RA3_bit = 0;
}

TMR1H = 0x0B;
TMR1L = 0xDC;
PIR1.TMR1IF = 0;
}

Essa é a parte importante do código do timer.

Postado

Coloque a "interrupt" antes do main, não sei no MikroC mas já tive problemas com isso em outros compiladores...

Isso:

"TMR1H = 0x0B;

TMR1L = 0xDC;"

Vem logo no começo da função "interrupt"

Arquivado

Este tópico foi arquivado e está fechado para 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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!