El ACCESS es por como el PIC18 busca en la memoria de datos. Si vas a una instruccion tenes esto:
INCF f,d,a
d, de destino sabes que puede ser W o F ( el registro )
Ahora "a" puede tomar 2 valores 0 (ACCESS) o 1 (BANKED)
segun como sea la instruccion el nucleo buscara de una u otra forma
Cuando a = 0 = ACCESS y f > 0x60
Se accede a los SFR, es decir los registros de los perifericos,nucleo,etc.
Si es a = 0 = ACCESS y f < 0x60
Se usa el acceso indirecto FSR2 para acceder, la diferencia esta que el valor f actua como un Offset, suponete que en FSR2 tenes 0x100 y f vale 0x20
Entonces vas a estar accediendo a la direccion 0x120
Si es a = 1 = BANKED
Ocurre otra cosa distinta, en el que el acceso de datos ahora esta dado por FSR2 y BSR , la memoria interna se encuentra dividida en 15 bancos, el ultimo banco contiene los SFR.
Con el registro BSR se puede seleccionar el banco y luego se usa FSR2 para seleccionar dentro de ese banco., Ejemplo BSR = 2 ( banco 2 - 0x200 a 02FF) y FSR2=0x20
Estarias accediendo a la direcicon de memoria 0x220
Y esto es la parte facil, ni hablar de USB en el que las memorias se comparten y estan protegidas entre uno y otro.
RLNCF es Rotar a la izquierda sin Carry, en los PIC16 solo existia RLF que era Rotar a la izquierda con carry, es decir se rotaba y y el carry estaba incluido en la rotacion, es decir eran 9 bits, no solo los 8 del registro., rotar a la izquierda es multiplicar por 2
Por que rotarlo ?
Por que las instrucciones en el PIC18 son de 16bits (2 bytes), para no perder alineacion el contador de programa mantiene siempre su ultimo bit en 0. Por lo que si yo quisiera moverme una sola instruccion mas, deberia sumar 2, si quisiera moverme 3 instrucciones mas adelante deberia sumarle 6 al contador de programa (Esto para instrucciones de 16bits, hay instrucciones de 32bits tmb )
MOVWF LATB, ACCESS
Es simple, solo muevo el dato a la salida del Puerto, en lso PIC18 en adelante, para escribir un puerto usas LATx, para leerlo usas PORTx
ADDWF PCL,F,ACCESS
Esto lo uso par una tabla, lo que hago es pasar ese offset que consegui de las llaves y se lo sumo al contador de programa. Es decir que le estoy diciendo que apunte a la direccion que le doy, cuando llega a esa direccion se encuentra con un RETLW de valor acorde a mi tabla
RETLW 0x11
Esta instruccion hace un RETURN pero ademas devuelve el valor 0x11 en este caso por W
Para que se entienda...
Supongamos que en el PORTA hay el valor 1010 0110 , segun el programa lo rota y lo guarda en W, quedando W= 0100 1101
Luego le hace una AND para solo obtener los bits que necesito quedando W = 0000 1100
LLamo a la tabla Y le suma el valor ese al contador de programas PCL, devolviendo estos resultados:
RETLW 0x11 ; Caso W = 0000 0000
RETLW 0x22 ; Caso W = 0000 0010
RETLW 0x44 ; Caso W = 0000 0100
RETLW 0x88 ; Caso W = 0000 0110
RETLW 0x55 ; Caso W = 0000 1000
RETLW 0x66 ; Caso W = 0000 1010
RETLW 0x99 ; Caso W = 0000 1100
RETLW 0xAA ; Caso W = 0000 1110
Luego eso que obtengo lo muevo a el puerto.
Segun el programa original si se tocaba la tecla de derecha se encendia PORTB,4 y PORTB,0 y todas las demas se ponian a 0.
Tu forma de hacerlo:
DER
BSF MOTOR3_1
BCF MOTOR3_2
BCF MOTOR1_1
BCF MOTOR1_2
BCF MOTOR2_1
BCF MOTOR2_2
BSF MOTOR4_1
BCF MOTOR4_2
GOTO MOTORES_P
Tranquilamente podrias haber realizado:
MOVLW B'00010001'
MOVWF LATB, ACCESS
Yo para no repetir ese MOVWF, decidi usar una tabla. de esa forma lo escribo una sola ves y no tengo tantos saltos.
Instrucciones tiene muchas mas, son casi que 3 hojas mas de instrucciones, incluso algunas cambian si es que se habilita el set extendido de instrucciones (solo conveniente para algunos casos en especial)
Todo lo que dije aca, esta explicado en el datasheet del PIC, en Memory Organization, explica todas las formas de acceso a memoria de datos y programas que posee el PIC.
Y uno de los ultimos capitulos es el Set de instrucciones, que aparece la tabla con todas las instrucciones + la explicacion de cada instruccion individual