/*************************************************************************** */
/* sci.h      Julio-2005                                                     */
/*---------------------------------------------------------------------------*/
/* Ejemplo para el skybot                                                    */
/*---------------------------------------------------------------------------*/
/* Rutinas para manejo del puerto serie del PIC                              */
/* Comunicaciones a 9600 baudios (Configuracion 8N1)                         */
/*---------------------------------------------------------------------------*/
/*  Juan Gonzalez <juan@iearobotics.com>                                     */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                             */
/*****************************************************************************/

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

/*--------------------------------------------------*/
/* Enviar una cadena por el puerto serie            */
/* NOTA: con esta funcion solo se pueden enviar     */
/* cadenas constantes y NO un puntero a una cadena  */
/* Observar que se usa el atributo __code           */
/* No esta soluconado todavia en el SDCC 2.5.1      */
/* Ejemplo de uso:                                  */
/*    sci_cad("Hola");                              */
/*--------------------------------------------------*/
void sci_cad(__code unsigned char *cad)
{ 
  unsigned char i=0;
  
  while (cad[i]!=0) {
    sci_write(cad[i]);
    i++;
  }  
}

/*---------------------------------------------------------*/
/* Envio de una cadena por el puerto serie                 */
/* Con esta funcion si podemos enviar punteros a cadenas,  */
/* pero no cadenas constantes                              */
/* Ejemplo de uso:                                         */
/*     sci_cad2(mi_cadena);                                */
/*---------------------------------------------------------*/
void sci_cad2(unsigned char *cad)
{ 
  unsigned char i=0;
  
  while (cad[i]!=0) {
    sci_write(cad[i]);
    i++;
  }  
}