bueno supongo que ya sabes usar interrupciones.
la interrupcion 1A permite obtener informacion del sistema si se escoge la funcion te da la hora del sistema ya en BCD , la hora la coloca en los registros cx y dx de la siguiente forma:
CH:Hora BCD, Cl:minutos BCD, Dh:segundos BCD
el siguiente programa almacena la hora del sistema en las siguientes direcciones
0200 horas (00 a 24 hrs)
0201 minutos (00 a 59)
0201 segundos (00 a 59)
MOV AH,2 ;necesario para poder leer la hora del sistema
INT 1A
MOV [200],CH
MOV [201],CL
MOV [202],DH
INT 20 ;esto finaliza el programa
tendria que hacer un retardo de 15segundos, mandar la direccion 201 por el puerto, llamar otra vez al retardo de 15segundos y luego mandar la direccion 200 por el puerto y volver al inicio, lo de leer del teclado tambien se hace con interrupciones y podrias estarte preguntando si ya se toco la tecla en medio de las rutinas de 15 segundos.
Espero que esto te ayude. si tienes alguna duda avisame