TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Correia en 08 de Marzo de 2012, 10:57:47

Título: Comunicacion PC - Pic
Publicado por: Correia 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.
Título: Re: Comunicacion PC - Pic
Publicado por: Diego E. 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.
Título: Re: Comunicacion PC - Pic
Publicado por: Correia 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]);
}
}
}
Título: Re: Comunicacion PC - Pic
Publicado por: jukinch 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
Título: Re: Comunicacion PC - Pic
Publicado por: amyver 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...
Título: Re: Comunicacion PC - Pic
Publicado por: Diego E. 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.
Título: Re: Comunicacion PC - Pic
Publicado por: amyver 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...