Hola, pensé una solución con un compañero, la adjunto a continuación.
Pero planteo la idea general de lo que pensamos por si no se entiende:
Utilizamos el buffer para ir guardando los datos si es que estaba ocupada la salida (transmitiendose un dato por la misma).
Si no estaba ocupada, habilitamos las interrupciones y transmitimos la dirección del controlador. Ese out va a llamar a intsalida() y es en dicha interrupción que culminamos mandando el dato, y luego de eso mandamos todo lo que haya quedado en el buffer. Utilizamos dato como auxiliar, pero creemos que podemos ahorrar esa memoria usando los 7 bits disponibles de estado.
No sabemos si las habilitaciones y deshabilitaciones son correctas, lo que queríamos era habilitar para que se llame a intsalida, envie lo datos, y luego de eso habilitarlas las interrupciones para que se sigan recibiendo los datos.
Otra duda:
Se pueden utilizar funciones auxiliares, por ejemplo para no repetir el mismo codigo en cada caso? Gracias