TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: karitol en 03 de Enero de 2014, 11:24:58
-
Hola, soy nueva en el foro, pero llevo ya un tiempo mirando este junto a otros foros para resolver algunas dudas que se me presenta. Estoy haciendo un proyecto donde utilizo la usb y visual basic para que realicen las operaciones que yo quiera, para ello he utilizado las librerías de Microchip para la conexión de usb, y he utilizado la interfaz gráfica que viene con microsoft visual Studio que realiza una tarea similar al de un hyperterminal.
Tengo entendido que el proceso para recibir mensajes es este:
BYTE numBytesRead;
if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;
if(mUSBUSARTIsTxTrfReady())
numBytesRead = getsUSBUSART(USB_Out_Buffer,64);
La cuestión es que yo quiero comparar el numero o letra que entra por el hyperterminal o por el form del visual para que realice una operación, he intentado lo siguiente pero no obtengo resultados.
if (numBytesRead=1)
{
PORTCbits.RC2=1
}
Por favor ayuda. Gracias de antemano
-
:? :? probablemente me equivoque pero... se supone que cuando tu colocas un "if", el operador que lo entrelaza debe ser de comparacion, no de asignacion, es decir:
if(variable1==variable2)
{
ejecuta codigo;
}
y yo veo que pones:
if (numBytesRead=1)
{
PORTCbits.RC2=1
}
en otras palabras, creo que te falta un signo =
mi pregunta es, no te marca algun warning o error al compilar???
P.d. aclaro, no soy experto jeje :D
-
Gracias por responder.
Si thegame tiene toda la razon, pero ya hice la modificacion y el programa corre bien, lo que no sé es si es muy dificil por ejemplo prender un led mediante un formulario de visual
-
no tengo experiencia usando rs232 desde visual basic, pero te recomendaria que verificaras que estas recibiendo los datos correctamente, primero podrias hacer un "echo", es decir que el micro regrese a la pc lo mismo que esta recibiendo.
puede que desde ahi este el error
-
rivale gracias por responder, pues la verdad es que con la ayuda de un foro de todopic titulado si mal no recuerdo lo basico de la comunicacion cdc por C18, pude conseguir lo que usted me menciona, que entiendo es que me rebote cada palara o letra que yo escribo y el codigo es el siguiente:
BYTE numBytesRead;
if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;
if(USBUSARTIsTxTrfReady())
{
numBytesRead = getsUSBUSART(USB_Out_Buffer,64);
if(numBytesRead != 0)
{
strcpypgm2ram(USB_In_Buffer,(const rom far char *)"Ha pulsado: "); //codigo del forero de todopic
strncat(USB_In_Buffer, USB_Out_Buffer, numBytesRead); //codigo del forero de todopic
strcatpgm2ram(USB_In_Buffer,(const rom far char *)"\r\n"); //codigo del forero de todopic
putsUSBUSART(USB_In_Buffer); //codigo del forero de todopic
}
}
Se supone que cuando yo abro el hyperterminal presiono una tecla por ejemplo la 'a' y al instante me rebota "ha pulsado: a"
eso lo hace bien, pero cuando intento asegurarme de que letra entro no logro conseguir, por ejemplo yo quiero que si yo presiono la a me cambie el estado de un puerto, que si presiono la b me cambie el estado de otro puerto, y he intentado lo siguiente:
if (numBytesRead== 'a')
{
PORTCbits.RC5 != PORTCbits.RC5;
}
nota: estuve mirando y BYTE es la redefinicion de unsigned char. El programa me corre bien pero en simulacion real no consigo resultados
-
Se supone que cuando yo abro el hyperterminal presiono una tecla por ejemplo la 'a' y al instante me rebota "ha pulsado: a"
eso lo hace bien, pero cuando intento asegurarme de que letra entro no logro conseguir, por ejemplo yo quiero que si yo presiono la a me cambie el estado de un puerto, que si presiono la b me cambie el estado de otro puerto, y he intentado lo siguiente:
if (numBytesRead== 'a')
{
PORTCbits.RC5 != PORTCbits.RC5;
}
nota: estuve mirando y BYTE es la redefinicion de unsigned char. El programa me corre bien pero en simulacion real no consigo resultados
en la variable numByterRead tienes la longitud de tu cadena, si quieres comparar un solo caracter, tendrias que verificar el elemento 0 de tu arreglo
USB_Out_Buffer
-
Muchas gracias rivale me sirvio mucho lo que me dijo :)