Autor Tema: Comunicacion PC - Pic  (Leído 1872 veces)

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

Desconectado Correia

  • PIC10
  • *
  • Mensajes: 39
Comunicacion PC - Pic
« en: 08 de Marzo de 2012, 10:57:47 »
buenos dias a todos, veran estoy desarrollando un proyecto de un control de acceso, en donde la clave de usuario se cambia por software, por un software que estoy haciendo en VB6, la clave es de 4 digitos, ahora cuando la persona ingresa la nueva clave en el software para cambiar y la envia seria por ejemplo enviar "1234", eso pasa a ser una cadena de 4 caracteres, pero en el micro la recibiria por interrupcion del usart, con la funcion getc(); pero ella me acepta un solo caracter, no una cadena.. como haria para leer esa cadena de 4 caracteres que me envia la pc y guardarlos con un vector unidimensional? se que esa cadena de 4 caracteres, cada caracter lo enviara en cierto intervalo de tiempo.. si alguien ha trabajado algo asi me gustaria ayuda, ya que lo que he investigado, solo envian un solo caracter. gracias.
-Tsuki no Tamashi
-Microcontroladores
-Robotica
-Evangelion
-Einstein

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Comunicacion PC - Pic
« Respuesta #1 en: 08 de Marzo de 2012, 11:04:57 »
Hola amigo, una forma es que vayas recibiendo cada caracter y los vas almacenando en una matriz de acuerdo a un contador

dato_recibido[con_recibir] = getc();
con_recibir++;

Ya podrás determinar el fin por en valor del contador o por un caracter "X" que envíes

Saludos.

Desconectado Correia

  • PIC10
  • *
  • Mensajes: 39
Re: Comunicacion PC - Pic
« Respuesta #2 en: 08 de Marzo de 2012, 11:11:27 »
por cada caracter de la cadena "1234" se activara la interrupcion usart no?por lo que lo podria hacer asi:
void usart_isr(){
vector[contador]=getc();
contador++
if (contador==4){
 for(contador=0contadori<4;contador++){
write_eeprom(contador,vector[contador]);
}
}
}
-Tsuki no Tamashi
-Microcontroladores
-Robotica
-Evangelion
-Einstein

Desconectado jukinch

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 608
Re: Comunicacion PC - Pic
« Respuesta #3 en: 08 de Marzo de 2012, 11:13:35 »
Hola.
mirá estos hilos. te van a ayudar.

http://www.todopic.com.ar/foros/index.php?topic=33342.0

http://www.todopic.com.ar/foros/index.php?topic=36187.0


      Saludos a ambos.
          Jukinch
"Divide las dificultades que examinas en tantas partes como sea posible para su mejor solución." -René Descartes

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: Comunicacion PC - Pic
« Respuesta #4 en: 08 de Marzo de 2012, 11:44:37 »
Hola Correia si lo que quieres es tomar un String por el interface USART lo mas recomendable es usar la funcion

GETS(char *string) :
Esta función lee caracteres (usando GETC()) de la cadena (string) hasta que encuentra un retorno de carro(valor ASCII 13), La cadena se termina con un 0.

Te dejo un ejemplo de como puedes usarlo:


Código: [Seleccionar]
Char arreglo[15];

if (kbhit()==1) //Si se tienen caracteres listos para ser procesados
{
  gets(arreglo);  //Se toma la cadena enviada al pin ‘rcv’ del RS232 y se la almacena en el ‘arreglo’ de caracteres
}


saludos...

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Comunicacion PC - Pic
« Respuesta #5 en: 08 de Marzo de 2012, 12:14:31 »
Con la función Gets hay que tener cuidado, ya que de no recibir el caracter enter el PIC se queda anclado, además no sale de la interrupción hasta terminar de recibir.

Citar
if (contador==4){
 for(contador=0contadori<4;contador++){
write_eeprom(contador,vector[contador]);

Opino: la rutina grabar eeprom gasta aproximadamente 4 ms por registro no siempre es bueno (pero funciona) ponerla dentro de una interrupción, yo acostumbro activar una bandera y luego en la rutina general realizar el grabar eeprom.

Saludos.

Desconectado amyver

  • PIC12
  • **
  • Mensajes: 75
Re: Comunicacion PC - Pic
« Respuesta #6 en: 08 de Marzo de 2012, 12:58:36 »
Con la función Gets hay que tener cuidado, ya que de no recibir el caracter enter el PIC se queda anclado, además no sale de la interrupción hasta terminar de recibir.

Es correcto lo que dice el amigo Diego, si usas la funcion "GETS" mucho ojo con el  retorno de carro(valor ASCII 13) :-) :-) :-)

saludos...