Está en la página 1de 3

Reloj digital Pic16F877a con lcd 2x16 y timer interno en C

Estimados disculpen las molestias, pero tengo una gran duda ya que no se como
configurar el timer interno del pic 16F877a, para que me cumpla la funcin de reloj en
tiempo real, es decir Horas/minutos/segundos.
Mi segundo problema concurre a que el programa que adjuntare mas adelante, lo
cargue a la PIC 16f877a y lo conecte al LCD 2x16 y no proyecta nada, pensando que
poda estar malo el LCD cargue un programa bsico y para mi sorpresa el LCD lo
proyecto sin ningn problema y e revisado la programacin y no encuentro el error,o
simule en proteus y corre sin ningn problema.
Lo estoy programando en mikroc y no ocupo macros, el cristal que tengo es de 4 mhz
y utilizo un LCD 2x16 conectado a 4 bit.
Espero puedan ayudarme con el cdigo de este programa y seguir adquiriendo
conocimientos.
De ante mano muchas gracias.

PD: estoy programando en C

Adjunto el programa y la conexin en proteus
Cdigo:
//Definicin de pines del LCD
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
//Definicin de los TRIS del LCD
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
void main( void )
{
//Declaracin de variables.
unsigned int PreI,Radc1,Radc2,Radc3,Radc4,Radc5,Radc6;
float Pre, Pre1;
char Text[16];
// Configuracion puerto D.
TRISD=0;
PORTD=0;
//Inicio del LCD.
Lcd_Init();
//Borrado del cursor.
Lcd_Cmd(_LCD_CURSOR_OFF);
//Impresin de texto de inicio.
Lcd_Out( 1, 4, "INTELLIGENT");
Lcd_Out( 2, 6, "CARPET");
delay_ms(3000);
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out( 1, 4, "CARGANDO");
Lcd_Out( 2, 6, "DATOS");
delay_ms(3000);
Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
//Impresin de texto de Variables.
Lcd_Out( 1, 1, "PESO :");
Lcd_Out( 2, 1, "HORA :");
while(1) //Bucle infinito.
{
//Lectura del canal 0 y Muestreo de datos para Promedio.
Radc1 = ADC_Read(0);
delay_ms(150);
Radc2 = ADC_Read(0);
delay_ms(150);
Radc3 = ADC_Read(0);
delay_ms(150);
Radc4 = ADC_Read(0);
delay_ms(150);
Radc5 = ADC_Read(0);
delay_ms(150);
Radc6 = ADC_Read(0);
delay_ms(150);
Pre = Radc1+Radc2+Radc3+Radc4+Radc5+Radc6/6;
Pre1 = 0.10861*Pre+10,5555;
//Se forza el resultado a la parte entera.
PreI = Pre1;
//Se convierte el nmero entero a una cadena de caracteres.
IntToStr( PreI, Text );
//Se imprime el resultado.
Lcd_Out( 1, 7, Text);
//Retardo de 100m segundos.
delay_ms(100);
//Sentencia if para SetPoint.
if (PreI=25)
PORTD.F0=1; //Prende el LED
else
PORTD.F0=0; //Apaga el Led
Lcd_Out( 2, 8, "XX:XX:XX");
delay_ms(100);
}
}


http://www.forosdeelectronica.com/f24/reloj-digital-pic16f877a-lcd-2x16-timer-interno-c-
98175/#post801673

También podría gustarte