int tics;
bool encendido;
void BOTON(){
if ( ( in(0x20) & 0x01 ) == 0x01) && (!encendido) // se apreta el botón y las luces estan apagadas
encendido = true;
else if ( ( in(0x20) & 0x01 ) == 0x01) && (!encendido) //se apreta el botón y las luces están encendidas
tics = 0;
}
void TIEMPO(){
if (encendido){
tics++;
if (tics == 45){
byte aux = in (0x20);
aux = aux OR 0xFE; // apagamos las luces
out(0x20, aux);
encendido = false;
tics = 0;
}
}
}
void main(){
disable();
tics = 0;
encendido = false;
enable();
while (true){}
}
Re: Práctico 8 - Ejercicio 6
Tengo un par de dudas,
boton() -> linea 4 ->
Primero que nada yo asumo que es de lectura/escritura el registro de la dirección 20h porque la letra no dice nada,
pero es lo mismo que en esa linea yo hubiese puesto lo siguiente? -> if(!lucesPrendidas), o no es correcto fiarme por la booleana, podría pasar que tengan valores contrarios a lo que hay en el registro?
me pasa lo mismo en la linea 14 de tiempo()
yo ahi apago el ultimo bit del registro, pero antes no pregunto si realmente estaba apagado, tendría que hacerlo o como ya estoy dentro de if(lucesPrendidas) no es necesario?
Me surgen estas dudas porque los profesores hacen bastante enfasis en no apagar lo que ya esta apagado y no prender lo que ya esta prendido, y no se que tan fiable son mis variables auxiliares a comparación con el valor real osea lo que hay en el registro.
Ya de paso pregunto si el código está bien, o tiene algun detalle.
Gracias.
Re: Práctico 8 - Ejercicio 6
No sabria responderte las preguntas que has hecho, pero si un detalle; casi seguro que las variables que estas utilizando en diferentes funciones, tipo tics, las tenes que declarar globalmente. De otra forma los programas en las que las estas usando no tendrian acceso a ellas.
Y algo que me comento el profe de monitoreo es que la idea es que antes de que esten declaradas no puede haber interrupciones, y la estructura de las cosas queda masomenos así:
*Declaración de variables globales, constantes, etc, cosas que necesitas si o si que esten antes de que haya alguna interrupción*
habilitar_interrupciones();
*programa principal*
*resto de los programas*
Saludos!