Que tal buenos días/tardes/noches

.
Hace algunos días que vengo teniendo problemas con el código en ensamblador para controlar la velocidad de un motor con el pic16f84a mediante PWM. No he tocado el ensamblador en años y no recuerdo muy bien como se realizaba este tipo de control. Las velocidades son dependiendo la combinación de 3 push botton ya predeterminada, la cual es la siguiente:
0 x x = 0%
1 0 0 = 25%
1 0 1 = 50%
1 1 0 = 75%
1 1 1 = 100%
Pasando a 4 bits:
0 x x = 0 x x x = 0%
1 0 0 = 1 0 0 0 = 25%
1 0 1 = 1 0 1 0 = 50%
1 1 0 = 1 1 0 1 = 75%
1 1 1 = 1 1 1 1 = 100%
No requiere inversion de giro, solo el control de velocidad.
Sé que hay mucho sobre este tema en particular, y gracias a ello he podido recordar como se hacia este tipo de sintaxis, desafortunadamente aun tengo problemas con los retardos.
Recordando mas o menos como era la cuestion, he hecho dos opciones de código que harian la misma cosa, aunque en las dos no funciona.
OPCION 1: Llamo los retardos de forma intependiente para completar el tiempo deseado.
__CONFIG_CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
List p= f16F84A
INCLUDE < P16F84A.INC>
ORG 0
BSF STATUS, RP0
MOVLW B ´00000000´
MOVWF TRISA
CLRF TRISB
BCF STATUS,RP0
Inicio
IOO
BSF PORTB,0
CALL RETARDO (25u)
BCF SALIDA
MOVWF PORTB,0
CALL RETARDO (75u)
IOI
BSF PORTB,0
CALL RETARDO (50u)
BCF SALIDA
MOVWF PORTB,0
CALL RETARDO (50u)
IIO
BSF PORTB,0
CALL RETARDO (75u)
BCF SALIDA
MOVWF PORTB,0
CALL RETARDO (25u)
III
BSF SALIDA
CALL RETARDO (100u)
BCF SALIDA
OPCIÓN 2: Un codigo mas directo en donde utilizo los 4 bits anteriormente mencionados
__CONFIG_CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
List p= f16F84A
INCLUDE < P16F84A.INC>
ORG 0
BSF STATUS, RP0
MOVLW B ´00000000´
MOVWF TRISA
CLRF TRISB
BCF STATUS,RP0
Inicio
movf PortA,w
movwf B ´00000000´
btfss PORTB,2
clf PORTB,0
; Copiar bit(2) a la salida
rrf B ´00001000´,w
movwf PortB
Retardo(25)
; Copiar bit(1) a la salida
movf B´00001010´,w
movwf PortB
Retardo(25)
Copiar bit(0) a la salida
rlf B´00001101´,w
movwf PortB
Retardo(25)
; Copiar bit(1) a la salida
movf B´00001111´,w
movwf PortB
Retardo(25)
Goto Inicio
Seria de gran ayuda si pudiesen darme una mano con esta situación. Muchas gracias por leer