Nuevamente gracias por guiarme en este proceso de aprendizaje con ustedes. Especialmente al usuario KILLERJC
Este es el programa que tengo en el momento para tratar de almacenar en la memoria EEPROM el valor del contador, el cual va de 0 a 999.
Programa en MPLABX
// librerias
#include "mcc_generated_files/mcc.h"
#include <xc.h> //se incluye librerias xc8
#include <stdio.h>
#include <stdlib.h>
#include <htc.h>
# define LCD_RS RD6
# define LCD_EN RD7
#define LCD_DATA PORTB
#define Lib_Int_EEProm.c
char centenas, decenas, unidades; //defino variables char.solo van de 0 a 9
// declaracion de variables
union Data_EE MyVar; //main.c:15: error: (1442) type used in variable definition is incomplete
//main.c:15: warning: (374) missing basic type; int assumed
unsigned int valor16;
unsigned char valor8_1;
unsigned char valor8_2;
unsigned char centenas = 9;
unsigned char decenas = 9;
unsigned char unidades = 9;
uint16_t cont = 0;
// funciones
void lcd_init (void); //inicializacion del LCD
void set_lcd (void); //Configuracion del LCD
void lcd_puts(const char * s); //cadenas de caracteres al LCD
void lcd_putch(char c); //
void lcd_goto(unsigned char pos); // Direcciones en el LCD
void lcd_write(unsigned char c); //Escritura en el LCD
void binbcd ()
{
centenas=cont/100;
decenas=(cont%100)/10;
unidades=cont%10;
}
void main(void)
{
unidades = eeprom_read(0x00);
decenas = eeprom_read(0x01);
centenas = eeprom_read(0x02);
MyVar.valor8_1 = eeprom_read(0x00); //tengo duda si esta instruccion va aqui
MyVar.valor8_2 = eeprom_read(0x01); //tengo duda si esta instruccion va aqui
cont = read_16bits_eeprom(0x00);//Lee lo de la posicion 0x00 y 0x01, lo junta y lo pone en contador
// me sale el siguiente error
SYSTEM_Initialize(); //inicia el sistema
lcd_init(); //LLAMO FUNCION DE INICIALIZACION
while(1) //ciclo while para no hacer nada.ya mostro el mesaje
{
lcd_goto(0); // selecciono primera línea
lcd_puts("LA CARGA ES 1000 ");
lcd_goto(0x40); // Selecciono segunda línea
lcd_puts("CANTIDAD: "); //mensaje para la segunda linea
while(1)
{
while(cont<1000)
{
if(RD5==0) //Suciche para poner el contador a cero
{
__delay_ms(10);
cont=-1;
binbcd();
lcd_goto(0X4B); // Ubico centenas en poscion CB del LCD
lcd_putch(centenas+48); // sumo 48 para pasar a ASCLL
lcd_goto(0X4C); //Ubico decenas en posicion CC del LCD
lcd_putch(decenas+48); //sumo 48 para pasar a ASCLL
lcd_goto(0X4D); //Ubico unidades en posicion CE DEL LCD
lcd_putch(unidades+48); //Sumo 48 para pasar a Ascll
__delay_ms(10);
}
else
if(RD3==1) //S4 simula un sensor para activar el conteo
{ break;}
RA0=1;
__delay_ms(100);
RA0=0;
cont++;
// eeprom_write(0x09,cont);
if(unidades == 10)
{ decenas++; unidades = 0;}
else if(decenas == 10)
{ centenas++; decenas = 0;}
else if (centenas == 10)
{ centenas = 0; }
eeprom_write(0x00,unidades);
eeprom_write(0x01,decenas);
eeprom_write(0x02,centenas);
eeprom_write(0x00,MyVar.valor8_1);
eeprom_write(0x01,MyVar.valor8_2);
binbcd();
lcd_goto(0X4B); // Ubico centenas en poscion CB del LCD
lcd_putch(centenas+48); // sumo 48 para pasar a ASCLL
lcd_goto(0X4C); //Ubico decenas en posicion CC del LCD
lcd_putch(decenas+48); //sumo 48 para pasar a ASCLL
lcd_goto(0X4D); //Ubico unidades en posicion CE DEL LCD
lcd_putch(unidades+48); //Sumo 48 para pasar a Ascll
__delay_ms(100); //Incremento cuenta cada 500 ms
write_16bits_eeprom(cont,0x00); //Lee lo de la posicion 0x00 y 0x01, lo junta y lo pone en contador
}
}
}
}
void lcd_init(void) //funcion de inicializacion del LCD
{
LCD_DATA=2; // se manda el dato 2 al puerto para iniciar el LCD
set_lcd(); // se la funcion de configuracion
LCD_DATA=56; // mando el dato 56 al puerto para 8 bits,2 lineas y 5x7
set_lcd(); // llamo funcion de configuracion
LCD_DATA=12; // mando el dato 12 para prender el LCD con cursor
set_lcd();
LCD_DATA=6;
set_lcd();
LCD_DATA=1;
set_lcd();
}
void set_lcd (void) // funcion de configuracion
{
LCD_RS=0; //RS en cero para indicar al LCD que es configuracion
LCD_EN=1; // se habilita la operacion
__delay_ms(2); //retardo necesario para la operacion
LCD_EN=0; // termina la operacion
}
//Voy a una poscion especifica del LCD
void lcd_goto(unsigned char pos) // funcion de direcciones
{
LCD_RS = 0; //RS en cero para configuracion
lcd_write(0x80+pos); //sumo 80H a pos que viene con un dato
}
void lcd_write(unsigned char c) // funcion de escritura en el LCD
{
LCD_EN=1;//habilito la operacion
LCD_DATA = ( c );//mando al puerto el dato que hay en C.
__delay_ms(2); //retardo necesario para la operacion
LCD_EN=0;// termino la operacion
}
/* Escribo una cadena de caracteres en el LCD */
void lcd_puts(const char * s)
{
LCD_RS = 1; //habilito operacion
while(*s) //mientras haya caracteres en la cadena enviada
lcd_write(*s++); //pase al siguiente
}
/* Escribo un caracter en el LCD */
void lcd_putch(char c)
{
LCD_RS = 1; //habilito escritura en LCD
lcd_write( c );
}
Errores que salen después de compilar este programa.
CLEAN SUCCESSFUL (total time: 295ms)
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory `C:/Users/juan/MPLABXProjects/LCD.X'
make -f nbproject/Makefile-default.mk dist/default/production/LCD.X.production.hex
make[2]: Entering directory `C:/Users/juan/MPLABXProjects/LCD.X'
"C:\Program Files\Microchip\xc8\v1.38\bin\xc8.exe" --pass1 --chip=16F1937 -Q -G --double=24 --float=24 --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,+osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%%f:%%l: error: (%%n) %%s" "--warnformat=%%f:%%l: warning: (%%n) %%s" "--msgformat=%%f:%%l: advisory: (%%n) %%s" -obuild/default/production/mcc_generated_files/pin_manager.p1 mcc_generated_files/pin_manager.c
"C:\Program Files\Microchip\xc8\v1.38\bin\xc8.exe" --pass1 --chip=16F1937 -Q -G --double=24 --float=24 --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,+osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%%f:%%l: error: (%%n) %%s" "--warnformat=%%f:%%l: warning: (%%n) %%s" "--msgformat=%%f:%%l: advisory: (%%n) %%s" -obuild/default/production/mcc_generated_files/mcc.p1 mcc_generated_files/mcc.c
"C:\Program Files\Microchip\xc8\v1.38\bin\xc8.exe" --pass1 --chip=16F1937 -Q -G --double=24 --float=24 --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,+osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto "--errformat=%%f:%%l: error: (%%n) %%s" "--warnformat=%%f:%%l: warning: (%%n) %%s" "--msgformat=%%f:%%l: advisory: (%%n) %%s" -obuild/default/production/main.p1 main.c
main.c:15: error: (1442) type used in variable definition is incomplete
main.c:52: error: (198) undefined struct/union "Data_EE"
main.c:52: error: (182) illegal conversion between types
unsigned char -> union Data_EE
main.c:53: error: (198) undefined struct/union "Data_EE"
main.c:53: error: (182) illegal conversion between types
unsigned char -> union Data_EE
main.c:56: warning: (361) function declared implicit int
main.c:116: error: (198) undefined struct/union "Data_EE"
main.c:116: error: (182) illegal conversion between types
union Data_EE -> unsigned char
main.c:116: error: (181) non-scalar types can't be converted to other types
main.c:117: error: (198) undefined struct/union "Data_EE"
main.c:117: error: (182) illegal conversion between types
union Data_EE -> unsigned char
main.c:117: error: (181) non-scalar types can't be converted to other types
main.c:128: warning: (361) function declared implicit int
make[2]: *** [build/default/production/main.p1] Error 1
make[1]: *** [.build-conf] Error 2
(908) exit status = 1
make[2]: Leaving directory `C:/Users/juan/MPLABXProjects/LCD.X'
make[1]: Leaving directory `C:/Users/juan/MPLABXProjects/LCD.X'
make: *** [.build-impl] Error 2
BUILD FAILED (exit value 2, total time: 4s)