TMR1 no funciona en CCS

Hola encontre este codigo en ccs y no se nada de ccs pero lo implemente en un 16f877 con 2 cristales y un display de 20x2 y no me funciona ! me gustaria si alguien puede darme una pista que tengo que agregar o sacar o cambiar asi voy estudiando el lenguaje y aprendiendo mas !

Código:
#include <16F877.H>

#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP

#use delay (clock=4000000)
#include "lcd.c" //libreria q maneja la lcd 2x16
#int_timer1


void timer1_isr(void)
{
 output_toggle(PIN_B0);
 
}

//==================================
void main()
{
output_high(PIN_B0);

setup_timer_1(T1_EXTERNAL | T1_DIV_BY_1 | T1_CLK_OUT);

enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);

//Lcd_putc ("uControl.com.ar\n   LCD en CCS"); 

while(1)
Lcd_putc ("uControl.com.ar\n   LCD en CCS");
Lcd_putc ("uControl.com.ar");
}

saludos!
 
2 cristales?
display de 2x20, no se si se puede manejar o no con esa libreria.
te dejo compilarlo con ese while(1)?
no abriste ni cerraste las llaves de ese bucle infinito, talvez prueba por ahi.
tambien creo que puede estar mal configurado el timer1, tendria que estar como internal?? o para eso usas el otro cristal?
 
si dos cristales la idea me la dieron acá en este hilo https://www.forosdeelectronica.com/showthread.php?p=786781#post786781
y para eso intento usar un cristal solo para la interrupción , voy a probar con las llaves no me dí cuenta de eso es que nunca use ccs, además compilo bien! si me dan una mano como vos voy a progresar seguro! gracias amigo y ya comento que paso!

Olvide decir que output_high(pin_b0); funciona bien!

saludos!



No me funciono amigo!

Amigo cambie el código por este que si funciona!

Código:
#include <16F887.h>
//Pic utilizado 
//Palabra de configuración de los fusibles. 
#FUSES NOWDT, XT, NOPUT, NOMCLR, NOPROTECT, NOCPD, NOBROWNOUT, NOIESO, NOFCMEN, NOLVP, NODEBUG, NOWRT, BORV40 
#use delay(clock=4000000)//Frecuencia del reloj principal 
#bit RB7=0x06.7 //Identificador para el bit RB7 
 
#int_TIMER1 
void  TIMER1_isr(void)//Función de interrupción por desbordamiento TMR1  
{ 
RB7=~RB7; //Togle RB7 
set_timer1(0x0BDC);//carga del TMR1 
} 
 
void main() 
{ 
set_tris_b(0b01111111); //configura RB7 como salida el resto como entrada 
RB7=0;//Inicializo RB7 
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);//Setup timer: Reloj interno, preescaler= 8 
enable_interrupts(INT_TIMER1);//Habilito interrupción particular del TIMER1 
enable_interrupts(GLOBAL);//Habilito interrupciones globales 
set_timer1(0x0BDC);//Carga del TMR1 
while(true);//Bucle infinito hasta interrupción 
 
}
este código me sirve para hacer un reloj que sea exacto?


Nota del Moderador:
Edita tus mensajes, no escribas nuevos.
 
Última edición por un moderador:
Perdón pensaba que esta mal si ago preguntas distintas en un mismo tema!



Perdón pensaba que esta mal si ago preguntas distintas en un mismo tema!
Estoy un poco confundido queria preguntar xq no se muestra correctamente este codigo

lcd_gotoxy(1,1);
printf(lcd_putc,"HORA");
lcd_gotoxy(1,2);
//Escribe en el LCD la hora, los minutos y segundos.
printf(lcd_putc,"%02u:%02u:%02u",g_lTime.tm_hour,g_lTime.tm_min,g_lTime.tm_sec);
lcd_gotoxy(3,4);
//Escribe en el LCD la fecha en formato corto.
printf(lcd_putc,"%02u-%02u-%02Lu",g_lTime.tm_mday+1,g_lTime.tm_mon+1,g_lTime.tm_year);

al compilar y ejecutar en l pic el lcd muestra lcd_gotoxy(1,2);
//Escribe en el LCD la hora, los minutos y segundos.
printf(lcd_putc,"%02u:%02u:%02u",g_lTime.tm_hour,g_lTime.tm_min,g_lTime.tm_sec);

y en el mismo renglon muestra
lcd_gotoxy(3,4);
//Escribe en el LCD la fecha en formato corto.
printf(lcd_putc,"%02u-%02u-%02Lu",g_lTime.tm_mday+1,g_lTime.tm_mon+1,g_lTime.tm_year);

y no encuentro mi error!
 
Última edición:
Pido disculpas por mi ignorancia pero leyendo me entere que la libreria
Código:
[COLOR=#339900]#include <lcd.c>[/COLOR]
es para lcd de 2x20 asi que la reemplace por
Código:
[COLOR=#339900]#include <lcd420.c>[/COLOR]
porque estoy usando un lcd de 4x20 y anda perfecto a simple vista! :oops:
 
Atrás
Arriba