Para que sea más fácil la explicación de dicho diagrama, esta se realizará analizando cada estado por separado, pero prestándole vital importancia al hecho de que estos funcionan como un todo y en la práctica no se pueden separar, realizando cada uno de ellos una tarea diferente y necesaria, para el correcto funcionamiento del protocolo de comunicación implementado en el hardware.
En el estado inicial t0,del que se parte en el ASM, lo primero que se hace es que se pone la señal
wr a uno lógico para garantizar que cuando termine el ciclo completo y vaya a empezar el próximo, en este solo se empezará la conversión cuando se ponga la señal wr a cero y eso será cuando la señal cargar tome el valor de uno lógico y una vez que sucede esto, se realizan las operaciones de inicialización de contadores y registros, pone a cero lógico las salidas wr (para iniciar la conversión A/D) y datact (para indicar a la PC que todavía no hay ningún dato que pueda ser transferido) y el estado presente pasa a ser t1.
En el estado t1 lo primero que se realiza es poner la señal wr a uno lógico para asegurar que no se quede en cero en caso de haber sido puesto a uno en algún estado anterior, ya que no es necesario mantenerla en cero para que el convertidor realice la conversión, sino que solamente se necesita mandarlo a que comience, y de esta forma una vez que se vaya a volver a convertir ya no se pierde un pulso de reloj porque solo es necesario ponerla a cero nuevamente. Después de esto se pregunta
por el estado de la interrupción y si es cero entonces el estado presente será t2, pero si no, para buscar eficiencia y tratar de no perder pulsos de reloj innecesariamente, entonces se pregunta por el estado de leer que de este ser cero entonces el estado presente se mantendría siendo t1, pero de lo contrario se compara si cont es mayor que cont2, para saber si hay alguna conversión que no se haya cargado todavía, si esto se cumple se carga algún dato en la salida para pasárselo a la PC, y el estado presente es t6. El proceso de cargar un dato en la salida no es explicado aquí ya que es el mismo que se realiza en el estado t4, así que esta será proporcionada cuando se aborde dicho
estado.
Figura III.2. Estado t0.
Al estado t2 se llega una vez que ya hubo una interrupción, así que ya en ese momento se sabe que lo que hay que hacer es cargar un registro con el valor de la entrada correspondiente a la conversión y para saber cuál es el que se debe cargar es que se usa el contador cont ya que dependiendo del valor de este, es el registro que se cargará. En el caso que dicho contador tiene valor cero, se indica que ya hay al menos un dato, poniendo datact a uno, se activa el inicio de la próxima conversión poniendo wr a cero, se incrementa a uno dicho contador y el estado presente es t9.Cuando dicho contador tiene valor uno o dos, se realizan las mismas operaciones que cuando tiene valor cero excepto que ya no se vuelve a poner datact a uno; y cuando este toma el valor tres solamente se carga el registro correspondiente y el estado presente es t4. En lo adelante cuando se haga referencia al proceso de cargar se tratará del descrito anteriormente.
En el estado t3 lo primero que se realiza es preguntar por el estado de la señal int que en caso de ser cero hay que esperar a que suba a uno, así que mientras tanto se pregunta por el estado de la señal leer y si este es uno es necesario esperar que baje así que el estado presente recibe t3, en el caso de que leer sea cero dataready recibe cero para indicar que esta esperando que leer suba a uno, en el caso que int es uno wr recibe cero para iniciar la próxima conversión y seguido a esto se pregunta por leer que si continua siendo uno el estado presente recibe t6, en caso contrario
dataready recibe cero y el estado presente es t1.
En el estado t4 si leer es cero se mantiene en el mismo estado esperando a que ese valor suba a uno y es entonces cuando dataready recibe uno indicando que hay un nuevo dato listo para ser recibido por parte de la PC. Después de esto se pregunta por el valor del contador cont2 pues este se usa para saber cual es el registro que corresponde ser cargado en la salida y por último el estado presente es t5.
Figura III.5. Estado t3.
Figura III.6. Estado t4.
En el estado t5 se pregunta por el valor de cont2 que de ser tres datact recibe cero y el estado presente es t8, si no se pregunta por el valor de leer que de ser uno el estado presente es t5, en el caso contrario dataready recibe el valor de cero y el estado presente es t4.
En t6 wr recibe uno, después de esto si int es cero el estado presente es t7, en caso contrario, si
leer es uno el estado presente es t6; si no, dataready recibe cero y el estado presente entonces es t1.
Figura III.7: Estado t5.
Figura III.8. Estado t6.
En el estado t7 se realiza la operación de cargar al igual que en el estado t2, con la diferencia de que a t2 se llega cuando hay una interrupción (int se hace cero) y leer es cero y a t7 cuando hay una interrupción y leer es uno. Por supuesto que cuando sale de estos estados, el estado presente no puede ser igual en t2 que en t7. En los casos que el contador cont es cero, uno o dos, el estado presente en t2 es t1 y en t7 es t3 y en el caso que es tres, en t2 el estado presente es t4 y en t7 es t13.
En el estado t8 se espera que la PC adquiera el último valor de outdata y lo indique al bajar cargar, o sea, que mientras cargar sea uno el estado presente es t8 y cuando baje es que ya adquirió el ultimo dato, así que por tanto dataready baja a cero y el estado presente es t0.
En el estado t9, si el estado de la señal int es uno, wr recibe uno y se pregunta por el estado de
leer, que de ser uno, el estado presente recibe t11, si no recibe t1. En el caso de que int sea cero, se pregunta por el estado de leer, en caso de que este tenga el mismo valor, el estado presente es t9, si no, se compara si cont es mayor que cont2. Si esto se cumple, se realiza el proceso de leer, similar al realizado en el estado t4, pero con la diferencia de que termina en el estado t10. Si el resultado de la comparación es falso, el estado presente es t16.
Figura III.10. Estado t8.
En t10 se pregunta primero por el estado de la señal int, si este es cero, se pregunta por el de la señal leer, si este es uno, el estado presente es t10, si no, dataready recibe cero y el estado presente recibe t9.En el caso que int sea uno, wr recibe cero y se pregunta por leer, que si también es uno, el estado presente recibe t11, si no, dataready recibe cero y el estado presente recibe t1. En el estado t11 wr recibe uno y se pregunta por el estado de int, si este es uno, se pregunta por el estado de la señal leer, que si también tiene el mismo valor, el estado presente recibe t11, de lo contrario recibe t1. En el caso de que int sea cero, se realiza el proceso de cargar, pero antes es necesario preguntar por el estado de leer, para en dependencia de este, saber cuales serian los estados a los cuales se llegaría. Los cuales son: si leer es cero y el contador cont es diferente de tres el estado presente es t9, si dicho contador tiene valor 3, el estado presente es t4 y si el estado de leer es uno y el contador es diferente de 3, el estado presente es t14, de lo contrario, el estado presente recibe t4.
Figura III.12. Estado t10.
En el estado t12, se pregunta por el estado de la señal int, si dicha señal es uno, el estado presente recibe t1, si no, se pregunta por el estado de la señal leer, que si es cero, dataready recibe cero, si no, entonces, si el contador cont es mayor que cont2 se realiza el proceso de leer y el estado presente recibe t3, de lo contrario, el estado presente recibe t16 y en caso que int es uno, el estado presente recibe t1.
Figura III.14. Estado t12.
En el caso de t13, si leer es uno el estado presente es t13, en el cual se mantiene esperando por que el estado de esta señal sea cero y cuando esto sucede dataready recibe cero y el estado presente recibe t4.
En el caso de t14, se pregunta por el estado de la señal int, si esta tiene valor uno se pregunta por
leer. Si es uno, el estado presente recibe t11, si no, recibe t1. En el caso que int es cero, se pregunta por leer, si es uno, el estado presente se mantiene siendo t14, si no, el estado presente recibe t9.
Figura III.16. Estado t14.
En el caso de t15, se pregunta por la interrupción. Si la misma se mantiene siendo uno, el estado presente recibe t15.Cuando se detecte la interrupción, se realiza el proceso de cargar y los estados a los que se llegan pueden ser t9 si el contador es diferente de tres y t13 si este tiene valor tres.
Y por último, el estado t16, en el cual se espera mientras que la interrupción sea cero, manteniéndose en el mismo hasta que esta tome el valor uno, entonces el estado presente recibe t15.
Figura III.18. Estado t16.
El diagrama ASM completo se muestra en los anexos.