En basic no te puedo dar ejemplos. Pero el concepto es el mismo, vas a tener que usar un timer. Supongamos que queres un PWM con 4 bits de resolucion ( 0 - 15 )
Y la frecuencia del PWM sea de 1Khz, Entonces 1Khz tiene un periodo de 1ms, vos tenes que hacer 16 partes de eso es decir 1ms/16 = 62.5us cada seccion.
Entonces haces que tu timer genere una interrupcion cada 62.5us, utilizas un contador de cuantas veces entra y luego comparas, algo asi:
Interrupcion:
If PwmR > Contador Then SalidaR = 0 Else SalidaR = 1
If PwmG > Contador Then SalidaG = 0 Else SalidaG = 1
If PwmB > Contador Then SalidaB = 0 Else SalidaB = 1
Contador = Contador + 1
If Contador == 16 Then Contador = 0
Luego en tu programa solo cambias PwmR por un valor entre 0 y 15 y lo demas se encarga el timer
Espero que me entiendas
Hay mas cosas para mejorar, como que recien actualize PwmX cuando recien esta en 16 Contador, de esa forma no tenes una onda media rara a veces. Pero bueno eso depende de vos, del micro que estes usando ya que la frecuencia va a ser importante, etc.
PD: Es mas que obvio que no vas a hacer a 1Khz, por que las secciones te quedan muy chichas (62 us los cuales 1us es cada instruccion a 4Mhz y se la va a pasar en la interrupcion ) y eso que solo tenes 4 bits de resolucion. Si queres mas bits, supongamos de 8, debes pensar en una mayor frecuencia en tu micro y ademas una menor frecuencia de tu PWM ( Supongamos unos 200Hz o 100Hz )