/*************************************************************************** */
/* sensores.c      Junio-2005                                                */
/*---------------------------------------------------------------------------*/
/* Ejemplo para el skybot                                                    */
/*---------------------------------------------------------------------------*/
/*  Se lee el estado de los 4 sensores y se envia por el puerto A. Si se     */
/*  conectan 4 leds a los bits RA0, RA1, RA2 y RA3 se veran respectivamente  */
/*  los sensores 1, 2 , 3 y 4                                                */
/*  Este programa es muy util para comprobar el correcto funcionamiento      */
/*  de todos los sensores, pero es necesario la conexion de leds externos.   */
/*  Este ejemplo funciona perfectamente con la placa FREELEDS, que tiene 8   */
/*  leds                                                                     */
/*---------------------------------------------------------------------------*/
/*  Andres Prieto-Moreno <andres@ifara.com>                                  */
/*  Juan Gonzalez <juan@iearobotics.com>                                     */
/*---------------------------------------------------------------------------*/
/*  LICENCIA GPL                                                             */
/*****************************************************************************/

//-- Especificar el pic a emplear
#define __16f877
#include "pic16f877.h"

//-- Definiciones de los sensores
#define   SENSOR1  0x01
#define   SENSOR2  0x02
#define   SENSOR3  0x80
#define   SENSOR4  0x04

//-- Definiciones de los bits del puerto A
#define   RA0  0x01
#define   RA1  0x02
#define   RA2  0x04
#define   RA3  0X08

//----------------------------
//- Comienzo del programa  
//----------------------------

void main(void)
{
  //-- Configurar puerto A para salida
  TRISA=0;
  
  //-- Configurar el puerto B para trabajar con el Skybot
  //-- RB0, RB1, RB2 y RB7 como entradas
  //-- RB3, RB4, RB5 y RB6 como salidas
  TRISB=0x87;
  
  //-- Los motores del Skybot parados
  PORTB=0x00;
  
  //-- Inicialmente los leds apagados
  PORTA=0x00;

  //-- Bucle principal
  while(1) {
    
    //-- Sensor 1 lee blanco?
    if ((PORTB & SENSOR1)==0)
       PORTA&=~RA0;           //-- si, Apagar el led
    else
       PORTA|=RA0;            //-- no, Encender led
    
    //-- Sensor 2 lee blanco?
    if ((PORTB & SENSOR2)==0)
       PORTA&=~RA1;           //-- si, Apagar el led
    else
       PORTA|=RA1;            //-- no, Encender led
    
    //-- Sensor 3 lee blanco?
    if ((PORTB & SENSOR3)==0)
       PORTA&=~RA2;           //-- si, Apagar el led
    else
       PORTA|=RA2;            //-- no, Encender led
    
    //-- Sensor 4 lee blanco?
    if ((PORTB & SENSOR4)==0)
       PORTA&=~RA3;           //-- si, Apagar el led
    else
       PORTA|=RA3;            //-- no, Encender led
  }
  
}