Autor Tema: gets2USART(); C18  (Leído 1866 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado CsDFiV

  • PIC10
  • *
  • Mensajes: 35
gets2USART(); C18
« en: 21 de Agosto de 2009, 18:58:50 »
hola!, como el titulo ya lo dice tengo una duda con el c18 justamente con el USART2 del microcontrolador 18f97j60 que no viene al caso el modelo sino el lenguaje en que lo programo alguien tiene idea de como se debe armar la funcion para que lea un string de 14 caracteres el usart2 del micro? aca adjunto mi codigo y si esta mal me lo corrigen por favor?

Código: [Seleccionar]
extern char barcode[15];

Open2USART( USART_TX_INT_OFF  &
            USART_RX_INT_OFF  &
            USART_ASYNCH_MODE &
            USART_EIGHT_BIT   &
            USART_CONT_RX     &
            USART_BRGH_HIGH, 25);
while(!DataRdy2USART());
gets2USART(barcode, 14)
espero sus respuestas! gracias!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: gets2USART(); C18
« Respuesta #1 en: 21 de Agosto de 2009, 20:51:49 »
No funciona? Porque mirando las configuraciones se ven correctas...


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado CsDFiV

  • PIC10
  • *
  • Mensajes: 35
Re: gets2USART(); C18
« Respuesta #2 en: 23 de Agosto de 2009, 21:34:03 »
bueno, si el codigo es correcto, como puedo hacer para que cuando reciba el string de 14 caracteres a este string lo compare con un string guardado en la memoria del micro y al hacer la comparacion pueda decidir que hacer luego es decir si le llega un string de 13 numeros y un enter por ejemplo
"000000000000"
este string seria equivalente en hexa a
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30 y falta el ultimo dato que es el enter que no se si en el usart del micro se toma a \r o a \n porque hace mucho que no lo uso.
entonces al definir esto como debo hacer para recibir el dato y compararlo con el que tengo guardado descontando el enter por asi decirlo y dejando limpio el dato que son los 13 caracteres ya recibidos.
yo habia pensado en hacer algo asi

Código: C
  1. Open2USART( USART_TX_INT_OFF  &
  2.             USART_RX_INT_OFF  &
  3.             USART_ASYNCH_MODE &
  4.             USART_EIGHT_BIT   &
  5.             USART_CONT_RX     &
  6.             USART_BRGH_HIGH, 25);
  7. while(!DataRdy2USART());
  8. gets2USART(barcode, 14);
  9. if (barcode == "0000000000000")
  10. {
  11. Close2USART();
  12. ubicacion0();
  13. }
si alguien tiene idea de como podria hacer sera bienvenida la idea, saludos!

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: gets2USART(); C18
« Respuesta #3 en: 23 de Agosto de 2009, 21:49:37 »
No, tienes que utilizar la función strcmp(string1,string2) que devuelve 0 si es identico:

Código: C
  1. #include <string.h>
  2.  
  3. char String1[15]="Hola Mundo";
  4. char String2[15];
  5.  
  6. gets2USART(String2,14);
  7. if(strcmp(String1,String2)==0){
  8.     ....
  9. }


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado CsDFiV

  • PIC10
  • *
  • Mensajes: 35
Re: gets2USART(); C18
« Respuesta #4 en: 24 de Agosto de 2009, 10:57:57 »
gracias por responder, en caso de que tenga el codigo de la siguiente manera y tenga que tomar el dato del usart y compararlo con varios datos guardados, como tendria que partir desde el codigo que me pasas. Es decir, tengo el dato:
0000000000000
0000000000001
0000000000002
0000000000003
utilizar if es el metodo mas facil o se pueden utilizar el switch case?
para este ultimo caso habria que definir cada uno de los casos con el dato que requiero comparar. pero como tendria que hacerlo.

saludos.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: gets2USART(); C18
« Respuesta #5 en: 24 de Agosto de 2009, 12:58:28 »
Debes usar if porque el argumento a evaluar de switch tiene que ser una contante.


Saludos!
No contesto mensajes privados, las consultas en el foro


 

anything