TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: rferrero en 07 de Noviembre de 2004, 06:29:00
-
Hola a todos. Dos dudas:
1-A la hora de recibir un dato vía i2c, el registro SSPBUF (donde se recibe en primer lugar), es para caracteres (char) o enteros (int) ?? O para cualquiera?? Los ejemplos que he visto son sólo para caracteres, pero al ser un registro, por qué no para enteros??
2-EN caso de ser para caracteres (char), se puede convertir a entero?? Cómo?? No encuentro nada en el compilador. Se podía pasar de float a int y demás, pero de char a int ... Cómo tratar, pues, numéricamente, la medida??
Bueno, todo esto programando en C. En ASM no hay problema porque el dato de SSPBUF se va a W, un registro y punto.
Muchas gracias. un saludo.
-
bueno, si conoces asm, entonces es mas facil explicarte....
en realidad, char e imt no tienen diferencias, mas alla de las definiciones de concepto
en C , si defines un int8 es exactamente lo mismo q un char, con lo cual
hacer en asm lo siguiente...
movf SSPBUF , w
movw int8Var
es igual a esto en C
int8Var = SSPBUF
no le des muchas vueltas, un char es solo interpretacion humana de codigos binarios
Suerte.
-
Por lo que he visto, los datos puestos en dicho registro los trata como char. Lo que quiero es utilizar numéricamente esa medida: multiplicarla y sumarla, cosa que no es posible si está en modo char. Cómo convertir el formato, pues?? En C no existe el comando Int8Var.
Un saludo.
-
no se pq medio lo habras visto, pero lo q tienes en SSPBUF es un numero entre 0 y 255 (o 0x00 y 0xFF) y si justo el numero es 0x41=65 (dec) seguramente puedas interpretarlo como una "A", pero la realidad es q es el numero 0x41
y con el haces lo q quieras, sumas , restas, shift o lo q se te ocurra....
cuando dije int8Var me referia a una variable tipo int8 q expresa mucho mejor q tipo es q si pones char o int, ya q un int puede ser de 8 bits o 16 o 32 o 64 bits o en definitiva, lo q se define.
Suerte...
-
Gracias. Mañana te cuento ...
Un saludo.
-
Escrito originalmente por wqtrp
un char es solo interpretacion humana de codigos binarios
Gran frase ésta, wqtrp, seguro que clarifica mucho las ideas a todos los usuarios que tienen esa duda.
-
hola Nocturno....
cada uno prueba su metodo....
la verdad ya no se q ponerle para q noten la diferencia, asi q comenzare a ser surrealista y abstracto, por ahi va mejor asi ...
para mi si lo entendio me alcanza y sino, alguien mas se lo aclarara.... je
-
El tipo de variable char siempre genera confusiones. Tengo una manual que baje de internet que lo define asi:
"Es el tipo básico alfanumerico, es decir que puede contener un caracter, un digito numerico o un signo de puntuacion. Desde el punto de vista del computador, todos estos valores son caracteres. En C este tipo de variable siempre contiene un único carácter del codigo ASCII. El tamaño de memoria es de 1 byte". Muy complicado verdad, pero en realidad es extremadamente sencillo.
El punto es que una variable char generalmente se declara para almacenar un valor del codigo ASCII en donde por ejemplo el numero 49 representa al numero 1. Tendrias que revisar una tabla de caracters ASCII para aprender la codificacion. Esto significa que si tienes algo asi
char a="1"
en realidad el valor contenido en la variable "a" es el numero 48 (ó 0x31 en hexa ó 00110001 en binario) claro que el compilador no lo interpreta como numero sino como caracter.
Si quieres tratar el valor como numero tendrias que restarle el ASCII que representa al 0, que es 48 (0x30 ó 00110000 ) por ejemplo:
char a=0x31; // que es lo mismo que decir a="1" ó a=49
int b; //
b=a-0x30; // si realizas la compleja operacion 49-48 obtendras 1
// y el compilador lo interpretara como un valor numerico
// que se puede operar matematicamente.
Que suceder si recibes una cadena de caracteres que reprenta un numero por ejemplo 564 en ASCII (char[3]="564"
tendrias que cambiarlo a un numero decimal para poder operarlo recurriendoa: Generar una rutina que lo haga o utilizar alguna funcion C que se encuentra en las librerias del Compilador.
Salud2.
-
Sí, es cuestión de interpretaciones ...
Gracias!!