Autor Tema: Recepcion usart  (Leído 4164 veces)

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

Desconectado hqv

  • PIC12
  • **
  • Mensajes: 70
Recepcion usart
« en: 17 de Mayo de 2004, 16:12:00 »
Hola:
Soy nuevo en programación en c y tengo que solucionar los siguiente:

tengo que recibir con un pic 16f877 comandos at que provienen de un celular, guardarlos y poder interpretarlos para asi ejecutar una accion determinada.

Como soy novato no se como guartarlos, donde quedan, que tipo de variable son.

muchas gracias de antemano
hqv

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Recepcion usart
« Respuesta #1 en: 17 de Mayo de 2004, 23:20:00 »
La usart, tiene dos bytes de buffer...
Que tienes que ir leyendo cada vez que se produzca una interrupcion por usart...

En c, no te pued ayudar, porque aún no he hecho nada... Pero para hacerte una idea, pasaté por el subforo de picbasic, y tengo un post llamado hserin hserout, que al menos puede aclararte algo de la filosofía de trabajo de la usart....

Luego solo tendrás que codificar en C a tu gusto....

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Recepcion usart
« Respuesta #2 en: 18 de Mayo de 2004, 08:40:00 »
RDA_isr()
{
   while(kbhit()) //te aseguras de vaciar el buffer entero, aunque no es necesario si la rutina siguiente en demasiado larga te puede llegar otro dato mientras la ejecutas...
   {
      dato=getc();
     
   }
}


saludos

Desconectado hqv

  • PIC12
  • **
  • Mensajes: 70
RE: Recepcion usart
« Respuesta #3 en: 18 de Mayo de 2004, 09:27:00 »
gracias a los dos por contestarme
cualquier otra ayuda no vendría mal
hqv

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Recepcion usart
« Respuesta #4 en: 18 de Mayo de 2004, 12:31:00 »
Yo lo que he hecho, es crearme un buffer paralelo fifo de 30bytes, en el que cada vez que encuentro interrupción, lo voy llenando y luego en el programa principal, lo voy interpretando y vaciando a mi antojo...
Pero muy rápido que si la comunicación es suelta, se llena rápido...

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
RE: Recepcion usart
« Respuesta #5 en: 18 de Mayo de 2004, 19:09:00 »
Pienso que no hay mejor ejemplo que los que da el PCW..

Los encuentras en la carp. examples del PICC

este es para recibir un dato.. los datos los almacena en el arreglo BUFFER_SIZE.. y cada vez que va leyendo con la funcion bgetc() lo va desocupando


#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)  


#define BUFFER_SIZE 32
BYTE buffer[BUFFER_SIZE];
BYTE next_in = 0;
BYTE next_out = 0;


#int_rda
void serial_isr() {
   int t;

   buffer[next_in]=getc();
   t=next_in;
   next_in=(next_in+1) % BUFFER_SIZE;
   if(next_in==next_out)
     next_in=t;           // Buffer full !!
}

#define bkbhit (next_in!=next_out)

BYTE bgetc() {
   BYTE c;

   while(!bkbhit) ;
   c=buffer[next_out];
   next_out=(next_out+1) % BUFFER_SIZE;
   return(c);
}



void main() {

   enable_interrupts(global);
   enable_interrupts(int_rda);

   printf("
Running...
";

               // The program will delay for 10 seconds and then display
               // any data that came in during the 10 second delay

   do {
      delay_ms(10000);
      printf("
Buffered data => ";
      while(bkbhit)
        putc( bgetc() );
   } while (TRUE);
}

Espero sea de utilidad.
Adios

Desconectado hqv

  • PIC12
  • **
  • Mensajes: 70
RE: Recepcion usart
« Respuesta #6 en: 18 de Mayo de 2004, 19:23:00 »
gracias odukec por el ejemplo.
hqv

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Recepcion usart
« Respuesta #7 en: 18 de Mayo de 2004, 23:57:00 »
odukec ¿cual es el nombre del ejemplo?

Desconectado odukec

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 174
RE: Recepcion usart
« Respuesta #8 en: 19 de Mayo de 2004, 08:37:00 »
Hola..

es EX_SISR.C  

Adios

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: Recepcion usart
« Respuesta #9 en: 19 de Mayo de 2004, 16:57:00 »
creo recordar que implemente ese buffer en el pic-sms que esta en la web
para modbus no lo use ya que al tener mas interrupciones en el programa corria el riesgo de sobrepasar el tiempo de espera del maestro al tratar los dats en el bucle principal.

la verdad es que en muchas aplicaciones de puerto serie este buffer va de maravilla

saludos

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: Recepcion usart
« Respuesta #10 en: 20 de Mayo de 2004, 08:02:00 »
Pic-SMS???
Ese proyecto no lo conocía yo...
No quiero entrar en offtopic, pero donde le puedo hechar un ojo???

Tnks Pacala


 

anything