El problema parece ser si es mejor actualizar el valor de PWM en el controlador de interrupciones o en el programa principal.
La actualización en el programa principal puede confundir potencialmente la lógica PWM. Por ejemplo, si la cuenta regresiva es 0, y el programa principal reduce el valor de PWM por debajo del conteo actual, por ejemplo, ¿el comparador de "valor" se dispara cuando cuenta = valor? Si es así, puede obtener un pulso inesperadamente corto y un valor de salida incorrecto temporal. (Diferentes micros pueden reaccionar de manera diferente; no sé si este es un problema real con el PIC; pero existe la posibilidad).
Por lo tanto, puede ser mejor sincronizar las actualizaciones con el contador PWM; Esto se hace más fácilmente con un temporizador de interrupción. Luego, el programa principal puede generar un nuevo valor y establecer un indicador, de modo que la próxima interrupción del temporizador actualice el valor PWM de manera segura y borre el indicador. (La bandera puede ser simplemente la variable "nuevo valor pwm" que no sea 0).
Esto mantiene la mayor parte del trabajo fuera del controlador de interrupciones, que generalmente debería ser lo más corto posible.
Es posible que algunos de los ejemplos que estés estudiando no se molesten en recorrer tantos largos; ¡Los errores temporales en el brillo del LED probablemente no importan!