Depende de cómo se comporte el dispositivo externo que recibe el dato.
En el caso del adquisidor te dicen que "realiza la conversión A/D del canal indicado en CH[1..0] al recibir un flanco de subida en la entrada start". El adquisidor internamente memoriza el valor de CH[] con el flanco de start.
En el caso del bloque PC no es tan claro que memorice internamente el valor de PROM con el flanco de new. Te dicen que el promedio tenés que "escribirlo en PROM[7..0] y dar un pulso en new indicando que hay un nuevo dato"
Analicemos tres soluciones posibles:
1) La que está en la solución.
- Se necesita hacer dos OUT (el primero con el dato, el segundo para generar el flanco en start).
- Sabemos que funciona si el periférico memoriza internamente porque cuando llega el flanco de start los datos correctos están en CH.
- Funciona también si el periférico no memoriza (caso de PROM con bloque PC) porque los datos quedan memorizados en el registro que pusimos.
2) Suprimir el registro de datos- Se hace un solo out y se usa el pulso odsp también para dar la señal externa (p. ej. start)
- hace falta un solo OUT
- Funciona para el caso CH porque en el momento del flanco en ODSP en el ciclo M de escritura en E/S los datos están válidos en el bus de datos y son memorizados internamente por el adquisidor.
- NO funciona para el caso de bloque PC que no nos dicen que memorice el dato con el flanco. Cuando más tarde va a leer, lo que hay en el bus de datos ya es otra cosa.
3) Dejar el registro y dar la salida start con el odsp asociado a ese puerto.- También se hace un solo OUT.
- NO funciona para el caso del adquisidor, porque cuando se produce el flanco en odsp el dato que está presente en la salida del registro es el dato anterior
- Funciona para el caso de bloque PC porque enseguida después del flanco el dato correcto llega a la salida y queda memorizado hasta que es leído por el bloque PC.