Hola Bruno,
bcf 3,0 pone a 0 el bit status para que sea *2 exactamente y luego con el rlf rota hacia la izquierda y *2, muy buen post!! está muy bien explicado gracias!!!.
Yo lo que quiero es multiplicar por 6. Asi que si lo pongo 2 veces estaré multiplicando *4, y si pongo otro más ya sería 8, como podría hacerlo por 6?. Yo suponia que se puede hacer repitiendo el rlf, pero no se si habría una forma más rápida de hacer esto en menos líneas...
La idea es simple, es querer hacer un retardo fijo, mirando el valor del contador total perl y perh, multiplicando por un valor fijo, con lo cual, sea cual sea el valor del contador en relacion a grados sería siempre el mismo retardo. Si en 360º tarda X tiempo (valor de contadores), para 20º menos, 21.6º/360º= 0.06. Asi que es multiplicar 0,06 * el valor del contador.
Se saca de tiempo en hacer la interaccion 1us (4 instrucciones de reloj* us en hacer una instruccion, 4*0.25=1).
1*k*valor contador/incremento contador (100us). Así 1/100*k*valor contador. 0,001*k*contador.
k=6, 0,006*contador. Ya tendría ese valor, solo me hace falta multiplicar *6 para que haga ese retardo fijo, siempre a los mismos grados será, sea cual sea el valor del contador... Espero que ahora me entiendas.
Asi que supongo que poniendo:
fixed35 bcf 03,0
rlf perl,F ;
rlf perh,F ; *2
rlf perl,F ;
rlf perh,F ;*4
rlf perl,F ;
rlf perh,F ;*8
incf perl,F ; Less than 3509 rpm
incf perh,F
bucle2 nop
decfsz perl,F
goto bucle2
decfsz perh,F
goto bucle2
El problema es que yo quiero *6, y no se si hay alguna forma de hacerlo en menos intrucciones. *4 retardaría 14.4º, y *8 retardaría (0.01*
*360= 28.8º demasiados.
Ahora me quedó muy claro como funciona el rlf, y no sabia que bcf 03,0 era referente a status,C
Gracias.