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.
/*Emulando la función Serial de Arduino para Pic
Autor: Edgar Soliz Valdez
Emula las funciones: Serial.available(), Serial.read(), Serial.flush()
*/
#include <16f877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD,NOWRT
#use delay (clock=4000000)
#use RS232(BAUD=9600,BITS=8,XMIT=PIN_C6,RCV=PIN_C7)
char buffer[60];
int8 contbuf=0;
#int_RDA
void RDA_ISR()
{
buffer[contbuf]=getc();
contbuf++;
}
int8 Serial_available()
{
delay_ms(40);
return contbuf;
}
char Serial_read()
{
char buff=buffer[0];
int8 i=0;
for(i=0;i<contbuf;i++)
{
buffer[i]=buffer[i+1];
}
contbuf--;
return buff;
}
void Serial_flush()
{
int i=0;
for(i=0;i<60;i++)
{
buffer[i]=' ';
}
}
void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(TRUE)
{
if(Serial_available())
{
while(Serial_available()>0)
{
printf("%c buffer: %d \r\n",Serial_read(),Serial_available());
}
printf("\r\n");
}
}
}