Ir ao conteúdo

Problema com timer 1 pic 16f877 CCS


arh

Posts recomendados

Postado

Olá, amigo...

Cara eu não encontrei no datasheet do PIC16f877, informação sobre ele ter oscilador interno. Ao invés disso, eu encontrei todas as configurações com osciladores externos inclusive ele tem 2 pinos dedicados somente para isso (OSC1/CLKI#9 e OSC2/CLKO#10)...

De qualquer forma segue minha sugestão:

#int_TIMER0

void TIMER0_isr(void)

{

}

#int_TIMER1

void TIMER1_isr(void)

{

}

void main()

{

/*seu código*/

setup_timer_1(T1_INTERNAL|T1_DIV_BY_4); //262 ms overflow

enable_interrupts(INT_TIMER1);

enable_interrupts(INT_TIMER0); //faltou essa linha no seu código

enable_interrupts(GLOBAL);

}

Outra coisa que deve ser considerada é o valor do seus resistores que estão em série com o led, o ideal seria usar resistores de 470R / 560R ou no máximo 1K.

Eu não ví no seu código você habilitando a interrupção do timer0 (enable_interrupts(INT_TIMER0);)

Corrigindo uma coisa... Eu confundi a parte que você disse clock interno com oscilador interno... por favor, desconsidere...

Postado
obs. acabei de passar o cristal pros pinos OSC1 OSC2

e nada ainda.

Boa tarde !

O CCS não exige o circuito de oscilador para poder simular.. então tanto faz colocar...

porém se faz necessário configurar a velocidade do oscilado do pic (no CCS).

Então verifica se nas propriedades do componente (PIC) você configurou a velocidade de trabalho dele... claro que deve ser de acordo com a velocidade que utilizou no código...

Creio que possa ser esse o problema.

Postado

boa tarde ai, bom dei uma estudada hoje aqui, e formulei mal a pergunta, vamos la.

a ideia e piscar os leds, com o timer 0 e o timer 1, usando um clock de 4Mhz

o problema é que tem alguma coisa que nao ta dando certo.

olha aqui nesta foto, que o pino do cristal nem fica azul ou vermelho.

EqJAL8p.jpg

o codigo novo

#include <16f877A.h>

#use delay (clock = 4000000, restart_wdt)
#fuses xt, wdt, nolvp


#use fast_io(a)
#use fast_io(
#use fast_io(c)
#use fast_io(d)

#byte porta = 0x05
#byte portb = 0x06
#byte portc = 0x07

#bit led_a1 = porta.1
#bit led_b5 = portb.6
#bit botao_a0 = porta.0


#int_timer0
void trata_t0 ()
{
static long int tempo_a0 = 0;

tempo_a0 ++;
set_timer0(5);

if (tempo_a0 == 100)
{
tempo_a0 = 0;
led_a1 = !led_a1;
}


}

#int_timer1
void trata_t1 ()
{
static int tempo_t1 = 0;
tempo_t1 ++;
set_timer1 (15635);

if (tempo_t1 == 2)
{
tempo_t1 = 0;
led_b5 = !led_b5;
}
}


void main()
{
set_tris_a (0b11111101);
set_tris_b (0b11011111);
setup_timer_0 (rtcc_internal|rtcc_div_4);
setup_timer_1 (t1_internal|t1_div_by_4);
enable_interrupts (int_timer0);
enable_interrupts (int_timer1);
enable_interrupts (global);

porta = 0;
portb = 0;
set_timer0(5);
set_timer1(15635);

while (1)
{
restart_wdt();
}
}

bom a parte do codigo consegui resolver aqui, o problema tava na parte do #bit led_b5 = 0x06

e tinha que ta no 5.

mas o problema ai do cristal ainda continua, ou é assim mesmo?

se eu gravar o pic mesmo, os pinos 13 e 14 ai ficara configurado certinho ai pro cristal certo?

Postado
olha aqui nesta foto, que o pino do cristal nem fica azul ou vermelho.

Isso não é problema, porque trata-se de uma entrada. Igualmente com os outros pinos que estão configurados como entrada. Por isso que normalmente em uma entrada usa-se PULLUP ou PULLDOWN.

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...