Bueno amigo, he notado un error:
Si lo que deseas es preguntar por una entrada debes utilizar la funcion input(),
La funcion input() regresa true (1) si la entrada esta en estado alto o false (0) si esta en estado bajo, entonces, en lugar de:
if (SENSORA != 0)
debes utilizar:
if(input(SENSORA) !=0)
o simplemente
if(input(SENSORA))
ya que lo que haces es preguntar por el estado diferente de cero, es decir 1, eso para todos los pines de entrada que desees saber su estado.
Tambien note el siguiente detalle en tu if:
if (velocidad >= 1)
{
OUTPUT_HIGH(RAPIDO);
else
OUTPUT_HIGH(LENTO);
}
Lo que seguramente intentaste hacer es lo siguiente:
if (velocidad >= 1)
{
OUTPUT_HIGH(RAPIDO);
}else{
OUTPUT_HIGH(LENTO);
}
Recuerda que la estructura del if es:
if(condicion){
//codigo
}else{
//codigo
}
aunque tambien pudiste simplemente escribir:
if (velocidad >= 1)
OUTPUT_HIGH(RAPIDO);
else
OUTPUT_HIGH(LENTO);
debido a que solo existe una unica linea despues del if o else.
En cuanto a que uso le das a tu programa no lo mencionas, pues solo mencionar que:
tiempo=get_timer0();
solo obtiene el valor del timer crudo, es decir en "ticks" no en unidad de tiempo, toma en cuenta eso,
y espero recuerdes que los timers se desbordan pasado x tiempo por lo cual yo resetearia el timer cuando ya halla leido el valor y asi empezar a contar desde 0.
Tambien noto que la variable espacio nunca cambia, ya que has inicializado a 1
...
espacio=1;
...
velocidad= espacio/ tiempo;
por lo cual no veo sentido declarar una variable para dicho fin, a menos de que tu codigo aun no la implemente hasta este punto
.
y un error (horror) 1/tiempo devuelve un float por lo cual al intentar guardarla en una variable entera se hara un casting a int, perdiendo exactitud y en este caso nunca vas a tener un valor en velocidad.
velocidad= espacio/ tiempo;
Sumado a esto yo daria pequeños retardos (~20ms) a la "salida" de los if para permitir que la señal de la entrada se disipe y no reentre al if innecesariamente.
Creo es todo lo que note, saludos.