Sunteți pe pagina 1din 15

INSTRUCCIONES MPASM PARA PICS

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

ADDWF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

ANDWF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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

Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

[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:

BCF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin: 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

BSF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin: Ejemplo:

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

Test de bit y salto

Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

[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:

Antes de la instruccin: Despus de la instruccin:

BTFSS Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

Antes de la instruccin: Despus de la instruccin:

CALL

Salto a subrutina

Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

[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:

CLRF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

CLRW Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

CLRW Antes de la instruccin: Despus de la instruccin: W = 0x5A W = 0x00 Z=1

CLRWDT Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

COMF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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)

Flags afectados: Descripcin:

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:

DECFSZ Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

Antes de la instruccin: Despus de la instruccin:

GOTO Sintaxis: Operandos: Operacin: Flags afectados:

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:

INCF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

INCFSZ Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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)

Antes de la instruccin: Despus de la instruccin:

IORLW Sintaxis: Operandos: Operacin: Flags afectados: Descripcin: Ejemplo:

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

IORWF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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

MOVF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

MOVLW Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

MOVWF Sintaxis: Operandos: Operacin:

Mover W a f label MOVWF f 0 <= f <= 31 (W) --> (dest)

Flags afectados: Descripcin: 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:

Retorno, carga W [label] RETWL k

Operandos: Operacin: Flags afectados: Descripcin:

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

ADDWF PC RETLW K1 RETLW K2 . . RETLW Kn

;Fin de la tabla W = 07 W = Valor de K8

Antes de la instruccin: Despus de la instruccin:

RLF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

RRF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

SLEEP Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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

Ejemplo: SUBWF Sintaxis: Operandos: Operacin: Flags afectados:

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:

SWAPF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

TRIS Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

TRIS PORTA Antes de la instruccin: Despus de la instruccin: W = 0xA5 TRISA = 0xA5

XORLW Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

XORWF Sintaxis: Operandos: Operacin: Flags afectados: Descripcin:

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:

S-ar putea să vă placă și