/*************************************************************************** */
/* 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;
}
}
}