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 función 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 podía estar malo el LCD cargue un programa básico y para mi sorpresa el LCD lo proyecto sin ningún problema y e revisado la programación y no encuentro el error,o simule en proteus y corre sin ningún 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 código de este programa y seguir adquiriendo conocimientos.
De ante mano muchas gracias.
PD: estoy programando en C
Adjunto el programa y la conexión en proteus
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 podía estar malo el LCD cargue un programa básico y para mi sorpresa el LCD lo proyecto sin ningún problema y e revisado la programación y no encuentro el error,o simule en proteus y corre sin ningún 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 código de este programa y seguir adquiriendo conocimientos.
De ante mano muchas gracias.
PD: estoy programando en C
Adjunto el programa y la conexión en proteus
Código:
//Definición 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;
//Definición 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 )
{
//Declaración 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);
//Impresión 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);
//Impresión 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 número 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);
}
}
Adjuntos
Última edición por un moderador: