Autor Tema: Emulando la función Serial de Arduino para Pic  (Leído 1919 veces)

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

Desconectado edgar_soliz

  • PIC10
  • *
  • Mensajes: 2
Emulando la función Serial de Arduino para Pic
« en: 12 de Octubre de 2012, 10:45:18 »
Como están en esta ocasión quiero poner a consideración del foro un código que emula la función Serial de Arduino, como todos ya saben esta función permite la comunicación serial de una manera más sencilla y clara, este código no es una versión final ni mucho menos, lo pongo para que se le pueda hacer un test y mejorarlo.
Es verdad que este código ya está escrito en la Versión de Arduino para Pic “Pingüino” pero cabe destacar que este código permite ahorrar memoria cuando solo queremos algunas funciones.

Código: Bash
  1. /*Emulando la función Serial de Arduino para Pic
  2. Autor: Edgar Soliz Valdez
  3. Emula las funciones: Serial.available(), Serial.read(), Serial.flush()
  4.  */
  5. #include <16f877A.h>
  6. #fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD,NOWRT
  7. #use delay (clock=4000000)
  8. #use RS232(BAUD=9600,BITS=8,XMIT=PIN_C6,RCV=PIN_C7)
  9.  
  10. char buffer[60];
  11. int8 contbuf=0;
  12. #int_RDA
  13. void RDA_ISR()
  14. {
  15.    buffer[contbuf]=getc();
  16.    contbuf++;
  17.    
  18. }
  19. int8 Serial_available()
  20. {
  21.    delay_ms(40);
  22.    return contbuf;
  23. }
  24. char Serial_read()
  25. {
  26.    char buff=buffer[0];
  27.    int8 i=0;
  28.    for(i=0;i<contbuf;i++)
  29.    {
  30.       buffer[i]=buffer[i+1];
  31.    }
  32.    contbuf--;
  33.    return buff;
  34. }
  35. void Serial_flush()
  36. {
  37.    int i=0;
  38.    for(i=0;i<60;i++)
  39.    {
  40.       buffer[i]=' ';
  41.    }
  42. }
  43. void main()
  44. {
  45.  
  46.    enable_interrupts(INT_RDA);
  47.    enable_interrupts(GLOBAL);
  48.    while(TRUE)
  49.    {
  50.          
  51.           if(Serial_available())
  52.           {
  53.              while(Serial_available()>0)
  54.             {
  55.  
  56.                   printf("%c buffer: %d \r\n",Serial_read(),Serial_available());
  57.                  
  58.             }
  59.                printf("\r\n");  
  60.           }
  61.    }
  62. }
« Última modificación: 12 de Octubre de 2012, 11:01:40 por edgar_soliz »