Pienso que estamos confundidos, te explico:
sigamos con el ejemplo de que T.ON son las 22.00, y T.OFF son las 8.00
Leemos la variable hora, y obtenemos que son las 9.00, por lo que la salida estaría a 0 (OFF).
Utilizando la función lógica OR tenemos que la primera condicion (reloj >= 22.00) no se cumple, la segunda condición (reloj <= 8.00) tampoco se cumple, por lo que, en efecto la salida estaría a 0 (OFF)
Ahora bien, cambiamos el T.ON a 8.00 y el T.OFF a 9.00, reloj ahora es 10.00 ... la primera condicion se cumple, puesto que reloj es mayor que 8.00, la segunda no se cumple, ya que es mayor, pero puesto que estamos usando una OR, como se cumple la primera la salida estaría activa, y en este caso habría un error, aquí si que habría que usar la función logica &&, para tenerlo dentro del intervalo.
Resumiendo... Cuando T.ON > T.OFF se usa ||
si T.ON < T.OFF se usa &&
Por lo que reescribiendo el codigo, en pseudocodigo, y si no me equivoco quedaría de la siguiente forma:
Codigo:
byte temporizador(void)
{
byte salida;
if (T.ON > T.OFF)
{
if (reloj>=T.ON || reloj<=T.OFF)
{
salida=1;
}
else
{
variable=0;
}
}
else if (T.ON < T.OFF)
{
if (reloj>=T.ON && reloj<=T.OFF)
{
salida=1;
}
else
{
variable=0;
}
}
return (variable);
Salu2!