# Ayuda con generación de archivos hex.



## Moradelii (Sep 17, 2012)

*Mi saludo cordial amigos.*

Tengo un problema al intentar generar el archivo HEX de este programa. Estoy usando PIC C Compiler y Proteus, el problema es que cuando intento hacer cambios en el programa y después de compilar me da lo siguiente: 

_*** Error 128 "Sensor.c" Line2(1,1): A #DEVICE requored before this line
1 Errors, 0 Warnings._

La verdad es que estoy ingresando a este mundo de programación de PICs. Agradeceré mucho vuestros consejos. El PIC es el 16F877A y el Display LCD es el LM016L.



```
// LCD module connections
sbit LCD_RS at RB2_bit;
sbit LCD_EN at RB3_bit;
sbit LCD_D4 at RB4_bit;
sbit LCD_D5 at RB5_bit;
sbit LCD_D6 at RB6_bit;
sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;
sbit LCD_EN_Direction at TRISB3_bit;
sbit LCD_D4_Direction at TRISB4_bit;
sbit LCD_D5_Direction at TRISB5_bit;
sbit LCD_D6_Direction at TRISB6_bit;
sbit LCD_D7_Direction at TRISB7_bit;
// End LCD module connections

char txt1[] = "SENSOR SAT";
char txt2[] = "Desarrollado por....";
char txt3[] = "Cesar Moradel";
char txt4[] = "---------------";

char mtr1[] = "Alarma ";
char mtr2[] = "ON";
char mtr3[] = "OFF";

char wtr1[] = "Nivel: ";
char wtr2[] = "0.30";
char wtr3[] = "0.60";
char wtr4[] = "0.90";
char wtr5[] = "1.20";
char wtr6[] = "1.50";



void main() 
{

int i = 0;
int c = 16;
int b = 0;
CMCON = 0x07;
ADCON1 = 0x06;
TRISA = 0x0F; // set direction to be input
PORTA = 0x00;
PORTD = 0x00;
PORTC = 0x00;
TRISB = 0x00; // set direction to be output
TRISC = 0x00; // set direction to be output
TRISD = 0x80; // set direction to be output

PORTD.F2 = 1;
PORTD.F7 = 1;

Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,txt1); // Write text in first row
Lcd_Out(2,1,txt2); // Write text in second row
Delay_ms(500);
Lcd_Cmd(_LCD_CLEAR); // Clear display
Lcd_Out(1,1,txt3); // Write text in first row
Lcd_Out(2,1,txt4); // Write text in second row
Delay_ms(500);

// Moving text
for(i=0; i<15; i++)
{ // Move text to the right 16 times
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Delay_ms(125);
}
i=0;

do
{
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,wtr1);
Lcd_Out(2,1,mtr1);
if(c>0)
{
PORTD.F2 = 1;
c--;
}
else
PORTD.F2 = 0;

if(b>0)
{
PORTD.F0 = 1;
Delay_ms(125);
PORTD.F0 = 0;
b--;
}



if(PORTD.F7 == 0)
c = 16;

if(PORTA == 0x0F)
{
PORTD.F1 = 1;
Lcd_Out(1,8,wtr2);
Lcd_Out(2,7,mtr3);
PORTC = 1;
if(i == 0)
{
c = 16;
b=3;
}
i=1;
}
else if(PORTA == 0x0E)
{
Lcd_Out(1,8,wtr3);
if(i == 1)
Lcd_Out(2,7,mtr3);
else
Lcd_Out(2,7,mtr2);
PORTC = 3;
}
else if(PORTA == 0x0C)
{
Lcd_Out(1,8,wtr4);
if(i == 1)
Lcd_Out(2,7,mtr3);
else
Lcd_Out(2,7,mtr2);
PORTC = 7;
}
else if(PORTA == 0x08)
{
Lcd_Out(1,8,wtr5);
if(i == 1)
Lcd_Out(2,7,mtr3);
else
Lcd_Out(2,7,mtr2);
PORTC = 15;
}

else if(PORTA == 0x00)
{
Lcd_Out(1,8,wtr6);
Lcd_Out(2,7,mtr2);
PORTD.F1 = 0;
if(i == 1)
{
c = 16;
b = 3;
}
i=0;
PORTC = 31;
}
else
PORTA = 0x0F;
Delay_ms(125);


}while(1); // Endless loop
}
```


----------



## aguevara (Sep 17, 2012)

Básicamente te esta indicando que requieres definir al dispositivo que estas programando por medio de la directiva DEVICE. La traduccion de ese mensaje es:

*** Error 128 "Sensor.c" Line2(1,1): A #DEVICE requored before this line
1 Errors, 0 Warnings.
*** Error 128 "Sensor.c" Linea2(1,1): Un #DEVICE requerido antes de esta linea
1 Error, 0 Advertencias


----------



## D@rkbytes (Sep 18, 2012)

Moradelii dijo:


> Estoy usando PIC C Compiler


El código que estas usando no es para PIC C Compiler de CCS
Más bien parece ser para MikroC de MikroElectronica

Para eso, necesitas crear un proyecto de MikroC y compilarlo con ese IDE,
o tendrás problemas por incompatibilidad de instrucciones entre compiladores.


Suerte.


----------



## Moradelii (Sep 18, 2012)

Muchas gracias amigos.

aguevara y D@rkbytes.

Sus obervaciones y recomendaciones son muy utiles.

Les puedo molestar?

Cual es la linea o sentencia que debo usar?

Mil gracias.


----------



## D@rkbytes (Sep 18, 2012)

Moradelii dijo:


> Cual es la linea o sentencia que debo usar?


Como te decía anteriormente, las instrucciones son diferentes para ambos compiladores.

Si lo quieres hacer en PICC de CCS tendrás que modificar varias líneas de código para adaptarlo.

Si ya tienes el código para MikroC, lo más conveniente es que lo continúes en ese entorno.
Te ahorras tiempo en la conversión de instrucciones.

El programa que adjuntas se compila sin problemas usando MikroC

Suerte.


----------

