/*************************************************************************** */ /* sg-echo-pic16F876A-skypic.c Julio 2006 */ /*---------------------------------------------------------------------------*/ /* Servidor de eco para la tarjeta Skypic (a 20MHZ) */ /* Se hace eco de todo lo recibido por el puerto serie y se envia tambien */ /* por el puerto B para que se pueda ver con una tarjeta de leds, como la */ /* FREELEDS */ /*---------------------------------------------------------------------------*/ /* Juan Gonzalez <juan@iearobotics.com> */ /*---------------------------------------------------------------------------*/ /* LICENCIA GPL */ /*****************************************************************************/ //-- Especificar el pic a emplear #define __16f877 #include "pic16f877.h" //-- CONSTANTES #define B9600_4MHZ 0x19 #define B9600_20MHZ 0x81 //--------------------------------------------- //-- CONSTANTES MODIFICABLES POR EL USUARIO //--------------------------------------------- //-- Establecer la velocidad para un cristal de 20MHZ //-- La skypic lleva 20Mhz #define B9600 B9600_20MHZ /****************************************************/ /* Configurar el puerto serie a N81 y 9600 Baudios */ /****************************************************/ void sci_conf(void) { SPBRG = 0x81; //-- 9600 baudios (con cristal de 20MHz) TXSTA = 0x24; //-- Configurar transmisor RCSTA = 0x90; //-- Configurar receptor } /******************************************/ /* Recibir un caracter por el SCI */ /*----------------------------------------*/ /* DEVUELVE: */ /* -Caracter recibido */ /******************************************/ unsigned char sci_read(void) { //-- Eserar hasta que llegue el dato while (!RCIF); return RCREG; } /*****************************************/ /* Transmitir un caracter por el SCI */ /*---------------------------------------*/ /* ENTRADAS: */ /* -car: Caracter a enviar */ /*****************************************/ void sci_write(unsigned char car) { //-- Esperar a que Flag de lista para transmitir se active while (!TXIF); //-- Hacer la transmision TXREG=car; } /*********************************/ /* Programa principal */ /*********************************/ void main(void) { unsigned char c; //-- Configurar el puerto B para salida TRISB=0x00; //-- Inicialmente activar todos los leds PORTB=0xFF; //-- Configurar las comunicaciones serie sci_conf(); //-- Bucle infinito for (;;) { //-- Esperar a que llegue dato del PC c=sci_read(); //-- Sacarlo por el puerto B para verlo en los leds PORTB=c; //-- ...y enviar de vuelta el caracter por el puerto serie sci_write(c); } }