Autor Tema: utilización de UART  (Leído 1921 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
utilización de UART
« en: 15 de Mayo de 2008, 05:59:04 »
hola, estoy utilizando un pic30f4013, específicamente la parte de la UART, pero tengo un problemilla, (creo que es fácil, pero no doy con la solución).

Estoy haciendo un programa que lee de UART1 y retransmite el mismo mensaje por UART2.

Lo que hago es almacenar el mensaje, comprobar cabecera y checksum y reenviar, y de ahí me surgen dos problemas:

  cuando hago:

       char buffer[];

       if((buffer[0] != 0xaa) || (buffer[longitud] != checksum))  esto siempre da true, pero yo compruebo con portb y están bien los valores

Mi otro problema va con lo mismo, porque como la función putsUART deja de escribir cuando encuentra un 0x00, quiero comprobarlo para enviar mi paquete correctamente. ¿Se puede hacer de alguna manera para que deje de escribir a una longitud en lugar de encontrar un cero?

Muchas gracais

Desconectado ochi

  • PIC10
  • *
  • Mensajes: 48
Re: utilización de UART
« Respuesta #1 en: 15 de Mayo de 2008, 07:48:15 »
Ya he encontrado el error yo misma, pero es raro, a ver si alguien sabe por que:

Resulta que si pongo buffer == 0x61 siempre da false, sin embargo, si pongo:

buffer == 'a' da true

y 61 es el valor en hexadecimal del código ASCII de la a. ¿alguna idea de porque funciona el caracter pero no el valor hexadecimal? Gracias


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: utilización de UART
« Respuesta #2 en: 15 de Mayo de 2008, 12:55:43 »
Mi otro problema va con lo mismo, porque como la función putsUART deja de escribir cuando encuentra un 0x00, quiero comprobarlo para enviar mi paquete correctamente. ¿Se puede hacer de alguna manera para que deje de escribir a una longitud en lugar de encontrar un cero?

No he visto algo así en las librerías de Microchip, deberás crear tu mismo una función donde le pases un buffer y un largo, e ir leyendo caracteres del buffer hasta llegar al largo que le pasaste como parámetro.

La función tendría un prototipo del estilo:   void putsUARTmio(char * buffer, char len);


Ya he encontrado el error yo misma, pero es raro, a ver si alguien sabe por que:

Resulta que si pongo buffer == 0x61 siempre da false, sin embargo, si pongo:
buffer == 'a' da true

mm que raro, puedes poner el código más acabado? puedes además ver de limitar el tamaño a buffer y no dejarlo abierto?

saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)


 

anything