Hola Chaneque, bienvenido al foro.
A ver, no entiendo muy bien qué quieres hacer... Veamos, tienes un sensor fotovoltáico que manda una señal a un semáforo para enceder o apagar la luz, dependiendo de si el sensor ha sido activado o no. vale, hasta ahí todo muy claro.
Ahora bien, modificamos este "semáforo" de forma que:
1. Sensor está activado (entrada = 1), entonces:
2. Hay dos salidas que estarán a nivel alto, ambas, salida 1 y salida 2
3. Mirar configuración de "probabilidad" (esto puede ser una variable cargada en la epprom). Por ejemplo es 1/10
4. Incrementar contador de ciclos: ciclo = ciclo + 1
5. La salida 1 enviará un nivel alto a una bombilla roja: encendida
6. La salida 2 se invertirá y enviará un nivel bajo a una bombilla azul: apagada
7. Incrementar ciclo_roja = 1
8. Mirar entrada? Si entrada sigue a 1, volver al punto 5.
9. Entrada = 0: sensor desactivado
10. Salida 1 queda a nivel bajo
11. salida 2 queda a nivel bajo
12. Mirar entrada? Si entrada = 0 volver a 8
13. Si entrada = 1, volver a 2
Vale, esto se dará hasta que ciclos = 10. Como ciclos_roja = 1, entonces todas las demás veces que se de un 1 en la entrade, se debe encender la bombilla azul.
Si la probabilidad hubiera sido 2/10, se permitiría que ciclos_roja fuera igual a 2.
El enceder la roja o la azul, al principio me refiero, debe ser aleatorio, no?
Otra cosa. El configurar las probabilidades (1/10 o 2/10), te dije arriba que lo puedes hacer cargando una bandera en la eeprom del pic, que se carga en tiempo de compilación, o sea que no lo puedes modificar una vez que el programa esté ejcutándose. Si quieres que sea variable en tiempo de ejecución, por ejemplo con un pulsador, te aconsejo que configures una interrupción cada vez que se pulse el pulsador ese, que haga que el pic se "resetee", aunque no de forma definitiva, pero que reinicie el conteo de ciclos con la nueva configuración de probabilidad.
Bueno, a ver si no te he liado... Ya nos contarás.