Para modificar el astable, abrimos el archivo AST_40K.asm (Descargar de acá) y vamos hasta la parte del programa principal:
Notamos que está dividido en 2 partes casi iguales, el tiempo en estado en alto, y el tiempo en estado en bajo. La primera parte comienza con la instrucción "bsf" que, debido a que el integrado esta funcionando a 8 MHz, dura 0,5 us. Esto ocurre porque cada instrucción, excepto las de salto de programa, duran 4 ciclos de reloj, por lo tanto: 1/8.000.000 Hz = 0,125 us -> 0,125 us x 4 = 0,5 us.
Después siguen 12 instrucciones iguales, "goto $+1". La instrucción "goto $" produce un salto a la misma posición de programa donde se encuentra en ese momento, pero agregandole "+1" salta a la siguiente instrucción. Como son instrucciones de salto duran el doble que una instrucción normal (1 us).
En esta primera parte tenemos en total 1 instrucción de 0,5 us y 12 de 1 us, lo que nos da una duración de 12,5 us. Aqui obtuvimos el estado en alto de nuestra señal astable, cuyo período será de 25 us, que es igual a una frecuencia de 40 KHz.
Si por ejemplo queremos cambiar la frecuencia a la mitad, todo lo que tenemos que hacer es duplicar las instrucciones de las 2 partes para que el período sea de 50 us:
Así obtuvimos que los tiempos de estado en alto y bajo fue de aproximadamente 24 us:
El período fue de aproximadamente 50 us, con una frecuencia de 20 KHz:
En el caso del monoestable, abrimos el archivo MST_5s.c (Descargar de acá) y vamos a la linea que dice "delay_ms (5000)":
Antes obteníamos una señal que duraba 5 segundos (5000 ms), pero vamos a cambiara a 1 segundo, así que cambiamos el "5000" por "1000":