TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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.
-
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.
-
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]);
}
}
}
-
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
-
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:
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...
-
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.
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.
-
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...