Hola, el problema que poseo es el siguiente,
estoy buscando, ingresar unos valores tipo Long a la memoria interna del microcontrolador pic16f877a. Estos valores son una suma, que requiero guardar, por medio de unos pulsos, necesito guardar estos valores cada vez que vallan cambiando, dejando almacenada en la memoria el último valor obtenido siempre; es decir a medida que sume guarde el valor actual que está generando la suma del microcontrolador.
este valor guardado en la eeprom, lo necesito visulizar en un LCD 16X2, a traves de un pulso que le de a cualquiera de las entradas del microcontrolador
adjunto programa del contador, y una parte del programa de la grabacion del dato que aun no funciona
//#include <16f877A.h> //pic a utilizar
#use delay (clock=4000000) //Fosc=4Mhz
#byte puerto_A = 05
#byte puerto_B = 06
#byte puerto_C = 07
#byte puerto_D = 8
#define use_portb_lcd TRUE //definir portb lcd
#include<lcd.c> //libreria manejo lcd
#include<Lib_Int_EEProm.c>
//inicio del programa
void main(void)
{
long int cont=0;
long int cont2=0;
long int LAST_VOLUME=0,volume; //variables de direccion escritura eeprom y mensaje
set_tris_A (0b11111111);
set_tris_D (0b11111111);
puerto_D = 0;
puerto_A = 0;
lcd_init(); //inicializa lcd
WHILE (TRUE)
{
lcd_gotoxy(4,1);
printf(lcd_putc,"INGRESOS:");
lcd_gotoxy(4,2);
printf(lcd_putc,"NRO:%Lu",cont); //muestra por pantalla el mensaje
if(input(pin_D0))
{
cont=cont+1;
delay_ms(250);
}
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
}
////////////////////////////////////////////////////////////////////////////
//grabar el dato en la eeprom
if(cont=1)
{
void write_int16_eeprom(int8 LAST_VOLUME, int16 cont) {
int8 i;
for(i = 0; i < 2; ++i)
{
write_eeprom(address + i, *(&data + i));
}
}
//write_eeprom(LAST_VOLUME,cont); //escritura de los mensajes...
//LAST_VOLUME++;
for( ; ; )
{ //bucle...
for(LAST_VOLUME=0;LAST_VOLUME<32;LAST_VOLUME++) //bucle que recorre las posiciones de eeprom
{
volume = read_EEPROM (LAST_VOLUME); //almacena mensaje de la direccion eeprom
printf(lcd_putc,"%Lu",volume) ; //muestra mensaje por pantalla lcd
delay_ms(500);
lcd_putc("\f" ); //borra pantalla lcd
} //...infinito
}
}
//////////////////////////////////////////////////////////////////////////////////////
}