Paso 2: Usando el Timer1 para generar señales de 50 Hz
Haremos uso de timer1 junto con el módulo CCP como "Comparar, evento especial de gatillo". Todo esto va a suceder dentro del código.
Así que la idea es hacer esto para siempre:
1-carga timer1 con valores necesarios para generar el período más largo podría (104,9 ms).
2-carga el valor de "tiempo" dentro de registro del módulo CCP, coloque "1" en el pin de salida (RC2) e timer1.
3 - timer1 comenzará a contar hasta que alcanza el valor dentro de los registros PCC (fósforos el tiempo). PCCh pondrá su bandera de interrupción.
rutina de servicio de interrupción 4-interior, restablecer la bandera de interrupción del PCCh, cargar registros PCC con el valor "off-time" y fijó "0" en el pin de salida.
A lo largo de todos, debemos utilizar una variable que contiene el número de garrapatas que corresponde a 20 ms de período completo... se calcula como sigue:
Frecuencia más baja de timer1 (según lo calculado antes) = 9,53 Hz.
Mayor período de timer1 = ms 104,9.
así que ms 104,9 coincide con la señal final que es 65535 (porque tiene 16 bits de resolución)... entonces para 20 ms, ¿cuál es el número de pasos requerido?
N_20ms = (0.02 * 20000000) / (4 * 8) = 12500.
así que cuando el timer1 alcanza el número de garrapatas 12500, es ms 20! ¿Este es el valor de referencia que utilizaremos en nuestro software... entonces cuando queremos ciclos de trabajo diferentes, lo que debemos hacer?
para servicio al 50% el número de cuentas = 0.5 * 12500 y 20% = 0.2 * 12500 y así sucesivamente! la siguiente línea es para la clarificación:
número de garrapatas: 0___12500___65536
correspondiente período de tiempo: 0___20ms___ 104.9ms
Estamos listos para ir! todo lo que queda es el propio código.