#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=20MHz)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)// RS232 Estándar
#include <string.h>
#include <internal_eeprom.c>
#include <STDLIB.H>
#include <MATH.H>
char Buffer_LSB[5];
int16 Pag_LSB;
void main(){
Buffer_LSB[0] = "1";
Buffer_LSB[1] = "7";
Buffer_LSB[2] = "8";
Buffer_LSB[3] = "1";
Pag_LSB = atol(Buffer_LSB);
write_int16_eeprom(0,Pag_LSB);
while (TRUE);
}
..........
Aqui esta mi codigo:Código: [Seleccionar]#include <18F452.h>
........
char Buffer_LSB[5];
int16 Pag_LSB;
void main(){
Buffer_LSB[0] = "1";
Buffer_LSB[1] = "7";
Buffer_LSB[2] = "8";
Buffer_LSB[3] = "1";
Pag_LSB = atol(Buffer_LSB);
write_int16_eeprom(0,Pag_LSB);
while (TRUE);
}
char Buffer_LSB[5] = "1781";a ver que ocurre
#include <18F452.h>
.
.
.
char Buffer_LSB[5] = "1781";
int16 Pag_LSB;
void main(){
Pag_LSB = atol(Buffer_LSB);
write_int16_eeprom(0,Pag_LSB);
while (TRUE);
}
Creo que descubrí el problema... ese "1781" lo toma como el número 1781 (mil setecientos ochenta y uno) que en hexa es 06F5. Son los valores que vos obtenés, aunque todavía no me queda claro el porque los obtenés invertidos, es decir F506
Integers are stored in little endian format. The LSB is in the lowest address.
Hay que ver si no hay una función para convertir un texto en hexa, y sino habrá que desarrollarla.
ivalue = atoi(string)
[...]
Converts the string passed to the function into an int representation. Accepts both decimal and hexadecimal argument. If the result cannot be represented, the behavior is undefined.
No hay drama. No tomes mi respuesta como un reto o una cosa sobresabida. Solo lo puse asi para ser fiel a la fuente y porque me parecio que estaba lo suficientemente claro como para acotar algo. Pero por sobre todo eso, no tenia ganas de redactar...
Saludos.
Si, deberia ser asi. Vi mal. Pense que era atoi pero es atol. Igualmente la definicion del CCS es analoga para longs.
Saludos.