TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micronet3 en 10 de Febrero de 2010, 18:22:02
-
hola, amigos del foro, bueno les cuento que he estado viendo la forma, de enviar codigo ascci al microcontrolador, especificamente el 16f628, me reconoce perfectamente el codigo ascii normal (0-127), pero el codigo ascii extendido(128-255) los valores ya no concuerdan, alguien sabe mas o menos a que se debe, o sera que el microcontrolador todavia no reconoce el codigo ascii extendido.
-
El código ascii depende estrictamente del compilador y no del microcontrolador.
Asegúrate de que los bytes del 128 al 255 que envía tu aplicación en la PC realmente sean bytes ascii (1 byte por caracter) y no código Unicode (2 bytes por caracter).
http://en.wikipedia.org/wiki/Unicode
-
he visto. la tabla de el unicode y no concuerda con lo que el pic me devuelve
yo utilizo el siguiente codigo
byte rx;
rx=getc();
printf(rx);
bueno envio el caracter ascii al microcontrolador y este me devuelve asi estoy viendo los caracteres que me generan el codigo ascii, los estoy simulando en proteus y envio el caracter al microcontrolador por el virtual teminal, presionando alt+codigo ascci.
todavia no he encontrado la solucion.
-
mmm bueno como estoy simulando el proteus, entonces dependera del proteus la codificacion
-
Prueba con putc(rx);
-
pues que curioso, solo me funciona el codigo ascii estandar, el codigo ascii extendido me devuelve numeros negativos y comienza a decrecer, aqui les adjunto los valores que me genero el proteus. seguire averiguando
si probe con putc amigo migsantiago pero me devuelve el mismo valor.
estos valores quiero utilizarlo para controlar luces rgb, a sugerencia del amigo mlo
letra=€ ascii=-128
letra= ascii=-127
letra=‚ ascii=-126
letra=ƒ ascii=-125
letra=„ ascii=-124
letra=… ascii=-123
letra=† ascii=-122
letra=‡ ascii=-121
letra=ˆ ascii=-120
letra=‰ ascii=-119
letra=Š ascii=-118
letra=‹ ascii=-117
letra=Œ ascii=-116
letra= ascii=-115
letra=Ž ascii=-114
letra= ascii=-113
letra= ascii=-112
letra=‘ ascii=-111
letra=’ ascii=-110
letra=“ ascii=-109
letra=” ascii=-108
letra=• ascii=-107
letra=– ascii=-106
letra=— ascii=-105
letra=˜ ascii=-104
letra=™ ascii=-103
letra=š ascii=-102
letra=› ascii=-101
letra=œ ascii=-100
letra= ascii=-99
letra=ž ascii=-98
letra=Ÿ ascii=-97
letra= ascii=-96
letra=¡ ascii=-95
letra=¢ ascii=-94
letra=£ ascii=-93
letra=¤ ascii=-92
letra=¥ ascii=-91
letra=¦ ascii=-90
letra=§ ascii=-89
letra=¨ ascii=-88
letra=© ascii=-87
letra=ª ascii=-86
letra=« ascii=-85
letra=¬ ascii=-84
letra= ascii=-83
letra=® ascii=-82
letra=¯ ascii=-81
letra=° ascii=-80
letra=± ascii=-79
letra=² ascii=-78
letra=³ ascii=-77
letra=´ ascii=-76
letra=µ ascii=-75
letra=¶ ascii=-74
letra=• ascii=-73
letra=¸ ascii=-72
letra=¹ ascii=-71
letra=º ascii=-70
letra=» ascii=-69
letra=¼ ascii=-68
letra=½ ascii=-67
letra=¾ ascii=-66
letra=¿ ascii=-65
letra=À ascii=-64
letra=Á ascii=-63
letra=Â ascii=-62
letra=Ã ascii=-61
letra=Ä ascii=-60
letra=Å ascii=-59
letra=Æ ascii=-58
letra=Ç ascii=-57
letra=È ascii=-56
letra=É ascii=-55
letra=Ê ascii=-54
letra=Ë ascii=-53
letra=Ì ascii=-52
letra=Í ascii=-51
letra=Î ascii=-50
letra=Ï ascii=-49
letra=Ð ascii=-48
letra=Ñ ascii=-47
letra=Ò ascii=-46
letra=Ó ascii=-45
letra=Ô ascii=-44
letra=Õ ascii=-43
letra=Ö ascii=-42
letra=× ascii=-41
letra=Ø ascii=-40
letra=Ù ascii=-39
letra=Ú ascii=-38
letra=Û ascii=-37
letra=Ü ascii=-36
letra=Ý ascii=-35
letra=Þ ascii=-34
letra=ß ascii=-33
letra=à ascii=-32
letra=á ascii=-31
letra=â ascii=-30
letra=ã ascii=-29
letra=ä ascii=-28
letra=å ascii=-27
letra=æ ascii=-26
letra=ç ascii=-25
letra=è ascii=-24
letra=é ascii=-23
letra=ê ascii=-22
letra=ë ascii=-21
letra=ì ascii=-20
letra=í ascii=-19
letra=î ascii=-18
letra=ï ascii=-17
letra=ð ascii=-16
letra=ñ ascii=-15
letra=ò ascii=-14
letra=ó ascii=-13
letra=ô ascii=-12
letra=õ ascii=-11
letra=ö ascii=-10
letra=÷ ascii=-9
letra=ø ascii=-8
letra=ù ascii=-7
letra=ú ascii=-6
letra=û ascii=-5
letra=ü ascii=-4
letra=ý ascii=-3
letra=þ ascii=-2
-
upps ahi me equivoque en el formato, ya lo corregi parece que estoy cerca de la solucion
el formato correcto seria
printf("letra=%c ascii=%u\n\r",i,i);
el anterior que utilize es
printf("letra=%c ascii=%d\n\r",i,i);
-
pues, he generado el codigo ascii en el microcontrolador y lo he enviado a la PC, he comparado los caracteres generado con el codigo ascii y con el codigo ascii extendido, pues son iguales, no hay problema.
pero cuando envio desde la pc, ahi esta la cuestion
por ejemplo envio el codigo asccii 199 y me devuelve otro valor(195) por eso no concuerdan los valores
-
Hola micronet3 , si estas utilizando css, ¿tuviste en cuenta que para el compilador todas las variables char , son por defecto, unsigned, de 0 a 127 y despues se vuelven negativas?. chequealo y después me comentas. :mrgreen:
-
Hola micronet3 , si estas utilizando css, ¿tuviste en cuenta que para el compilador todas las variables char , son por defecto, unsigned, de 0 a 127 y despues se vuelven negativas?. chequealo y después me comentas. :mrgreen:
Cuidado, en CCS un char equivale a un unsigned int8.
http://img521.imageshack.us/img521/1408/dibujoyy.png
(http://img521.imageshack.us/img521/1408/dibujoyy.th.png) (http://img521.imageshack.us/img521/1408/dibujoyy.png)
-
si por ejemplo si le pongo el formato: printf("%d\n\r",i); efecticvamente llega hasta 128 y despues comienza a decrecer, pero:
cuando le doy el formato printf("%u\n\r",i); entonces si llega a contar hasta 255,
-
que sea de tipo unsigned int8 quiere decir que puede contar de 0 a 255.
utilizando la siguiente codificación en la rutina de interrupcion del usart
#int_rda
void int_usart()
{
char rx;
rx=getc();
printf("%u",rx);
buffer[CaracteresRecibidos]=rx;
if(rx==13)
ComandoRecibido=true;
else
CaracteresRecibidos=CaracteresRecibidos+1;
}
cuando envio el codigo ascii 198, este me devuelve el valor de 227. la incongnita es porque me devuelve un valor distinto si solo le estoy diciendo que me regrese el caracter ascii que le he enviado?
-
migsantiago si he probado con putc y me pasa lo mismo, ahora le he puesto printf para ver el codigo ascii y de esa manera comprobar.
saludos
-
cuando envio el codigo ascii 198, este me devuelve el valor de 227. la incongnita es porque me devuelve un valor distinto si solo le estoy diciendo que me regrese el caracter ascii que le he enviado?
Pues entonces tendrás que revisar qué está enviando tu aplicación en Windows. Usa la hyperterminal con eco (pin rx y tx de tu pc puenteados) para ver qué está enviándose.
-
Perdonad , chicos , es que en el manual que yo leí, ponía, que no se comportaba como el c standar , y asignaba al char el valor signed int. =0->127->-1->-127.
Perdonad la confusión... :(
-
Por cierto Micronet3 , parece como si estuviera descontando te el valor de las primeras letras ascii que no son inprimibles, que programa usas para comunicar con el pic,¿ es el hiperterminal?, si es así ,recuerda que puede trabajar con el ascii de 7 bits, que no es del todo compatible con el de 8 bits. revisa la configuración del mismo, para caracteres hasta el 127 no notaras pega, pero después el resultado es imprevisible.
Revisa también el tipo de fuente que utilices, no todas las letras tienen el mismo valor bajo windows..
-
mmmm, estoy enviando los datos desde un programa en visual basic, lo que esta pasando es que el visual basic envia codigo unicode,y creo que el microcontrolador al recibirlo lo interpreta como codigo ascii. que piensan ustedes?
-
Unicode... 2 bytes por caracter.
ASCII... 1 byte por caracter.
-
ya he llegado una solucion, en ves de enviar caracteres estoy enviando especificamente bytes de 8 bits desde un programa hecho en visual basic y le llega perfectamente los valores
muchas gracias a todos.
un saludos
-
y cualquier duda respondere con todo gusto
saludos
-
amigo migsantiago, muchas gracias por tu ayuda, si efectivamente se tiene que enviar un byte y no el codigo unicode que es el que utiliza por defecto el visual basic