Autor Tema: errores de compilacion en MikroC  (Leído 5331 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado electrowolf

  • PIC12
  • **
  • Mensajes: 56
errores de compilacion en MikroC
« en: 20 de Noviembre de 2009, 04:22:15 »
Hola compañeos

Antes que nada un saludo a todos y miles de gracias por asu ayuda, mi problema es el siguiente, adquiri el programa MikroC para Pics, yo la vdd no se mucho de pics, de hecho ando en pañales en ese tema, pero me lo piden en la escuela y ni modo.

Resulta que pues me mate las neuronas armando mi programa, he aqui el susodicho

Código: [Seleccionar]
void main() {
// Declaramos una variable para ciclar la lectura de la direccion de memoria y
// una para almacenar el dato que leeremos de la eeprom
char dirmemo='0';
char dato;
unsigned char j;
// puerto A y B como salida
TRISB=0;
TRISA=0;
// Valores para representar las letras en la matriz de leds, leidos de arriba
// hacia abajo en formato hexagesimal.
//
// letra C
eeprom_write(0,0x7c);
eeprom_write(1,0x44);
eeprom_write(2,0x44);
eeprom_write(3,0x00);
// Letra I
eeprom_write(4,0x44);
eeprom_write(5,0x7c);
eeprom_write(6,0x44);
eeprom_write(7,0x00);
// Letra N
eeprom_write(8,0x7c);
eeprom_write(9,0x20);
eeprom_write(10,0x10);
eeprom_write(11,0x7c);
// letra V
eeprom_write(12,0x00);
eeprom_write(13,0x40);
eeprom_write(14,0x38);
eeprom_write(15,0x04);
eeprom_write(16,0x38);
eeprom_write(17,0x40);
eeprom_write(18,0x00);
// Letra E
eeprom_write(19,0x7c);
eeprom_write(20,0x54);
eeprom_write(21,0x54);
eeprom_write(22,0x44);
eeprom_write(23,0x00);
// Letra S
eeprom_write(24,0x00);
eeprom_write(25,0x74);
eeprom_write(26,0x54);
eeprom_write(27,0x54);
eeprom_write(28,0x5c);
eeprom_write(29,0x00);
// Letra T
eeprom_write(30,0x40);
eeprom_write(31,0x40);
eeprom_write(32,0x7c);
eeprom_write(33,0x40);
eeprom_write(34,0x40);
eeprom_write(35,0x00);
// letra A
eeprom_write(36,0x00);
eeprom_write(37,0x7c);
eeprom_write(38,0x50);
eeprom_write(39,0x50);
eeprom_write(40,0x7c);
eeprom_write(41,0x00);
// Letra V
eeprom_write(42,0x40);
eeprom_write(43,0x38);
eeprom_write(44,0x04);
eeprom_write(45,0x38);
eeprom_write(46,0x40);
eeprom_write(47,0x00);
// rutina de espera a que se escriban los valores en la eeprom
Delay_Ms (10000);
// Inicio de ciclo para mostrar los leds en la matriz
for(j=0; j<8; j++){
PORTA.RA1_bit=1;
PORTA.RA0_bit=1;
Delay_Us(1);
PORTA.RA0_bit=0;
Delay_Us(1);
}
for(;;){
        // mostramos las letras "CIN" en pantalla por 50 segundos aprox"
        for(j=0; j<2000000; j++){
        //saltamos a ler la eeprom
        leer_eeprom();
        // mostramos la primera columna
        mostrar();
        // habilitamos el encendido de los leds recorriendo un cero por los
        //registros de desplazamiento
        cero registro();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        dirmemo=0;
        }
        dirmemo=12;
        // Mostramos las letras "VE" por 50 seg aprox
        for(j=0; j<2000000; j++){
        //saltamos a ler la eeprom
        leer_eeprom();
        // mostramos la primera columna
        mostrar();
        // habilitamos el encendido de los leds recorriendo un cero por los
        //registros de desplazamiento
        cero registro();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        dirmemo=12;
        }
        dirmemo=24;
        for(j=0; j<2000000; j++){
        //saltamos a ler la eeprom
        leer_eeprom();
        // mostramos la primera columna
        mostrar();
        // habilitamos el encendido de los leds recorriendo un cero por los
        //registros de desplazamiento
        cero registro();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        dirmemo=24;
        }
        dirmemo=36;
        for(j=0; j<2000000; j++){
        //saltamos a ler la eeprom
        leer_eeprom();
        // mostramos la primera columna
        mostrar();
        // habilitamos el encendido de los leds recorriendo un cero por los
        //registros de desplazamiento
        cero registro();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        dirmemo=47;
        }
}
siguiente_dirmemo(){
dirmemo++;
}
leer_eeprom(){
// leemos la eeprom
dato = eeprom_read(dirmemo);
// Retardo para la lectura de la eeprom
Delay_Us(1);
}
Cero_registro(){
PORTA.RA1_bit=0;
PORTA.RA0_bit=1;
Delay_Us(1);
PORTA.RA0_bit=0;
}
Proceso(){
siguiente_dirmemo();
leer_eeprom();
desplaza_registro();
mostrar();
}
mostrar(){
PORTB=dato;
}
Desplaza_registro(){
PORTA.RA1_bit=1;
PORTA.RA0_bit=1;
Delay_Us(1);
PORTA.RA0_bit=0;
}
}

aparentemente esta bien, pero al compilarlo con el mikroc, me sale "compilation started..." y la siguiente linea dice "finished (with errors)" y pues si me genera el archivo hex, pero no se si funciona correctamente por que intente simularlo en proteus y no hace lo que deberia, de igual manera intente correrlo desde el mikroc, pero cuenco le doy inciciar debugger...me dice que no haya un .dbg y no hace naa, mientras no se si sirve mi programa o donde tiene los errores por que el mikroc no me los dice.

les agradeceria mucho qu me ayuden con estos problemas.

Un Saludo

Desconectado bigluis

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 511
    • Tutoriales de Qt C++
Re: errores de compilacion en MikroC
« Respuesta #1 en: 26 de Enero de 2010, 23:32:03 »
Creo que tu error radica en que las funciones auxiliares que estan fuera del main deben de ir arriba de este y no abajo, si lo pones abajo el compilador no los reconoce enviandote errores que dicen que esas funciones no existen.

Código: [Seleccionar]
siguiente_dirmemo(){
dirmemo++;
}

leer_eeprom(){
// leemos la eeprom
dato = eeprom_read(dirmemo);
// Retardo para la lectura de la eeprom
Delay_Us(1);
}

Cero_registro(){
PORTA.RA1_bit=0;
PORTA.RA0_bit=1;
Delay_Us(1);
PORTA.RA0_bit=0;
}

Proceso(){
siguiente_dirmemo();
leer_eeprom();
desplaza_registro();
mostrar();
}

mostrar(){
PORTB=dato;
}

Desplaza_registro(){
PORTA.RA1_bit=1;
PORTA.RA0_bit=1;
Delay_Us(1);
PORTA.RA0_bit=0;
}

void main() {
// Declaramos una variable para ciclar la lectura de la direccion de memoria y
// una para almacenar el dato que leeremos de la eeprom
char dirmemo='0';
char dato;
unsigned char j;
// puerto A y B como salida
TRISB=0;
TRISA=0;
// Valores para representar las letras en la matriz de leds, leidos de arriba
// hacia abajo en formato hexagesimal.
//
// letra C
eeprom_write(0,0x7c);
eeprom_write(1,0x44);
eeprom_write(2,0x44);
eeprom_write(3,0x00);
// Letra I
eeprom_write(4,0x44);
eeprom_write(5,0x7c);
eeprom_write(6,0x44);
eeprom_write(7,0x00);
// Letra N
eeprom_write(8,0x7c);
eeprom_write(9,0x20);
eeprom_write(10,0x10);
eeprom_write(11,0x7c);
// letra V
eeprom_write(12,0x00);
eeprom_write(13,0x40);
eeprom_write(14,0x38);
eeprom_write(15,0x04);
eeprom_write(16,0x38);
eeprom_write(17,0x40);
eeprom_write(18,0x00);
// Letra E
eeprom_write(19,0x7c);
eeprom_write(20,0x54);
eeprom_write(21,0x54);
eeprom_write(22,0x44);
eeprom_write(23,0x00);
// Letra S
eeprom_write(24,0x00);
eeprom_write(25,0x74);
eeprom_write(26,0x54);
eeprom_write(27,0x54);
eeprom_write(28,0x5c);
eeprom_write(29,0x00);
// Letra T
eeprom_write(30,0x40);
eeprom_write(31,0x40);
eeprom_write(32,0x7c);
eeprom_write(33,0x40);
eeprom_write(34,0x40);
eeprom_write(35,0x00);
// letra A
eeprom_write(36,0x00);
eeprom_write(37,0x7c);
eeprom_write(38,0x50);
eeprom_write(39,0x50);
eeprom_write(40,0x7c);
eeprom_write(41,0x00);
// Letra V
eeprom_write(42,0x40);
eeprom_write(43,0x38);
eeprom_write(44,0x04);
eeprom_write(45,0x38);
eeprom_write(46,0x40);
eeprom_write(47,0x00);
// rutina de espera a que se escriban los valores en la eeprom
Delay_Ms (10000);
// Inicio de ciclo para mostrar los leds en la matriz
for(j=0; j<8; j++){
PORTA.RA1_bit=1;
PORTA.RA0_bit=1;
Delay_Us(1);
PORTA.RA0_bit=0;
Delay_Us(1);
}
for(;;){
        // mostramos las letras "CIN" en pantalla por 50 segundos aprox"
        for(j=0; j<2000000; j++){
        //saltamos a ler la eeprom
        leer_eeprom();
        // mostramos la primera columna
        mostrar();
        // habilitamos el encendido de los leds recorriendo un cero por los
        //registros de desplazamiento
        cero registro();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        dirmemo=0;
        }
        dirmemo=12;
        // Mostramos las letras "VE" por 50 seg aprox
        for(j=0; j<2000000; j++){
        //saltamos a ler la eeprom
        leer_eeprom();
        // mostramos la primera columna
        mostrar();
        // habilitamos el encendido de los leds recorriendo un cero por los
        //registros de desplazamiento
        cero registro();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        dirmemo=12;
        }
        dirmemo=24;
        for(j=0; j<2000000; j++){
        //saltamos a ler la eeprom
        leer_eeprom();
        // mostramos la primera columna
        mostrar();
        // habilitamos el encendido de los leds recorriendo un cero por los
        //registros de desplazamiento
        cero registro();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        dirmemo=24;
        }
        dirmemo=36;
        for(j=0; j<2000000; j++){
        //saltamos a ler la eeprom
        leer_eeprom();
        // mostramos la primera columna
        mostrar();
        // habilitamos el encendido de los leds recorriendo un cero por los
        //registros de desplazamiento
        cero registro();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        Proceso();
        dirmemo=47;
        }
}

}

No es mi intencion ofenderte ni nada, pero este codigo ocupa mucha memoria y supongo que no necesitas escribir los valores en la eeprom sino que deberias crear un arreglo de constantes al cual llames en alguna parte del codigo.

Te recomiendo que pongas un esquema del circuito al cual estas elaborando y un pequeño resumen de lo que debería hacer el programa, esto nos ayudará a saber como funciona y facilitarnos cualquier tipo de ayuda que podamos brindarte.
« Última modificación: 26 de Enero de 2010, 23:37:20 por bigluis »
Tutoriales de Qt C++

No es necesario que hagamos Grandes cosas, sino que lo que hagamos sea importante.

SI la NECESIDAD es la MADRE del CONOCIMIENTO, SEGURAMENTE la PEREZA su TÍA.

Cuando el ARTE requiere de PRECISION le llamamos CIENCIA


 

anything