Buenas, estaba viendo el video de este ejercicio y me quedo una solucion bastante distinta a la planteada por el docente, principalmente porque la logica la hice toda en la rutina de interrupcion, y me queda la duda de si esta bien. Agradeceria si me pueden indicar si es correcta o incorrecta la solucion. La adjunto a continuacion:
#define threshold 300
#define byte unsigned char
#define SENSOR ...
#define ACCESORIO ...
short tics;
void interrupt tiempo() {
byte estado_sensor = IN(SENSOR);
if (estado_sensor & 0x01 == 0x01) { // Si hay peligro
tics++;
estado_accesorio = IN(ACCESORIO);
estado_accesorio |= 0x01; // Prender extractor
if (tics == threshold) // Si paso el tiempo necesario, cerrar valvula
estado_accesorio &= 0xFD;
OUT(ACCESORIO, estado_accesorio); // Efectivizar cambios en accesorios
}
else
tics = -1; // Resetear contador de ciclos
}
void main() {
disable();
tics = -1;
// Instalar rutinas
enable();
while (true);
}