/*************************************************************************** */ /* sg-null-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 */ /*---------------------------------------------------------------------------*/ /* Servidor NULO */ /* Servidor: sg-null */ /* Implementado para la tarjeta Skypic a 20MHz */ /*---------------------------------------------------------------------------*/ /* Implementados los servicios de Identificacion y PING. */ /* Cada vez que se hace un PING se cambia de estado el led. */ /* Inicialmente el led conectado al pin RB1 esta encendido */ /* Cualquier otro caracter recibido se ignora */ /*---------------------------------------------------------------------------*/ /* Juan Gonzalez <juan@iearobotics.com> */ /*---------------------------------------------------------------------------*/ /* LICENCIA GPL */ /*****************************************************************************/ //-- Especificar el pic a emplear #define __16f877 #include "pic16f877.h" /*******************************/ /* DEFINICIONES */ /*******************************/ #define LED 0x02 //-- Bit del puerto B donde se encuentra el LED #include "sci.h" #include "pic16f877.h" /*----------------------------*/ /* CONSTANTES DEL STARGATE */ /*----------------------------*/ //-- Datos devueltos por el servicio de identificacion #define IS 0x10 // IS. Identificacion del servidor #define IM 0x30 // IM. Identificacion del microcontrolador (pic16F876A) #define IPV 0x10 // IPV. Placa Skypic. Version 0. //-- Identificadores de los servicios #define SID 0x49 // Servicio de identificacion #define SPING 0x50 // Servicio de PING (0x50) //-- Identificadores para la respuesta #define RPING 0x4F // Respuesta al Servicio de PING (0x4F) #define RSI 0x49 // RSI. Codigo de respuesta del servicio de identificacion /*---------------------*/ /* PROGRAMA PRINCIPAL */ /*---------------------*/ void main(void) { unsigned char car; /*----------------------------*/ /* Configurar el sistema */ /*----------------------------*/ //-- Configurar el led de la skypic TRISB=~LED; //-- Activar LED de la Skypic PORTB=LED; /*-----------------------------*/ /* Configurar el puerto serie */ /*-----------------------------*/ sci_init(); /*------------------*/ /* Bucle principal */ /*------------------*/ for (;;) { //-- Esperar a que se solicite un servicio car=sci_read(); switch(car) { //-- Servicio de identificacion case SID: sci_write(RSI); sci_write(IS); sci_write(IM); sci_write(IPV); break; //-- Servicio de PING case SPING: sci_write(RPING); PORTB^=LED; //-- Cambiar de estado el LED break; } } }