Es una idea muy buena! No pense que podías modificarlo hasta ese punto...
El algoritmo que publiqué antes tiene 13 instrucciones asm que son las que generan las ondas. Esta que posteo ahora tiene 11(y podrían ser 10, pero no logro que el CCS utilice la instrucción decfsz para agilizar el decremento de PulsosEncoder) siempre y cuando a PulsosEnconder la declares como un int8.
Destaco que este algoritmo solo funciona para los pines RB5 y RB6.
void EnviaPulsosQuadrature(){
if(Sentido){
Otra_Der:
rotate_right(&Sequence,1);
PORTB= (Sequence & 0b01100000) | (PORTB & 0b10011111);
if(--PulsosEncoder!=0) goto Otra_Der;
}else{
Otra_Izq:
rotate_left(&Sequence,1);
PORTB= (Sequence & 0b01100000) | (PORTB & 0b10011111);
if(--PulsosEncoder!=0) goto Otra_Izq;
}
}
Y debo admitir, que fuera de la posibilidad que mencionaste, no exíste(por lo que estudié) manera de bajar el algoritmo de 10 instrucciones en assembler.
Adjunto el código assembler que genera de salida..(CCS Versión 4.058)
.................... void EnviaPulsosQuadrature(){
.................... if(Sentido){
0004: BTFSS 06.0
0006: BRA 0022
.................... Otra_Der:
.................... rotate_right(&Sequence,1);
0008: RRNCF 07,F
.................... Aux= PORTB;
000A: MOVFF F81,08
.................... Aux&=0b10011111;
000E: MOVLW 9F
0010: ANDWF 08,F
.................... PORTB= (Sequence & 0b01100000) | Aux;
0012: MOVF 07,W
0014: ANDLW 60
0016: IORWF 08,W
0018: MOVWF F81
.................... if(--PulsosEncoder!=0) goto Otra_Der;
001A: DECF 05,F
001C: BZ 0020
001E: BRA 0008
.................... }else{
0020: BRA 003A
.................... Otra_Izq:
.................... rotate_right(&Sequence,1);
0022: RRNCF 07,F
.................... Aux= PORTB;
0024: MOVFF F81,08
.................... Aux&=0b10011111;
0028: MOVLW 9F
002A: ANDWF 08,F
.................... PORTB= (Sequence & 0b01100000) | Aux;
002C: MOVF 07,W
002E: ANDLW 60
0030: IORWF 08,W
0032: MOVWF F81
.................... if(--PulsosEncoder!=0) goto Otra_Izq;
0034: DECF 05,F
0036: BZ 003A
0038: BRA 0022
.................... }
.................... }
003A: GOTO 011E (RETURN)
P.D: O acaso estas usando C18?
Saludos.