Yo lo que hice fue esto:
#Define EST0 as 10H
#Define EST1 as 12H
#Define EST2 as 14H
#Define EST3 as 16H
#Define DATO0 as 11H
#Define DATO1 as 13H
#Define DATO2 as 15H
#Define DATO3 as 17H
#Define DATOS as 20H
#Define salDef as 0FFH
bool salidaOcupada;
void main(){
salidaOcupada = false;
while(true){
if(!salidaOcupada){
OUT(DATOS,salDef);
}
}
}
void interrupt INT_ENTRADA(){
if(IN(EST0)%2){
while(salidaOcupada);
salidaOcupada = false;
OUT(DATOS,0);
while(salidaOcupada);
salidaOcupada = false;
OUT(DATOS,IN(DATO0));
} else if(){
.
. lo mismo para los otros casos
.
.
}
}
void interrupt INT_SALIDA(){
salidaOcupada = false;
}
Aca no pierdo ningun dato creo pero esta mal que lo deje esperando todo el tiempo a que espere la salida, no? ademas si el primero interrumpe muy seguido los otros nunca se llegan a atender.