El "reloj interno" es el oscilador incorporado que se suministra con muchas MCU, y su frecuencia puede no ser lo suficientemente precisa o estable para producir un generador de pulsos confiable.
Para hacer eso, se puede usar una fuente de temporización externa (cristal, oscilador de cristal, estándar de frecuencia atómica, etc.) con la precisión y estabilidad requeridas, y el período de pulso deseado y la frecuencia / frecuencia de repetición obtenidas a través de la manipulación de la MCU a través del software.
Por ejemplo, suponga que desea utilizar una MCU que puede admitir un reloj externo de 10 MHz, ejecute ciclos de ejecución de instrucciones de un solo reloj, que está trabajando en el ensamblador y que desea generar un pulso de 1 microsegundo de ancho con una tasa de repetición de 100 kHz.
Para hacer eso, cargaría un registro con un valor numérico correspondiente al ancho de pulso de salida que deseaba, otro con el retraso requerido entre el borde descendente del pulso y el borde anterior del siguiente pulso, y luego los contaría a los dos, secuencialmente, usando la fuente del reloj externo, hasta que ambos estuvieran vacíos.
Eso te daría un ciclo de la salida deseada, y cuando ambos contadores se redujeran a cero, los cargarías de nuevo y comenzarías de nuevo.
Una advertencia aquí es que las instrucciones de carga, decremento, comparación, salto e I / O (de hecho, todas de las instrucciones) toman tiempo para ejecutarse, por lo que estos tiempos deben tenerse en cuenta. para cuando se cargan los contadores con el ancho de pulso y los valores de velocidad de repetición para que los pulsos salgan bien.
También existe la posibilidad de que pueda utilizar los temporizadores de hardware internos de la MCU para realizar el trabajo; YMMV.