Solo para verificar el codigo que produce genere el asm, pero no se cuantos ciclos dura cada instruccion
Duran un ciclo cada una. El problema es la aplicacion. a muchos aplicaciones no les molesta. Solo para que entiendas lo que estas haciendo y los posibles problemas:
Suponete que tenes el puerto en 0x04 (display 3 encendido), es decir 0000 0100 , ejecutando esas instrucciones para encender el segundo display ocurriria esto:
1ra instruccion: 0000 0100
2da instruccion: 0000 0110
3ra instruccion: 0000 0010
Momentaneamente tenes los 2 activos, tal ves 1us o menos segun el clock. En un display en el cual manejas solo los anodos no creo que afecte en nada. no llegarian ni a encender creo.
Tambien tenes que ver que PIC estas trabajando. En tu caso es un PIC18, pero si es un PIC16 hacer eso puede traer otros problemas mas. El PIC18 cuando lee toma el valor del LATx ( este registro no esta conectado con la entrada del pin ) lo modifica en el nucleo y lo guarda.
En un PIC16 ocurre algo similar, nomas que usa el PORTx , ocurre que si haces esto:
bcf PORTAbits, 0, 0
bsf PORTAbits, 1, 0
bcf PORTAbits, 2, 0
Y tu diseño tiene una buena capacidad en sus pines vas a tener un error. ejemplo Supongamos que tenes algo conectado con una buena capacidad al pin PORTA,0 , tenes activo ese pin y luego ejecutas el codigo anterior. Ocurriria esto:
Antes de las instruccion: 0000 0001
1ra instruccion: 0000 0001 ( Intenta ponerlo a 0, es decir puso a 0 el tipo D, PERO por la capacidad en el pin la tension no baja rapido, ademas cuando lees, lees el PIN no el LATCH o valor que le diste de salida )
2da instruccion: El nucleo lee: 0000 0001 (no lee el tipo D, sino el PIN) , modifica 0000 0011 , escribe 0000 0011 (Se perdio el 0 anterior asi que vuelve a 1 en bit de antes)
3ra instruccion: 0000 0011
Por eso mismo tenes que tenerlo en cuenta. Es aplicable si no ocurren estas cosas, por eso mismo los PIC18 ya traen en LATx y usamos el PORTx para leer del pin.
Yo jamas tuve problemas pero por lo que lei en los foros de Microchip en los PIC16 en algunos casos era algo serio. de tal forma que todos los cambios se hacian en una "variable" y luego se pasaba la variable completa al puerto.