Documente Academic
Documente Profesional
Documente Cultură
INSTRUCCIONES QUE MANEJAN REGISTROS Nemnicos y operandos ADDWF ANDWF CLRF CLRW COMF DECF DECFSZ INCF INCFSZ IORWF MOVF MOVWF NOP RLF RRF SUBWF SWAPF XORWF f,d f,d f --f,d f,d f,d f,d f,d f,d f,d f --f,d f,d f,d f,d f,d Descripcin Suma W y f AND W con f Borra f Borra W Complementa f Decrementa f Decrementa f, si es 0 salta Incrementa f Incrementa f, si es 0 salta OR entre W y f Mueve f Mueve W a f No opera Rota f a la izqda. a travs del carry Rota f a la dcha. a travs del carry Resta a f el reg. W Intercambia f XOR de W con f Ciclos 1 1 1 1 1 1 1 (2) 1 1 1 1 1 1 1 1 1 1 1 Flags C, DC, Z Z Z Z Z Z Ninguno Z Ninguno Z Z Ninguno Ninguno C C C, DC, Z Ninguno Z
INSTRUCCIONES QUE MANIPULAN BITS BCF BSF BTFSC BTFSS f,b f,b f,b f,b Borra bit de f Pone a 1 el bit de f Comprueba un bit de f y salta si es 0 Comprueba un bit de f y salta si es 1 1 1 1 (2) 1 (2) Ninguno Ninguno Ninguno Ninguno
INSTRUCCIONES DE CONTROL Y DE OPERANDOS INMEDIATOS ANDLW CALL CLRWDT GOTO IORLW MOVLW OPTION RETLW SLEEP TRIS XORLW k k k k k k k k --f k AND inmediato con W Llamada a subrutina Borra Watchdog Salto incondicional OR inmediato con W Mueve a W un valor inmediato Carga el registro OPTION Retorno y carga de W Pasa a estado de reposo Carga el registro OR exclusiva a W 1 2 1 2 1 1 1 2 1 1 1 Z Ninguno TO, PD Ninguno Z Ninguno Ninguno Ninguno TO, PD Ninguno Z
Suma W y f [label] ADDWF f,d d=0 d=1; 0 <= f <= 31 (W) + (f) --> (dest) C, DC, Z Suma el contenido del registro W y el registro "f". Si "d" es 0, el resultado se almacena en el registro W. Si "d" es 1 el resutado se almacena en el registro "f". ADDWF REG,0 Antes de la instruccin: Despus de la instruccin: W= 0x17 REF= 0xC2 W= 0xD9 REG= 0xC2
Ejemplo:
W AND f [label] ANDWF f,d d=0 d=1; 0 <= f <= 31 (W) AND (f) --> (dest) Z Realiza la operacin lgica AND entre el registro W y el registro "f". Si "d" es 0 el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en el registro "f". ANDWF REG,1 Antes de la instruccin: Despus de la instruccin: W=0x17 REG= 0xC2 W=0x17 REG= 0x02
Ejemplo:
ANDLW
W AND literal
[label] ANDWL k 0 <= k <= 255 (W) AND (k) --> (W) Z Realiza la operacin lgica AND entre el registro W y la constante "k". El resultado se almacena en el registro W. ANDLW 0x5F Antes de la instruccin: Despus de la instruccin: W= 0xA3 W= 0x03
Ejemplo:
Borra un bit [label] BCF f,b 0 <= f <= 31; 0 <= b <= 7; 0 --> (f < b >) Ninguno Borra el bit "b" del registro "f". BCF REG,7 Antes de la instruccin: Despus de la instruccin: REG = 0x0A REG = 0x47
Activa un bit [label] BSF f,b 0 <= f <= 31; 0 <= b <= 7; 1 --> (f < b >) Ninguno Activa el bit "b" del registro "f". BSF REG,0x0A Antes de la instruccin: Despus de la instruccin: REG = 0x0A REG = 0x8A
BTFSC
[label] BTFSC f,b 0 <= f <= 31; 0 <= b <= 7; Salto si (f < b >) = 0 Ninguno Si el bit "b" del registro "f" es 0, se salta una instruccin y se contina con la ejecucin. COM FALSE TRUE BTFSC REG,1 GOTO PROCESA_X PC= Direccin (COM_) SI REG <1> = 0 PC= Direccin (TRUE) SI REG <1> = 1 PC= Direccin (FALSE)
Ejemplo:
Test de bit y salto [label] BTFSS f,b 0 <= f <= 31; 0 <= b <= 7; Salto si (f < b >) = 1 Ninguno Si el bit "b" del registro "f" es 1, se salta una instruccin y se contina con la ejecucin. COM FALSE TRUE BTFSS REG,6 GOTO PROCESA_X PC= Direccin (COM_) SI REG <6> = 0 PC= Direccin (FALSE) SI REG <6> = 1 PC= Direccin (TRUE)
Ejemplo:
CALL
Salto a subrutina
[label] CALL k 0 <= k <= 255 (PC) + 1 --> stack; k --> PC Ninguno Salto a subrutina. La direccin de retorno se guarda en el stack. La constante "k" de 8 bits forma la direccin de salto y se carga en los bits <7:0> del PC. Los bits <10:9> del PC se cargan con los bits <6:5> del registro "STATUS". PC <8> se pone a 0. ORG CALL DESTINO Antes de la instruccin: Despus de la instruccin: PC = ORG PC = DESTINO
Ejemplo:
Borra un registro [label] CLRF f 0 <= f <= 32 00f --> (f); 1 --> Z Z Se borra el contenido del registro "f" y el flag Z de estado se activa. CLRF REG Antes de la instruccin: Despus de la instruccin: REG = 0x5A REG = 0x00 Z=1
Ejemplo:
Borra el registro W [label] CLRW Ninguno 00h --> W; 1 --> Z Z El registro de trabajo "W" se carga con 00h. El flag de Z se activa.
Ejemplo:
Borra el "watchdog" [label] CLRWDT Ninguno 00h --> WDT; 1 --> TO; 1 --> PD; TO, PD Esta instruccin borra tanto el "watchdog" como el prescaler. Los bits TO y PD del registro de estado se ponen a "1". CLRWDT Despus de la instruccin: Contador WDT = 0 Prescaler WDT = 0 Bit de estado TO = 1 Bit de estado PD = 1
Ejemplo:
Complementa f label COMF f,d 0 <= f <= 31; d = 0 d = 1 (f) --> (dest) Z El contenido del registro "f" se complementa. Si "d" es 0 el resultado "R" se almacena en el registro W. Si "d" es 1, el resultado "R" se almacena en el registro "f".
Ejemplo: DECF Sintaxis: Operandos: Operacin: Decremento de f [label] DECF f,d 0 <= f <= 31; d = 0 d = 1 (f) - 1 --> (dest)
Z Se decrementa en una unidad el contenido del registro "f". Si "d" es 0, el resultado se almacena en W. Si "d" es 1, el resultado se almacena en "f". DEC CONT, 1 Antes de la instruccin: Despus de la instruccin: CONT = 0x01 Z=0 CONT = 0x00 Z=1
Ejemplo:
Decremento y salto [label] DECFSZ f,d 0 <= f <= 32; d = 0 d = 1 (f) - 1 --> d; Salto si R = 0 Ninguno El contenido del registro "f" se decrementa. Si "d" es 0, el resultado "R" se coloca en el registro W. Si "d" es 1, el resultado "R" se coloca en el registro "f". Si R = 0, se salta la siguiente instruccin y se contina con la ejecucin. COM_ DECFSZ REG,O GOTO_NO_ES_0 PC = Direccin (COM_) REG = REG - 1 SI REG = 0 PC = Direccin CONTINUA SI REG != 0 PC = Direccin (COM_ + 1)
Ejemplo:
Salto incondicional [label] GOTO k 0 <= k <= 511 k --> PC --> <8:0> Ninguno
Descripcin:
Se trata de un salto incondicional. Los 9 bits de la constante "k" que forman la instruccin, se cargan en los bits <8:0> del PC y forman la direccin de salto. Los bits <10:9> del PC se cargan con los bits <6:5> del registro de estado. ORG GOTO DESTINO Antes de la instruccin: Despus de la instruccin: PC = 0 PC = DESTINO
Ejemplo:
Incremento de f [label] INCF f,d 0 <= k <= 31; d = 0 d = 1 (f) + 1 --> (dest) Z Incrementa en una unidad el contenido del registro "f". Si "d" es 0, el resultado se almacena en W. Si "d" es 1, el resultado se almacena en "f". INCF CONT,1 Antes de la instruccin: Despus de la instruccin: CONT = 0xFF Z=0 CONT = 0x00 Z=1
Ejemplo:
Incremento de f, si es 0 salta [label] INCFSZ f,d 0 <= f <= 31; d = 0 d = 1 (f) + 1 --> (dest); Salto si R = 0 Ninguno Incrementa en una unidad el contenido del registro "f". Si "d" es 0, el resultado se almacena en W. Si "d" es 1, el resultado se almacena en "f". Si R=0, se salta la siguiente instruccin y se contina con la ejecucin.
Ejemplo:
COM_ CONTINUA
INCFSZ REG,1 GOTO_NO_ES_0 PC = Direccin (COM_) CONT + 1 SI CNT = 0 PC = Direccin CONTINUA SI REG != 0 PC = Direccin (COM_ + 1)
W OR literal [label] IORLW k 0 <= f <= 255 (W).OR.(k) --> (W) Z Se realiza la funcin lgica OR entre el registro W y la contante "k". El resultado se almacena en el registro W. IORLW Ox35 Antes de la instruccin: Despus de la instruccin: W = 0x9A W = 0xBF
OR entre W y f [label] IORWF f,d 0 <= f <= 31; d = 0 d = 1 (W).OR.(f) --> (dest) Z Realiza la operacin lgica OR entre el registro W y el registro "f". Si "d" es 0 el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacen en el registro "f".
Ejemplo:
IORWF REG,0 Antes de la instruccin: Despus de la instruccin: RESULTADO = 0x13 W = 0x91 RESULTADO = 0x13 W = 0x93 Z=0
Mover a f [label] MOVF f,d 0 <= f <= 31; d = 0 d = 1 (f) --> (dest) Z El contenido del registro "f" se mueve al destino "d". Si "d" es 0, el destino es el registro w. Si "d" es 1, el destino es el propio registro "f". Esta posibilidad permite verificar dicho registro ya que el flag Z queda afectado. MOVF REG,0 Despus de la instruccin: W = REG
Ejemplo:
Carga un literal en W label MOVLW k 0 <= f <= 255 (k) --> (W) Ninguno El registro W se carga con el valor de 8 bits expresado mediante la literal "k". MOVLW 0x5A Despus de la instruccin: W = 0x5A
Ejemplo:
Ninguno Mueve el contenido del registro W al registro "f". MOVWF REG Antes de la instruccin: Despus de la instruccin: REG = 0xFF W = 0x4F REG = 0x4F W = 0x4F
NOP Sintaxis: Operandos: Operacin: Flags afectados: Descripcin: Ejemplo: OPTION Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:
No operar [label] NOP Ninguno No operar Ninguno No realiza operacin alguna. Consume un ciclo de instruccin. NOP Carga reg. OPTION [label] OPTION Ninguno (W) --> OPTION Ninguno El contenido del registro W se carga en el registro OPTION. Este es un registro de slo escritura donde se configura el funcionamiento del prescaler y el TMR0. OPTION Antes de la instruccin: Despus de la instruccin: W = 0x07 OPTION = 0x07
Ejemplo:
RETLW Sintaxis:
0 <= f <= 255 (k) --> (W); TOS --> PC Ninguno El registro W se carga con los 8 bits de la constante k. El PC se carga con el contenido de la cima stack (TOS): direccin de retorno. Esta instruccin consume dos ciclos. CALL TABLA . . ;contiene el offset ;de la tabla. ;Ahora W tiene el ;valor de la tabla ;W offset ;comienza tabla
Ejemplo:
TABLA
Rota f a la izquierda [label] RLF f,d 0 <= f <= 31; d = 0 d = 1 Rotacin a la izquierda de f C El contenido del registro "f" se rota una posicin a la izquierda. El bit de ms peso pasa al carry y el carry se introduce por el bit de menos peso de "f". Si "d" es 0, el resultado se coloca en el registro W. Si "d" es 1, el resultado queda en el registro "f". RLF REG1,0 Antes de la instruccin: Despus de la instruccin: REG1 = 11100110 C=0 REG1 = 11100110 W = 11001100 C=1
Ejemplo:
Rota f a la derecha [label] RRF f,d 0 <= f <= 31; d = 0 d = 1 Rotacin a la derecha C El contenido del registro "f" se rota a la derecha. El bit de menos peso de "f" pasa al flag carry. El carry se coloca en el bit de ms peso de "f". Si "d" es 0, el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en "f". RRF REG1 Antes de la instruccin: Despus de la instruccin: REG1 = 11100110 C=0 REG1 = 11100110 W = 01110011 C=0
Ejemplo:
Pasa a estado de reposo [label] SLEEP Ninguno ooh --> WDT; 0 --> WDT prescaler; 1 --> TO; 0 --> PD TO, PD, GPWUF Al salir, activa el bit de estado TO y borra el PD. El WDT y el prescaler se borran. Al entrar en el modo SLEEP, se detiene el oscilador. SLEEP Resta f - W [label] SUBWF f,d 0 <= f <= 32; d = 0 d = 1 (f) - (W) --> (dest) C, DC, Z
Descripcin:
Resta, por el mtodo del complemento a 2, el contenido del registro "f" menos el contenido del registro W. Si "d" es 0, el resultado se almacena en el registro W. Si "d" es 1, el resultado se almacena en el registro "f". Si el resultado es negativo, el carry se pone a 0. SUBWF REG,1 Antes de la instruccin: Despus de la instruccin: REG = 1 W=2 REG = 0xFF W = 0xFF
Ejemplo:
Intercambio de f [label] SWAPF f,d 0 <= f <= 31; d = 0 d = 1 (f<3:0>) --> (dest.<7:4>) (f<7:4>) --> (dest.<3:0>) Ninguno Los cuatro bits de ms peso del registro "f" se intercambian con los cuatro bits de menos peso del mismo registro. Si "d" es 0, el resultado se coloca en el registro W. Si "d" es 1, el resultado queda en el registro "f". SWAPF REG,0 Antes de la instruccin: Despus de la instruccin: REG = 0x5A REG = 0x5A W = 0xA5
Ejemplo:
Carga registro TRIS [label] TRIS f 5 <= f <= 7 (W) --> Registro TRIS "f" Ninguno El contenido del registro W se carga en uno de los tres registros TRIS (TRISA, TRISB, TRISC) segn "f" valga 5, 6 7 respectivamente. Los registros TRIS se emplean para configurar cada una de las puertas A, B C para que acten sus lneas como entrada o salida.
Ejemplo:
W XOR literal [label] XORLW k 0 <= k <= 255 (W).XOR.K --> (W) Z Realiza la funcin lgica OR exclusiva (EOR) entre el contenido del registro W y la constante "k" de 8 bits. El resultado se almacena en el registro W. XORLW 0xAF Antes de la instruccin: Despus de la instruccin: W = 0xB5 W = 0x1A
Ejemplo:
W XOR f [label] XORWF f,d 0 <= f <= 31; d = 0 d = 1 (W).XOR.(f) --> (dest.) Z Realiza la funcin lgica OR exclusiva (EOR) entre el contenido del registro W y el registro "f". Si "d" es 0, el resultado se almacena en el registro W. Si "d" es 1 el resultado se almacena en el registro "f". XORWF REG,1 Antes de la instruccin: Despus de la instruccin: REG = 0xAF W = 0xB5 REG = 0x1A W = 0xB5
Ejemplo: