43
Su amigable compañero el Barra Bas Repertorio 35 instrucciones Las 35 instrucciones ó mnemónicos de la gama media de Microchip las encontraremos resumidas en la siguiente tabla. w es el acumulador, f representa un registro cualquiera y C, DC, Zlos flags del registro STATUS. Instrucciones orientadas a registros MNEMÓNICO OPERANDOS DESCRIPCIÓN CÓDIGO OP BANDERAS NCIC NOTAS ADDWF f,d w + f d 00 0111 dfff ffff C, DC, Z 1 1,2 ANDWF f,d w AND f d 00 0101 dfff ffff Z 1 1,2 CLRF f 00 h f 00 0001 1fff ffff Z 1 2 CLRW - 00 h w 00 0001 0xxx xxxx Z 1 - COMF f,d Complemento de f d 00 1001 dfff ffff Z 1 1,2 DECF f,d f - 1 d 00 0011 dfff ffff Z 1 1,2 DECFSZ f,d f - 1 d (si es 0 salta) 00 1011 dfff ffff Ninguna 1(2) 1,2,3 INCF f,d f + 1 d 00 1010 dfff ffff Z 1 1,2 INCFSZ f,d f + 1 d (si es 0 salta) 00 1111 dfff ffff Ninguna 1(2) 1,2,3 IORWF f,d w OR f d 00 0100 dfff ffff Z 1 1,2 MOVF f,d f d 00 1000 dfff ffff Z 1 1,2 MOVWF f w f 00 0000 1fff ffff Ninguna 1 - NOP - No operación 00 0000 0xx0 0000 Ninguna 1 - RLF f,d Rota f izq por carry d 00 1101 dfff ffff C 1 1,2 RRF f,d Rota f dcha por carry d 00 1100 dfff ffff C 1 1,2 SUBWF f,d f - w d 00 0010 dfff ffff C,DC,Z 1 1,2 SWAPF f,d Intercambia nibbles de f d 00 1110 dfff ffff Ninguna 1 1,2 XORWF f,d w XOR f d 00 0110 dfff ffff Z 1 1,2 Instrucciones orientadas a bit MNEMÓNICO OPERANDOS DESCRIPCIÓN CÓDIGO OP BANDERAS NCIC NOTAS BCF f,b Pone a 0 bit b de registro f 01 00bb bfff ffff Ninguna 1 1,2 BSF f,b Pone a 1 bit b de registro f 01 01bb bfff ffff Ninguna 1 1,2 BTFSC f,b Salto si bit b de reg.f es 0 01 10bb bfff ffff Ninguna 1(2) 3 BTFSS f,b Salto si bit b de reg.f es 1 01 11bb bfff ffff Ninguna 1(2) 3

Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Embed Size (px)

Citation preview

Page 1: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Repertorio 35 instrucciones

Las 35 instrucciones ó mnemónicos de la gama media de Microchip las encontraremos resumidas en la siguiente tabla. w es el acumulador, f representa un registro cualquiera y C, DC, Zlos flags del registro STATUS.

Instrucciones orientadas a registros

MNEMÓNICO OPERANDOS

DESCRIPCIÓN CÓDIGO OP BANDERAS NCIC NOTAS

ADDWF f,d w + f → d 00 0111 dfff ffff C, DC, Z 1 1,2

ANDWF f,d w AND f → d 00 0101 dfff ffff Z 1 1,2

CLRF f 00 h → f 00 0001 1fff ffff Z 1 2

CLRW - 00 h → w 00 0001 0xxx xxxx Z 1 -

COMF f,d Complemento de f → d 00 1001 dfff ffff Z 1 1,2

DECF f,d f - 1 → d 00 0011 dfff ffff Z 1 1,2

DECFSZ f,d f - 1 → d (si es 0 salta) 00 1011 dfff ffff Ninguna 1(2) 1,2,3

INCF f,d f + 1 → d 00 1010 dfff ffff Z 1 1,2

INCFSZ f,d f + 1 → d (si es 0 salta) 00 1111 dfff ffff Ninguna 1(2) 1,2,3

IORWF f,d w OR f → d 00 0100 dfff ffff Z 1 1,2

MOVF f,d f → d 00 1000 dfff ffff Z 1 1,2

MOVWF f w → f 00 0000 1fff ffff Ninguna 1 -

NOP - No operación 00 0000 0xx0 0000 Ninguna 1 -

RLF f,d Rota f izq por carry → d 00 1101 dfff ffff C 1 1,2

RRF f,d Rota f dcha por carry → d 00 1100 dfff ffff C 1 1,2

SUBWF f,d f - w → d 00 0010 dfff ffff C,DC,Z 1 1,2

SWAPF f,d Intercambia nibbles de f → d 00 1110 dfff ffff Ninguna 1 1,2

XORWF f,d w XOR f → d 00 0110 dfff ffff Z 1 1,2

Instrucciones orientadas a bit

MNEMÓNICO OPERANDOS

DESCRIPCIÓN CÓDIGO OP BANDERAS NCIC NOTAS

BCF f,b Pone a 0 bit b de registro f 01 00bb bfff ffff Ninguna 1 1,2

BSF f,b Pone a 1 bit b de registro f 01 01bb bfff ffff Ninguna 1 1,2

BTFSC f,b Salto si bit b de reg.f es 0 01 10bb bfff ffff Ninguna 1(2) 3

BTFSS f,b Salto si bit b de reg.f es 1 01 11bb bfff ffff Ninguna 1(2) 3

Page 2: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Instrucciones con literales y de control

MNEMÓNICO OPERANDOS

DESCRIPCIÓN CÓDIGO OP BANDERAS NCIC NOTAS

ADDLW k w + k → w 11 111x kkkk kkkk C,DC,Z 1 -

ANDLW k w AND k → w 11 1001 kkkk kkkk Z 1 -

CALL k Llamada a subrutina k 10 0kkk kkkk kkkk Ninguna 2 -

CLRWDT - Borra temporizador del WDT 00 0000 0110 0100 TO,PD 1 -

GOTO k Ir a dirección k 10 1kkk kkkk kkkk Ninguna 2 -

IORLW k w OR k → w 11 1000 kkkk kkkk Z 1 -

MOVLW k k → w 11 00xx kkkk kkkk Ninguna 1 -

RETFIE - Retorno de una interrupción 00 0000 0000 1001 Ninguna 2 -

RETLW k Retorno con k en w 11 01xx kkkk kkkk Ninguna 2 -

RETURN - Retorno de una subrutina 00 0000 0000 1000 Ninguna 2 -

SLEEP - Modo Standby 00 0000 0110 0011 TO, PD 1 -

SUBLW k k - w → w 11 110x kkkk kkkk C,DC,Z 1 -

XORLW k w XOR k → w 11 1010 kkkk kkkk Z 1 -

Notas: 1. Al modificar un registro de E/S con una operación sobre él mismo (por ejemplo

MOVF PORTB,1), el valor utilizado es el que se halle presente en las patillas del PORTB. Por ejemplo, si el biestable tiene un "1" para una patilla configurada como entrada y se pone a nivel bajo desde el exterior, el dato se volverá a escribir como "0".

2. Si se ejecuta esta instrucción sobre el TMR0 y d=1, se borrará el conteo de la preescala asignada (preescaler), si está asignado al TMR0, pero no se borrará la preescala asignada en OPTION_REG, que controla Timer0.

3. Si se modifica el Contador de Programa PC o una condición de prueba es verdadera, la instrucción requiere dos ciclos máquina. El segundo ciclo se ejecuta como un NOP.

Page 3: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

En las tablas siguientes, por orden alfabético, veremos todos los datos de interés sobre las 35 instrucciones. Algunos son de poca importancia. En cambio otros, como la operación, la sintaxis, el comportamiento del registro STATUS y los ejemplos, son imprescindibles para comprender su funcionamiento. Aparte de estas 35 instrucciones, hay otro tipo de instrucciones usadas para simplificar la tarea de programar, y que generalmente están formadas por dos instrucciones básicas. Estas no las trataremos a fondo, pero las veremos en un resumen después de comprender el funcionamiento de las 35 instrucciones básicas.

ADDLW ADDLW

ADD Literal to w

Operación w + k → w

Sintaxis [Etiqueta] ADDLW k

Operadores 0 < k < 255

Ciclos 1

OPCODE 11 111x kkkk kkkk

Descripción Suma el contenido del registro w al literal k, y almacena el resultado en w.Si se produce acerreo el flag C se pone a "1".

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X X X

C Se pone a 1 si se produce un Acarreo desde el bit de mayor peso. DC Se pone a 1 si se genera un Acarreo del bit 3 al bit 4. Z Se pone a 1 si el resultado de la operación es cero.

EJEMPLO: ADDLW 0x15 Si antes de la instrucción: w = 10h = 0001 0000 b Al ejecutarse la instrucción w = 10 h + 15 h = 25 h w = 0001 0000 b + 0001 0101 b = 0010 0101 b 00010000b 00010101b 0010 0101 b

Page 4: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

ADDWF ADDWF

ADD w to F

Operación w + f → d

Sintaxis [Etiqueta] ADDWF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

OPCODE 00 0111 dfff ffff

Descripción Suma el contenido del registro w al contenido del registro f, y almacena el resultado en w si d = 0, y en el registro f si d = 1.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X X X

C Se pone a 1 si se produce un Acarreo desde el bit de mayor peso DC Se pone a 1 si se genera un Acarreo del bit 3 al bit 4. Z Se pone a 1 si el resultado de la operación es cero

EJEMPLO: ADDWF FSR,0 Si antes de la instrucción. w = 17 h y FSR = C2 h como d=0 Al ejecutarse: w = 17 h + C2 h = D9 h FSR = C2 h 00010111b 11000010b 1101 1001 b

ANDLW

ANDLW

AND Literal and w

Operación w AND k → w

Sintaxis [Etiqueta] ANDLW k

Operadores 0 < f < 255

Ciclos 1

OPCODE 11 1001 kkkk kkkk

Page 5: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Descripción Efectúa la operación AND lógico entre el contenido del registro w y el literal k, y almacena el resultado en w. Esta instrucción realiza la operación AND bit a bit.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la operación es cero

EJEMPLO: ANDLW 0x5F Si antes de la instrucción. w = A3 h Al ejecutarse: w = 0101 1111 b AND 1010 0011 b = 0000 0011 b = 03 h 01011111b 10100011b 0000 0011 b

ANDWF

ANDWF

AND w with F

Operación w AND f → d

Sintaxis [Etiqueta] ANDWF f,d

Operadores 0< f <127 d [0,1]

Ciclos 1

OPCODE 00 0101 dfff ffff

Descripción

Efectúa la operación AND lógico entre el contenido del registro w y el contenido del registro f, y almacena el resultado en w si d = 0, y en f si d = 1. Esta instrucción realiza la operación AND bit a bit.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la operación es cero

EJEMPLO: ANDWF FSR,1 Si antes de la instrucción. w = 17 h = 0001 0111 b y FSR = C2 h = 1100 0010 h Al ejecutarse: w = 17 h = 0001 0111 b

Page 6: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

FSR = 0001 0111 b AND 1100 0010 b = 0000 0010 b = 02 h 00010111b 11000010b 0000 0010 b

BCF

BCF

Bit Clear F

Operación 0 → (f<b>)

Sintaxis [Etiqueta] BCF f,b

Operadores 0< f <127 0 < b < 7

Ciclos 1

OPCODE 01 00bb bfff ffff

Descripción Pone a cero el bit número b del registro f.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: BCF FLAG_REG, 7 Si antes de la instrucción el registro: FLAG_REG = C7 h = 1100 0111 b Al ejecutarse la instrucción, el registro queda con el valor: FLAG_REG = 47b = 0100 0111 b

BSF BSF

Bit Set F

Operación 1 → (f<b>)

Sintaxis [Etiqueta] BSF f,b

Operadores 0< f <127 0 < b < 7

Ciclos 1

Page 7: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

OPCODE 01 11bb bfff ffff

Descripción Pone a 1 el bit b del registro f

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: BSF FLAG_REG, 7 Si antes de la instrucción el registro tiene el valor: FLAG_REG = 0A h = 0000 1010 b Al ejecutarse la instrucción, el registro queda con el valor: FLAG_REG = 8A h = 1000 1010 b

BTFSC BTFSC

Bit Test, Skip if Clear

Operación Salta si (f<b>) = 0

Sintaxis [Etiqueta] BTFSC f,b

Operadores 0 < f < 127 0 < b <7

Ciclos 1 (2)

OPCODE 01 10bb bfff ffff

Descripción Si el bit número b del registro f es cero, la instrucción que sigue a ésta se ignora y se trata como un NOP (skip). En este caso, y sólo en este caso, la instrucción BTFSC precisa dos ciclos para ejecutarse.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: INICIO BTFSC FLAG,1 ES_1 GOTO PROCESO ES_0 Si antes de la instrucción. PC = dirección INICIO Al ejecutarse: if FLAG<1> = 0, PC = dirección ES_0 y seguirá la ejecución del programa.

Page 8: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

if FLAG<1> = 1, PC = dirección ES_1 y el programa continuará en PROCESO

BTFSS

BTFSS

Bit Test, Skip if Set

Operación Salta si (f<b>) = 1

Sintaxis [Etiqueta] BTFSS f,b

Operadores 0 < f < 127 0 < b <7

Ciclos 1 (2)

OPCODE 01 11bb bfff ffff

Descripción Si el bit número b del registro f está a 1, la instrucción que sigue a ésta se ignora y se trata como un NOP (skip). En este caso, y sólo en este caso, la instrucción BTFSS precisa dos ciclos para ejecutarse.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: INICIO BTFSS FLAG,1 ES_0 GOTO PROCESO ES_1 Si antes de la instrucción. PC = dirección INICIO Al ejecutarse: if FLAG<1> = 0, PC = dirección ES_0 y el programa continuará en PROCESO. if FLAG<1> = 1, PC = dirección ES_1 y seguirá la ejecución del programa.

CALL

CALL

Subrutine Call

Operación PC + 1 → TOS k → PC <10:0> PCLATCH (<4:3>) → PC (<12,11>)

Page 9: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Sintaxis [Etiqueta] CALL k

Operandos 0 = k = 2047

Ciclos 2

OPCODE 10 0kkk kkkk kkkk

Descripción

Salvaguarda la dirección de vuelta en la Pila y después llama a la subrutina situada en la dirección cargada en el PC. El modo de cálculo de la dirección efectiva difiere según la familia PIC utilizada. También hay que posicionar PA2, PA1 y PA0 (PIC 16C5X) o el registro PCLATCH (En los demás PIC) antes de ejecutarse la instrucción.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: INICIO CALL SUB_1 Si antes de la instrucción: PC = dirección INICIO Al ejecutarse: PC = dirección SUB_1 TOS = dirección INICIO +1

CLRF CLRF

Clear f

Operación 00 h → f 1 → Z

Sintaxis [Etiqueta] CLRF f

Operadores 0 < f < 127

Ciclos 1

OPCODE 00 0001 1fff ffff

Descripción Se borra el contenido del registro f y el flag Z se activa

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - 1 - -

Z Se pone a 1 si el resultado de la operación es cero

Page 10: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

EJEMPLO: CLRF REG Si antes de la instrucción: REG = 5A h Al ejecutarse: REG = 00 h flag Z = 1

CLRW CLRW

Clear w

Operación 00 h → w 1 → Z

Sintaxis [Etiqueta] CLRW

Operadores No tiene

Ciclos 1

OPCODE 00 0001 0000 0011

Descripción El registro de trabajo w se carga con 00h. El flag Z se pone a 1

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - 1 - -

Z Se pone a 1 si el resultado de la operación es cero EJEMPLO CLRW Si antes de la instrucción. w= 5Ah Al ejecutarse: w = 00 flag Z = 1

CLRWDT

CLRWDT

Clear watchdog Timer

Operación 00 h → WDT 1 → T0# 1 → PD#

Page 11: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Sintaxis [Etiqueta] CLRWDT

Operadores No tiene

Ciclos 1

OPCODE 00 0000 0110 0100

Descripción Se borra tanto el registro WDT (watchdog) como su preescaler. Los bits T0# y PD# del registro de estado se ponen a "1".

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - 1 1 - - -

T0# Se pone a 1 cuando se ejecuta la instrucción CLRWDT o SLEEP. Se pone a 0 si el temporizador watchdog se desborda PD# Se pone a 1 cuando se ejecuta la instrucción CLRWDT o SLEEP EJEMPLO CLRWDT Si antes de ejecutarse la instrucción WDT = ? Al ejecutarse: WDT = 00 h Preescaler WDT = 0 bit de estado T0 = 1 bit de estado PD = 1

COMF

COMF

Complement f

Operación Complemento de f → d

Sintaxis [Etiqueta] COMF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

OPCODE 00 1001 dfff ffff

Descripción Hace el complemento del contenido del registro f bit a bit. El resultado se almacena en el registro f si d=1 y en el registro w si d=0, en este caso f no varía.

Page 12: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la operación es cero

EJEMPLO: COMF REG1,0 Si antes de la instrucción: REG1 = 13 h como d= 0 Al ejecutarse: REG1 = 13 h = 0001 0011 b w = EC h = 1110 1100 b flag Z = 0 00010011b 1110 1100 b

DECF

DECF

Decrement f

Operación f - 1 → d

Sintaxis [Etiqueta] DECF f,d

Operadores 0< f <127 d [0,1]

Ciclos 1

OPCODE 00 0011 dfff ffff

Descripción Se decrementa el contenido del registro f en una unidad. El resultado se almacena en f si d=1 y en w sid=0, en este caso f no varía.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la operación es cero

EJEMPLO: DECF CNT,1 Si antes de la instrucción: CNT = 01 h Z = 0 Al ejecutarse: CNT = 00 h bit Z = 1

Page 13: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

DECFSZ DECFSZ

Decrement f , Skip if 0

Operación f - 1 → d, salta si resultado = 0

Sintaxis [Etiqueta] DECFSZ f,d

Operadores 0< f <127 d [0.1]

Ciclos 1 (2)

OPCODE 00 1011 dfff ffff

Descripción

Decrementa el contenido del registro f en una unidad, el resultado se almacena en f si d=1 y en w si d=0, en este caso, f no varía. Si el resultado es cero, se ignora la siguiente instrucción y, en ese caso la instrucción tiene una duración de dos ciclos.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: INICIO DECFSZ CNT,1 GOTO LOOP CONTINUAR si antes de la instrucción: PC = dirección INICIO Al ejecutarse: CNT = CNT -1 Si CNT = 0 entonces PC = dirección CONTINUAR Si CNT no = 0 entonces PC = dirección INICIO + 1

GOTO GOTO

Unconditional Branch

Operación k → PC <10:0> (PCLATH <4:3>) → (PC <12:11>)

Sintaxis [Etiqueta] GOTO k

Operadores 0 < k < 2047

Ciclos 2

Page 14: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

OPCODE 10 1kkkk kkkk kkkk

Descripción

Salto incondicional, normalmente se utiliza para llamar a la subrutina situada en la dirección que se carga en PC. El modo de cálculo de la instrucción carga desde el bit 0 al 10 de la constante k en el PC y los bits 3 y 4 del registro PCLATH en los 11 y 12 del PC

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: GOTO SEGUIR Al ejecutarse: PC = dirección SEGUIR

INCF

INCF

Increment f

Operación f + 1 → d

Sintaxis [Etiqueta] INCF f,d

Operadores 0 < f < 127 d [0,1] f + 1 → d

Ciclos 1

OPCODE 00 1010 dfff ffff

Descripción Se incrementa en una unidad el contenido del registro f, si d=1 el resultado se almacena en f, si d=0 el resultado se almacena en w, en este caso el resultado de f no varía.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la operación es cero al haber desbordamiento

EJEMPLO: INCF CNT,1 Si antes de la instrucción: CNT = FF h flag Z = 0

Al ejecutarse: FF h + 1 h = 00 h CNT = 00 flag Z = 1

Page 15: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

INCFSZ

INCFSZ

Increment f, SkIP if 0

Operación f +1 → d, salta si resultado = 0

Sintaxis [Etiqueta] INCFSZ f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1 (2)

OPCODE 00 1111 dfff ffff

Descripción

Incrementa el contenido del registro f en una unidad, el resultado se almacena de nuevo en f si d=1, y en w sid=0, en este caso, f no varía. Si el resultado es cero, se ignora la siguiente instrucción y, en ese caso la instrucción tiene una duración de dos ciclos.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: INICIO INCFSZ CNT,1 GOTO SALTO CONTINUAR Si antes de la instrucción: PC = dirección INICIO Al ejecutarse: CNT = CNT+1 Si CNT = 0 Entonces PC = dirección CONTINUAR Si CNT no = 0 Entonces PC = dirección INICIO + 1

IORLW IORLW

Inclusive OR Literal with w

Operación w OR k → w

Sintaxis [Etiqueta] IORLW k

Page 16: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Operadores 0 < k < 255

Ciclos 1

OPCODE 11 1000 kkkk kkkk

Descripción Se realiza la operación lógica OR entre el registro w y el literal k. El resultado se almacena en el registro w. Esta instrucción realiza la operación OR bit a bit.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la operación es cero.

EJEMPLO: IORLW 0x35 Si antes de la instrucción: w = 9A h Al ejecutarse: w = 1001 1010 b + 0011 0101 b = 1011 1111 b = BF h 10011010b 00110101b 1011 1111 b

IORWF

IORWF

Inclusive OR w with f

Operación w OR f → d

Sintaxis [Etiqueta] IORWF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

OPCODE 00 0100 dfff ffff

Descripción

Efectúa la operación lógica OR entre el contenido del registro w y el contenido del registro f, y almacena el resultado en f si d=1 y en w si d=0. Esta instrucción realiza la operación OR bit a bit.

Page 17: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la operación es cero. EJEMPLO: IORWF RESUL,0 Si antes de la instrucción RESUL = 13 h = 0001 0011 b w = 91 h = 1001 0001 b Al ejecutarse: RESUL= 0001 0011 b OR 1001 0001 b = 1001 0011 b = 93 h 00010011 10010001b 1001 0011 b

MOVLW MOVLW

Move literal to w

Operación k → w

Sintaxis [Etiqueta] MOVLW k

Operadores 0 < f < 255

Ciclos 1

OPCODE 11 00xx kkkk kkkk

Descripción El registro w se carga con el valor de 8 bits del literal k

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

EJEMPLO: MOVLW 0x5A Al ejecutarse: w = 5A h

Page 18: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

MOVF MOVF

Move f

Operación f → d

Sintaxis [Etiqueta] MOVF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

OPCODE 00 10000 dfff ffff

Descripción

El contenido del registro f se carga en el registro destino dependiendo del valor de d. Si d=0 el destino es el registro w, si d=1 el destino es el propio registrof. Esta instrucción permite verificar dicho registro ya que el flag Z queda afectado.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la operación es cero.

EJEMPLO: MOVF FSR,0 Al ejecutarse: w = al valor del FSR

MOVWF MOVWF

Move w to f

Operación w → f

Sintaxis [Etiqueta] MOVWF f

Operadores 0 < f < 127

Ciclos 1

OPCODE 00 0000 1fff ffff

Descripción Mueve el contenido del registro w al registro f

Page 19: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: MOVWF OPCION Si antes de la instrucción: OPCION = FF h w = 4F h Al ejecutarse: OPCION = 4F h w = 4F h

NOP

NOP

No operation

Operación no operación

Sintaxis [Etiqueta] NOP

Operadores No tiene

Ciclos 1

OPCODE 00 0000 0xx0 0000

Descripción No realiza operación alguna, pero sirve para consumir un ciclo de instrucción, equivalente a 4 de reloj.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: Si usamos un cristal de cuarzo de 4 Mhz en el oscilador, podremos obtener un retardo igual a un microsegundo por cada instrucción NOP que insertemos en el código del programa: RETARDO NOP NOP NOP RETURN Cada vez que llamemos a la subrutina RETARDO, obtendremos 3 microsegundos de demora.

Page 20: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

RETFIE RETFIE

Return from Interrupt

Operación TOS → PC 1 → GIE

Sintaxis [Etiqueta] RETFIE

Operadores No tiene

Ciclos 2

OPCODE 00 0000 0000 1001

Descripción Carga el PC con el valor que se encuentra en la parte alta de la Pila, asegurando así la vuelta de la interrupción. Pone a 1 el bit GIE , con el fin de autorizar de nuevo que se tengan en cuenta las interrupciones.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: RETFIE Al ejecutarse: PC = TOS GIE = 1

RETLW RETLW

Retur with Literal in w

Operación k → w; TOS → PC

Sintaxis [Etiqueta] RETLW k

Operadores 0 < k < 255

Ciclos 2

OPCODE 11 01xx kkkk kkkk

Descripción Carga el registro w con el literal k, y después carga el PC con el valor que se encuentra en la parte superior de la PILA, efectuando así un retorno de subrutina.

Page 21: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: MOVLW 0x07 ;Se carga 07 h en w CALL TABLA ;Tabla de valores ... ;w contiene en valor recogido ... TABLA ADDWF PC ;Se añade a PC el desplazamiento (offset) de w RETLW k1 ;Nueva Tabla RETLW k2 ... ... ... RETLW kn ;Fin de tabla Al ejecutarse la instrucción w = toma el valor de k7

RETURN

RETURN

Return from Subroutine

Operación TOS → PC

Sintaxis [Etiqueta] RETURN

Operadores No tiene

Ciclos 2

OPCODE 00 0000 0000 1000

Descripción Carga el PC con el valor que se encuentra en la parte superior de la PILA, efectuando así un retorno de subrutina

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: RETURN

Page 22: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

RLF RLF

Rotate Left f through Carry

Operación

Sintaxis [Etiqueta] RLF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

OPCODE 00 1101 dfff ffff

Descripción

Rotación de un bit a la izquierda del contenido del registro f, pasando por el bit de acarreo C, desde los bits menos significativos a los más significativos. El bit D7 pasa al CARRY del registro STATUS, el contenido del CARRY pasa al D0, el D0 al D1, etc. Es como si multiplicáramos por dos el contenido del registro. Si d=1 el resultado se almacena en f, si d=0 el resultado se almacena en w.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - X

EJEMPLOS: Si tenemos el registro VALOR = 0000 0001 b y aplicamos la instrucción RLF VALOR,1 Entonces el resultado será VALOR = 0000 0010 b y el bit C = 0. Si tenemos el registro VALOR = 1110 0110 b y aplicamos la instrucción RLF VALOR El resultado será VALOR = 1100 1100 b y el bit C = 1. Si antes de la instrucción REG1 = 1110 0110 b y flag C = 0 y aplicamos la instrucción RLF REG1,0, como d = 0 el resultado queda en w, al ejecutarse: REG1 = 1110 0110 b w = 1100 1100 b flag C = 1

Page 23: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

RRF

RRF

Rotate Right f through Carry

Operación

Sintaxis [Etiqueta] RRF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

OPCODE 00 1100 dfff ffff

Descripción

Rotación de un bit a la derecha del contenido del registro f, pasando por el bit de acarreo C, desde los bits más significativos a los menos significativos. El bit C del registro STATUS pasa al D7, el D0 pasa al bit C, el D1 al D0, etc. Es como si dividiéramos por dos el contenido del registro. Si d=1 el resultado se almacena en f, si d=0 el resultado se almacena en w

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - X

EJEMPLOS: Si tenemos el registro VALOR = 0000 0001 b y aplicamos la instrucción RRF VALOR,1 Entonces el resultado será VALOR = 0000 0000 b y el bit C = 1. Si tenemos el registro VALOR = 1000 0000 b y aplicamos la instrucción RRF VALOR,1 El resultado será VALOR = 0100 0000 b y el bit C = 0. Si antes de la instrucción, REG1 = 1110 0110 b y flag C = 1 y aplicamos la instrucción RRF REG1,0, como d = 0 el resultado queda en w, al ejecutarse: REG1 = 1110 0110 b w = 0111 0011 b flag C = 0

Page 24: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

SLEEP SLEEP

Sleep

Operación

00 h → WDT 0 → WDT prescaler 1 → TO# 0 → PD#

Sintaxis [Etiqueta] SLEEP

Operadores No tiene

Ciclos 1

OPCODE 00 0000 0110 0011

Descripción

Pone al circuito en modo Sleep (bajo consumo) con parada del oscilador. Pone a 0 el flag PD# (Power Down) y el flag TO# (Timer Out) se pone a 1. Se puede salir de este estado por:

1. Activación de MCLR para provocar un Reset. 2. Desbordamiento del watchdog si quedó operativo en el modo

reposo. 3. Generación de una interrupción que no sea TMR0 ya que ésta se

desactiva con la instrucción SLEEP.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z# DC C

- - - 1 0 - - -

TO Se pone a 1 al ejecutar la instrucción SLEEP o CLRWDT PD Se pone a 0 al ejecutar la instrucción SLEEP. EJEMPLO: SLEEP

SUBLW

SUBLW

Subtract w from Literal

Operación k - w → w

Sintaxis [Etiqueta] SUBLW k

Operadores 0 < k < 255

Ciclos 1

Page 25: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

OPCODE 11 110x kkkk kkkk

Descripción Resta en complemento a dos del contenido del literal kel contenido del registro w, y almacena el resultado enw.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X X X

Z Se pone a 1 si el resultado de la operación es cero DC Se pone a 1 si se genera un acarreo del bit 3 al grupo de 4 bits superior C Se pone a 1 si se genera un acarreo del bit de mayor peso. EJEMPLO: SUBLW 0x02 ;k - w → w, 02 h - w → w a) Si antes de la instrucción w = 01 h y flag C = ? al ejecutarse: 02 h - 01 h = 01 h w = 01 h flag C = 1 ; el resultado es positivo b) Si antes de la instrucción w = 02 h, flag C = ? y flag Z = ? al ejecutarse: 02 h - 02 h = 00 h w = 00 h flag C = 1 flag Z = 1 ;el resultado es cero c) Si antes de la instrucción w = 03 h y flag C = ? al ejecutarse: 02 h - 03 h = -01 h = - 0000 0001 b C1(0000 0001 b)=1111 1110 b; 1111 1110 b + 1 b = 1111 1111 b = FF h w = FF h flag C = 0 ; el resultado es negativo

SUBWF

SUBWF

Subtract w from f

Operación f - w → d

Sintaxis [Etiqueta] SUBWF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

OPCODE 00 0010 dfff ffff

Descripción Resta en complemento a dos el contenido del registro fmenos el contenido del registro w almacena el resultado en w si d=0 y en f si d=1.

Page 26: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X X X

Z Se pone a 1 si el resultado de la operación es cero DC Se pone a 1 si se genera un acarreo del bit 3 al grupo de 4 bits superior C Se pone a 1 si se genera un acarreo del bit de mayor peso. EJEMPLO: SUBWF REG1,1 ;f - w → f, REG1 - w → REG1 a) Si antes de la instrucción, REG1 = 03 h, w = 02 h y flag C = ?, al ejecutarse: 03 h - 02h = 01 h REG1 = 01h w = 02 h flag C = 1 ; el resultado es positivo b) Si antes de la instrucción, REG1 = 02 h, w = 02 h y flag C = ?, al ejecutarse: 02 h - 02h = 00 h REG1 = 00h w = 02 h flag C = 1 fal0 Z = 1 ; el resultado es cero c) Si antes de la instrucción, REG1 = 01 h, w = 02 h y flag C = ?, al ejecutarse: 01 h - 02 h = -01 h = - 0000 0001 b C1(0000 0001 b)=1111 1110 b; 1111 1110 b + 1 b = 1111 1111 b = FF h REG1 = FF h w = 02 h flag C = 0 ; el resultado es negativo

SWAPF SWAPF

Swap Nibbles in f

Operación (f<3:0>) → (d <7:4>) (f<7:4>) → (d <3:0>)

Sintaxis [Etiqueta] SWAPF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

OPCODE 00 1110 dfff ffff

Descripción Los cuatro bits de más peso del registro f se intercambian con los 4 bits de menos peso del mismo registro. Si d=0 el resultado se almacena en w, si d=1el resultado se almacena en f.

Page 27: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: SWAPF REG1,0 Si antes de la instrucción: REG1 = A5 h = 1010 0101 h Como d=0 el resultado se almacenará en w Al ejecutarse la instrucción: REG1 = A5 h = 1010 0101 b w = 5A h = 0101 1010 b

XORLW

XORLW

Exclusive OR Literal with k

Operación w XOR k → w

Sintaxis [Etiqueta] XORLW k

Operadores 0 < f < 255

Ciclos 1

OPCODE 11 1010 kkkk kkkk

Descripción Realiza la función OR-Exclusiva entre el contenido del registro w y la constante k de 8 bits. El resultado se almacena en w. Esta instrucción realiza la operación EXOR bit a bit.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

Z Se pone a 1 si el resultado de la última operación es cero. EJEMPLO: XORLW 0xAF Si antes de la instrucción: w = 1011 0101 b = B5 h Al ejecutarse la instrucción: w = 1011 0101 b → 1010 1111 b = 0001 1010 b = 1A h 1011 0101 b 1010 1111 b 0001 1010 b

Page 28: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

XORWF XORWF

Exclusive OR w with f

Operación w XOR f → d

Sintaxis [Etiqueta] XORWF f,d

Operadores 0 < f < 127 d [0,1]

Ciclos 1

Descripción

Realiza la función OR-Exclusiva entre el contenido del registro w y el contenido del registro f, y almacena el resultado en f si d=1 y en w si d=0. Esta instrucción realiza la operación EXOR bit a bit.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - X - -

EJEMPLO: XORWF REG1,1 Si antes de la instrucción: REG1 = AF h = 1010 1111 b w = B5 h = 1011 0101 b Como d=1, el resultado se almacena en REG1 Al ejecutarse: REG1 = 1010 1111 → 1011 0101 =0001 1010 = 1A h w = B5 h 1010 1111 1011 0101 0001 1010

Instrucciones OPTION y TRIS

Entre las instrucciones anteriores no se han incluido dos que no pertenecen estrictamente hablando al repertorio de 35 instrucciones de la gama media. Estas instrucciones son OPTION yTRIS . La razón por la cual no pertenecen a estas 35 instrucciones es por que fueron creadas pensando en la gama baja, que carece de 4 de las instrucciones de la gama media: ADDLW,RETFIE, RETURN y SUBLW. A pesar de todo las instrucciones TRIS y OPTION existen, en principio, en la gama media, pero Microchip recomienda no utilizarlas, para mantener la compatibilidad con todos los PIC de la gama media y los que puedan aparecer.

Page 29: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

OPTION OPTION

Guarda el valor del acumulador en el registro OPTION

Operación w → OPTION

Sintaxis [Etiqueta] OPTION

Operadores No tiene

Ciclos 1

OPCODE 00 0000 0110 0010

Descripción Esta instrucción guarda en el registro especial OPTIONel valor contenido en el acumulador w. No modifica ningún bit de estado.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: MOVLW 10H ; carga el acumulador con el valor 10h. OPTION ; carga el registro OPTION con el acumulad or. Esta instrucción existe para mantener la compatibilidad con los PIC producidos con anterioridad, y como en el futuro podría dejar de implementarse, Microchip aconseja realizar el ejemplo anterior de esta otra forma: BSF STATUS,RP0 ; activa el banco 1. MOVLW 10H ; carga el acumulador con 10h MOVWF OPTION_REG ; carga OPTION con el acumulador.

TRIS TRIS

Guarda el acumulador en uno de los registros de TRIS.

Operación w → f(TRISA ó TRISB)

Sintaxis [Etiqueta] TRIS f

Operadores No tiene

Ciclos 1

OPCODE 00 0000 0110 1111

Descripción Esta instrucción guarda el valor del acumulador w en uno de los registros especiales TRIS (TRISA o TRISB) que indicamos en el

Page 30: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

parámetro f. No modifica ningún bit de estado. Los registros TRIS determinan el funcionamiento como entrada y salida de las líneas I/O del PIC.

Registro de STATUS

PA2 PA1 PA0 TO# PD# Z DC C

- - - - - - - -

EJEMPLO: MOVLW 16h ; carga el acumulador W con el valor 16h TRIS PORTA ; carga el registro PORTA con el acumul ador. Esta instrucción existe para mantener la compatibilidad con los PIC producidos anteriormente, y como en el futuro podría dejar de implementarse, Microchip aconseja realizar el ejemplo anterior de esta otra forma (aunque ocupa más memoria...): BSF STATUS,RP0 ; activa el banco 1. MOVLW 16h ; carga el acumulador con el valor 16h MOVWF TRISA ; carga el registro PORTA con W.

Page 31: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

S

Su amigable compañero el Barra Bas

Page 32: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

ADDLW Esto significa: Agregar (sumar) el Literal al registro W (acumulador o registro de trabajo) resultado en W.

ADDLW ‘00 al FF’ Un número fijo (llamado literal) es sumado al registro W (registro de trabajo). El literal (número) puede estar comprendido entre el 00 y FF. En el registro STATUS se ven afectadas tres banderas (o flags) por la orden ADDLW (Z, DC y C), ver debajo.

C Se pone a 1 si se produce un acarreo desde el bit de mayor peso (desbordamiento). DC Se pone a 1 si se genera un acarreo del bit 3 al bit 4. Z Se pone a 1 si el resultado de la operación es cero.

Esta instrucción no está disponible para el '508A. Si quiere usar esta instrucción en el '508A o un programa en él la requiere/contiene, emplee las 3 instrucciones siguientes:

Por ejemplo en el F84:

ADDLW 80 ; mueve 80h a W

Sustitúyala en el '508A por: MOVWF 13h ; Mueve W a cualquier archivo MOVLW 80h ;poner 80h en W

ADDWF 13h ;sumar el archivo 13h a W

ADDWF Esto significa: Suma aritmética de W y un archivo (f). ADDWF ‘00 a FF’,0 El resultado es almacenado en el registro de trabajo W, debido al valor

0 en la instrucción. ADDWF ‘00 a FF’,1 El resultado es almacenado en el mismo archivo, debido al valor 1 del

designador en la instrucción.

ADDWF (sumar) el contenido del registro W con el contenido de un archivo. El resultado puede ser guardado en el registro W (designador = 0) o emplazado en el archivo llamado (designador = 1). Con la orden ADDWF, en el registro STATUS se ven afectados los bits: C (Carry), Z (Cero) y el DC (Dígito Carry).

Si el resultado de una instrucción ADD rebasa FF, la bandera C (Carry) es puesta a 1, si tiene cualquier otro valor es 0.

Si el resultado de una instrucción ADD es cero 0000 0000, la bandera Z (Cero) se pone a 1 y 0 si tiene cualquier otro valor.

La suma se realiza en aritmética binaria pura y sin signo. Si hay un (desborde) acarreo del bit 7, es decir que el resultado es mayor de 255, el bit C (bandera Carry) resulta 1, en caso contrario resulta 0. El PIC supervisa si hay acarreo del bit 3, es decir que, la suma de los dos (nibbles) mitades menos significativas (bits 0 a 3) resulta mayor de 15, el bit DC (digit carry) se pone a 1, en caso contrario se pone a 0.

Por ejemplo: Si agregamos 21h a 3Ch, el resultado es 5Dh, esto no afecta la bandera Carry, por lo que la bandera DC (dígito carry) será puesta a 1, pero si a 2Dh le agregamos 3Eh, el resultado es 6Bh, lo que desborda el contador (6B>FF) por lo que la bandera C (Carry) será puesta a 1.

Page 33: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Ejemplos : banderas banderas 1010 0010 1101 0000 + 0100 1111 C DC Z + 0110 1111 C DC Z 1111 0001 0 1 0 0011 1111 1 0 0

ANDLW Esto significa: producto lógico AND del Literal con el registro W. Ver también ANDWF.

ANDLW ‘00 a FF’ El objetivo de la operación es, descubrir cuantos bits de L y W, en binarios están a 1. Si ambos bits son cero, el resultado es cero y la instrucción usada en este caso es XOR. Esta instrucción hace un AND lógico entre un número fijo (literal) y el contenido del registro W, el resultado es colocado en el registro W. Con la orden ANDLW , en el registro STATUS se ven afectados los bits: C (Carry), Z (Cero) y el DC (Dígito Carry). El literal puede ir de 00 a FF.

La operación AND puede decirse que se usa para enmascarar (separar o quitar) los bits que nos interesen. Por ejemplo: 0Fh enmascarará (quita) los cuatro bits altos (nibble alto) y F0h quitará los cuatro bits bajos (nibble bajo). Veamos como se usa:

Utilización del 0Fh: ANDLW 0x0F Primer número: 1001 0011 [Número en W anterior a la instrucción ANDLW] Segundo número (0F): 0000 1111 [Número L Máscara] Respuesta al AND: 0000 0011 [Al aplicar la función AND entre ambos] (ANDed)

Utilización del F0h: ANDLW 0xF0 Primer número: 1001 0011 [Número en W anterior a la instrucción ANDLW] Segundo número (F0): 1111 0000 [Número L Máscara] Respuesta al AND: 1001 0000 [Al aplicar la función AND entre ambos] (ANDed)

ANDWF Esto significa: Operación AND producto lógico de W con el archivo f [ AND'ed entre W y f]. Ver también ANDLW .

ANDWF (00 a FF), 0 El resultado se almacena en el registro W, por el valor 0 en la instrucción.

ANDWF (00 a FF), 1 El resultado se almacena en el archivo f, por el valor en la instrucción.

Al registro W se le aplica el producto AND con un archivo f. Como dos archivos juntos no se pueden operar (AND), un archivo debe ponerse en W y se hace AND con el segundo archivo. Véase arriba para hacer operaciones de enmascarar con la operación AND. Con la instrucción ANDWF, sólo se afecta la bandera Z (cero). Si la respuesta es cero, la bandera Z en el registro STATUS se pone a 1, si la respuesta es distinta de cero, la bandera se pone a 0.

BCF Esto significa: Bit Clear File (pon a "0" o aclara el bit indicado (detrás de la coma) en el archivo f ). Ver también BSF.

BCF (00 a FF), bit Hay sobre 300 instrucciones (incluidas en los micros, trabajando internamente) para esta orden. Hay 79 archivos en el PIC16F84A, los 13 primeros archivos se

Page 34: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

llaman Registros de Función Especial (SFR's), el resto (66) se llaman Archivos de Propósito General (GPR's) del 0Ch a 4Fh. No afecta los bits de STATUS.

BCF se usa para limpiar [clear] un bit (pone a 0 el bit identificado en el archivo f). Por ej.: BCF 06h,5 significa que el bit 5 del archivo 06 debe ser puesto a "0" (aclarado), el resto de bits no se influyen. Ver figura de la derecha. El archivo 6 contiene líneas de E/S comúnmente se llaman I/O del puerto.

BSF Esto significa: Bit Set File (poner a 1 el bit indicado, en el archivo f). Ver también BCF. BSF ‘00 a FF’, bit Hay casi 300 instrucciones para esta orden. Hay 79 archivos en el

PIC16F84A, de las que los primeros 13 son losSFR's y los siguientes 66 son los conocidos GPR's. Estos GPR's ocupan del 0Ch al 4Fh y cada uno tiene 8 bits. BSF significa poner a 1 lógico el bit especifico en el archivo f. No afecta los bits de STATUS.

Por ejemplo: BSF 06h,5 indica que el bit 5 del archivo 6 será puesto a 1, este archivo 6 contiene 8 líneas E/S, comúnmente se llaman líneas I/O del puerto. El resultado es la inversa a la instrucción anterior, el 0 se sustituye por un 1.

BTFSC Esto significa: Bit Test, Skip if Clear ( Bit de Test, Salta si es "0"). BTFSC ‘00 a FF’, bit Hay casi 300 instrucciones para esta orden, para cubrir los 79

archivos, cada uno con 8 bits. BTFSC significa, comprobar el bit identificado en el registro llamado y si es 0 saltar una instrucción (no ejecuta la instrucción que sigue). No afecta los bits de STATUS.

Se ve mejor con un ejemplo: BTFSC 06h,4 es la forma de comprobar si el bit 4 en el archivo 6 es "0", si es cero, salta la próxima instrucción (pasar sin ejecutar) y continuar con la posterior.

Etiqueta: BTFSC 06h,4 ; comprueba si el bit 4 es 0 GOTO Etiqueta2 ; si no es 0, salta hasta Etiqueta2 CALL Dlay ; si es 0, llama a subrutina Dlay.

BTFSS Esto significa: Bit Test, Skip if Set (Bit de Test, Salta si es "1"). BTFSS ‘00 a FF’, bit También hay casi 300 instrucciones para esta orden, para cubrir los 79

(4Fh) archivos, cada uno con 8 bits. BTFSS significa, comprobar el bit identificado en el registro llamado y salta la próxima instrucción si es 1. No afecta los bits de STATUS.

En BTFSS 3,2 comprobamos el bit 2 del registro 3 y si dicho bit es 1, salta la próxima instrucción, si no, continua con la siguiente.

Etiqueta: BTFSS 03h,2 ; comprueba si el bit 2 es 1 GOTO Etiqueta2 ; si no, va a Etiqueta2 CALL Dlay ; si es 1, llama a subrutina Dlay para seguir. ; si es 1 viene a esta instrucción y sigue.

CALL Esto significa: Llamada incondicional a subrutina.

Page 35: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

En un programa, esto se escribe como: CALL Salida o CALL Tono1, etc. donde Salida o Tono1 son etiquetas. Un RETURN debería encontrarse al final de la subrutina CALL para que el micro vuelva a la siguiente instrucción después de la instrucción CALL que la llamó, de lo contrario se producirá un desborde de pila, con el consiguiente bloqueo del programa. No afecta los bits de STATUS.

CALL Etiqueta Los programas deberían ser escritos de forma que las pocas primeras instrucciones pongan al micro en el Inicio dePrograma Principal . El "Programa Principal" se localizará físicamente al final del listado y éste puede estar en el final de la memoria o a mitad del camino, si el programa es aproximadamente 250 bytes de largo.

Después de las primeras instrucciones que llevan al micro a: GOTO Inicio, se colocan todas las subrutinas necesarias para el programa. Con una orden CALL se llamará a las subrutinas y al final de cada subrutina debe tener una instrucción RETURN. Una llamada remota puede hacer de subrutina pero esta segunda subrutina no puede llamar otra subrutina.

Cada vez que se ejecuta una instrucción CALL , un valor de dirección es colocado (empujado) en la Pila (Stack ), entonces el micro sabe donde volver después de ejecutada la subrutina, la Pila sólo puede tener 8 niveles de alto, entonces es necesario llevar cuidado para no quedarse sin Pila (Stack ). Ver también GOTO, RETURN y RETLW.

Ejemplo: Loop2: BTFSS 05,2 ;¿esta apretado el pulsador?

GOTO Loop2 ;No. Salta a Loop2

MOVLW 01 ;SÍ.

XORWF 06,1 ; encender el LED

CALL Delay ;Llamada a rutina de Retardo

GOTO Loop1 ; para ver LED encendido.

Delay: DECFSZ 1Bh,1 ; Subrutina anidada de Retardo

GOTO Delay ; retardo exterior

DECFSZ 1Ch,1 ; retardo interior

GOTO Delay

RETURN

CLRF Esto significa: Clear f [Limpia f] (poner a 0 los 8 bits del archivo f) CLRF ‘00 a FF’ El contenido de un archivo se pone a 0 (Clear) y el bit Z del

registro STATUS es puesto a 1, esto es, los ocho bits se ponen a "0". Por esto hay que tener en cuenta el bit Z (cero, flag Z). Los 12 primeros archivos son SRF's y los siguientes 68, del 07h al 4Fh son los llamados GPR's.

CLRW Esto significa: Clear W (limpiar el registro de trabajo - llamado acumulador en otros micros)

CLRW El registro W (de trabajo) es aclarado, todos los bits son puestos a 0. Cuando el W es puesto a 0, la bandera cero (flag Z) es puesta a 1, en otras palabras la bandera Z del registro STATUS es puesta a 1.

Page 36: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

CLRWDT Esto significa: aClarado (puesta a 0) del Temporizador Perro Guardián (El bit WDT = 0).

CLRWDT La instrucción repone (resetea) el Temporizador Perro Guardián, esto también repone el preescaler del WDT y consume 2 ciclos maquina. Ejemplo:

Operación:

00h → WDT

0 → WDT prescaler,

1 → TO

1 → PD

Afecta Status: TO, PD

COMF Esto significa: Complemento del archivo f.

COMF (00 a FF),0 El resultado estará en W por el valor 0 detrás de la coma.

COMF (00 a FF),1 El resultado estará en f. El contenido f es complementado (los 0's se cambian a 1's y los 1's a 0's).

DECF Esto significa: Decremento del archivo f .

DECF (00 a FF),0 El resultado estará en W. El contenido del archivo f es decrementado y puesto "W".

DECF (00 a FF),1 Aquí, el resultado estará en f. El contenido del archivo "f" es decrementado, significa que es deducido (tomado) 1 del archivo. Si el archivo es 0000 0000 esto da la vuelta a 1111 1111 (255) afectando a la bandera Z. Cuando el archivo es 0000 0001 y se ejecuta una instrucción DECF, el archivo pasa a 0000 0000 y la bandera Z (cero) del STATUS se pone a 1, en otro caso es 0.

DECFSZ Esto significa: DECrement f, Skip if Zero (Decrementa el archivo f y salta si es 0).

DECFSZ (00 a FF),0 El resultado estará en W.

DECFSZ (00 a FF), 1 El resultado estará en f. La instrucción DECFSZ tiene muchos empleos. Un empleo importante está en una subrutina de retardo. En esta rutina la instrucción DECFSZ crea un lazo en el que el micro es enviado a una instrucción por encima-del-programa y se ejecutará un juego de instrucciones una y otra vez, esta es una táctica de perdida de tiempo para crear un retardo. No afecta al registro STATUS.

Cada vez que el micro llega a DECFSZ, el contenido del archivo es decrementado y si el archivo no es cero, se ejecutará la siguiente instrucción en el programa. La siguiente instrucción es normalmente GOTO y ésta envía de nuevo al micro por encima-del-programa. Por ej.:

ret: DECFSZ 0Ch,0 ; Decrementa 0C y si es 0, salta una línea GOTO ret ; no es 0, ejecuta esta línea ... ; si es 0, viene hasta aquí. ... ;sigue programa

GOTO Esto significa: Bifurcación Incondicional.

Page 37: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

GOTO k GOTO es la bifurcación incondicional en la que el micro es enviado a la dirección especificada. Esta instrucción carga simplemente la constante k en el registro PC (contador de programa). Esta es la típica instrucción de salto incondicional a cualquier posición de la memoria de programa. La constante literal k es la dirección de destino del salto, es decir la nueva dirección de memoria de programa a partir de la cual comenzarán a leerse las instrucciones después de ejecutar la instrucción GOTO. No afecta al registro STATUS.

También se usa $-n o $+n donde n es el número de líneas que ha de, volver atrás o avanzar en el programa. Por ej.

ret DECFSZ 0Ch,0 ; decrementa 0Ch, si es 0 salta 1 instrucción GOTO $-1 ; No, vuelve 1 línea atrás. No requiere etiqueta. ... ; Si, sigue programa

INCF Esto significa: Incrementar el archivo f.

INCF (00 a FF),0 El resultado del incremento estará en W.

INCF (00 a FF),1 El resultado estará en f. El contenido del archivo 'f' es incrementado, esto simplemente significa que se agrega 1 al archivo, si el archivo es 1111 1111 (255) esto da la vuelta a 0000 0000. Cuando el archivo es FFh y se ejecuta la instrucción INCF, el archivo pasa a 0000 0000 y la bandera Z (cero) es puesta a 1 en otro caso es 0.

INCFSZ Esto significa: INCrement f and Skip if 0 (Incrementar el archivo f y salta si es 0).

INCFSZ (00 a FF),0 El resultado estará en W.

INCFSZ (00 a FF),1 El resultado estará en f. Normalmente la función de decremento DECFSZ se usa para crear un retardo, pero también se puede usar un INCFSZ. No afecta al registro STATUS.

Esto trabaja así: Si el contenido de un archivo es incrementado y el resultado no es 0, entonces la siguiente instrucción es ejecutada con un GOTO una dirección anterior y ejecutará otro INCFSZ. Eventualmente el archivo será 1111 1111 y el próximo incremento lo devolverá a 0000 0000, el resultado será cero y la instrucción GOTO será ignorada, ejecutándose la siguiente instrucción.

IORLW Esto significa: Inclusive OR Literal con W.

IORLW ‘00 a FF’ El contenido del archivo W es sumado (lógico) [OR'ed] con un número. El resultado es colocado en registro de trabajo W, el número literal puede ser desde 00 a FF. Afecta al bit Z del registro STATUS.

Esto es simplemente una operación OR (suma lógica) y el objeto de su realización es cambiar dos o más bits a "1", si un bit es ORed con 0, la respuesta no se altera, si el bit es ORed con 1, el resultado es 1.

Ejemplo: Si el registro W se carga con 1111 0000 (es una máscara de 4 bits altos F0h) y un número como 0100 1110 (4Eh) es ORed con W, el resultado es 1111 1110 (FEh).

Page 38: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

IORWF Esto significa: Inclusive OR con el archivo f

IORWF (00 a FF),0 El resultado estará en W.

IORWF (00 a FF),1 El resultado estará en f. El contenido del registro W es ORed con el archivo f, esto simplemente es una operación "OR" y el objeto de su realización es cambiar dos o más bits a "1". Si un bit es ORed con 0, la respuesta no se altera, si el bit es ORed con un 1 el resultado es 1. Afecta al bit Z del registro STATUS.

Ejemplo: Si el registro W es cargado con 1111 0000 (F0h es una máscara de 4 bits altos) y un archivo con un número como 0100 1110 (4Rh) es ORed con W, el resultado es 1111 1110 (FEh).

MOVF Esto significa: Mueve el contenido del archivo 00 a 1F dentro y fuera del archivo o al W.

MOVF (00 a FF),0 El contenido del archivo es movido al W. El resultado estará en W.

MOVF (00 a FF),1 El resultado estará en f. Para esta instrucción MOVF 00 a 1F,1 el contenido es movido fuera del archivo y devuelto a él otra vez, pero no entra en W. Esto es una prueba útil ya que la bandera Z (cero) del STATUS se ve afectada. Si el contenido es cero, la bandera Z es puesta a 1, si el contenido es 1, la bandera Z es 0.

((((((((MOVFW Esta forma de instrucción, no es válida (no se recomienda su uso ), a pesar de que el propio MPLAB la admita, significa mover el contenido del archivo F, al registro de trabajo W. Cando se encuentre esta forma de expresión, debe modificarse por:

MOVF f,W donde f es un registro entre 00 y FF. También puede usarse MOVF f,0 que viene a ser lo mismo.)))))))))))))))))))))))))) OJO

MOVLW Esto significa: Mueve Literal a W.

MOVLW (00 a FF) Un número f (Literal) es cargado en el registro W. El Literal puede ser 00 a FF. No afecta al registro STATUS.

MOVWF Esto significa: Copia W al archivo llamado f.

MOVWF (00 a FF) Esta instrucción copia datos del registro W al archivo f. No afecta al registro STATUS.

NOP Esto significa: Ninguna operación. Es decir, el micro no realiza ninguna operación, sólo consume el tiempo de 1 instrucción.

(((((((((OPTION Esto significa: Carga registro OPTION. El contenido del registro W es cargado en el registro OPTION.)))))))))) PIC16F84 ESPECIFICAMENTE

Page 39: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

RETFIE Esto significa: Cuando hay una interrupción, RETURN con valor de lo alto de la Pila y lo deja en el PC.

RETFIE Carga el PC con el valor que se encuentra en la parte superior de la pila, asegurando así la vuelta de la interrupción. Pone a 1 el bit GIE, con el fin de autorizar o habilitar de nuevo que se tengan en cuenta las interrupciones. TOS → PC, 1 → GIE. No afecta al registro STATUS.

RETLW Esto significa: RETURN con Literal en W.

RETLW (00 a FF) El registro W es cargado con el valor del literal, normalmente devuelve un dato procedente de una tabla. El Contador de Programa (PC) es cargado de la cima de la pila (Stack), que corresponde a la dirección de RETURN de programa. No afecta al registro STATUS.

RETURN Esto significa: Retorno de Subrutina. Esta instrucción está al final de una rutina o subrutina. No afecta al registro STATUS.

RLF Esto significa: Rotar el archivo f a Izquierda con aCarreo (Carry).

RLF (00 a FF),0 El resultado se almacena en W.

RLF (00 a FF),1 Resultado se almacena en f. El contenido de un archivo, es rotado un bit a la izquierda por la bandera Carry (acarreo), esto requiere de 9 desplazamientos para recuperar el valor original del archivo. Afecta al bit C del STATUS.

El uso de: RLF.....Reg, Destino........; rota los bits de un registro un lugar la izquierda.

Si Reg = b'00010110'

Después de la instrucción: Reg = b'0010110C' donde C es el valor del bit STATUS,C en el momento de ejecutarse la instrucción RLF.

Veamos en mas detalle, cómo trabaja la función RLF: Un grupo de 8 bits es registro, o sea: Registro = B7 B6 B5 B4 B3 B2 B1 B0 Al aplicar la instrucción RLF.....Reg,F ocurre que: (STATUS,C <== B7) <== B6 B5 B4 B3 B2

B1 B0 (C <== STATUS,C)

Esto significa que, todos los bits de Reg son rotados (desplazados) una posición hacia la izquierda. El espacio generado a la derecha de Reg es decir, el bit0 (B0) del registro, es ocupado por el valor que tenía en ese momento el bit C del registro STATUS. A su vez, el Bit7 (B7) de Reg sale del Registro y se rellena con el bit C del registro STATUS.

Repasemos otra vez. Reg = b'00001100' (Ch = .12) y STATUS,C = 0 Aplicamos; RLF Reg,F Entonces: Reg = b'00011000' (18h = .24) y STATUS,C = 0

Podemos comprobar que antes de aplicar la RLF, Reg valía 12 en sistema decimal. Después de la instrucción RLF Reg vale 24. Hemos multiplicado a Reg por dos, utilizando la instrucción RLF. Ahora, consideremos el siguiente caso:

Reg = b'00001100' (Ch) y STATUS,C = 1

Page 40: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Aplicamos; RLF Reg,F Entonces: Reg = b'00011001' (19h = .25) y STATUS,C = 0

En este caso, antes de la aplicación de RLF Reg valía 12 en decimal y después de aplicar la instrucción Reg vale 25 en decimal, por qué ocurre este error si hemos aplicado la misma instrucción al mismo registro Reg. Debemos considerar el motivo.

El motivo radica en que el bit C del registro STATUS, antes de ejecutar la instrucción RLF, valía 1, en el segundo caso y ocupó el bit0 del Reg al ejecutar la instrucción RLF. Por tanto, en este segundo caso, al hacer RLF Reg,F equivale a hacer Reg * 2 + 1.

Precauciones a tener en cuenta para evitar incurrir en este error. Para asegurarnos en una multiplicación por dos, siempre limpiaremos el bit C del STATUS antes de aplicar la instrucción RLF, asegurándonos así que el bit STATUS,C no "corrompa" la operación.

Ej.: BCF STATUS,C ;Limpiar STATUS,C para asegurar que no "ensucia" la multiplicación RLF Registro,F ;y ahora, si. Rotar el Registro a la izquierda.

Se puede rotar más veces a la izquierda, lo que en buena lógica es lo mismo que hacer Reg * 2 * 2, etc.

RRF Esto significa: Rotar el archivo a la Derecha por Carry (aCarreo).

RRF (00 a FF),0 En este caso el resultado se almacena en W.

RRF (00 a FF),1 Y en este el resultado se almacena en f. El contenido de un archivo es rotado un bit a la derecha por la bandera Carry (acarreo), esta instrucción corrompe el registro al introducir el valor de C en el bit7, por tanto, debemos usar una instrucción de aclarado del bit C antes de usar RRF, otro modo de lograr esto, requiere de 9 desplazamientos para recuperar el valor original del archivo.

La instrucción: RRF Reg,Destino ; rota los bits de un registro un lugar hacia la derecha.

Veamos: Reg = b'00011000' (18h = .24)

Aplicamos: RRF Reg,F y Reg = b'C0001100'

Donde C es el valor que tenía el bit C de STATUS en el momento de ejecutar la instrucción RRF. Veamos en detalle cómo trabaja la función RRF:

Sabemos que un grupo de 8 bits es registro, o sea: Registro = B7 B6 B5 B4 B3 B2 B1 B0

Al aplicar la instrucción: RRF.....Reg,F ocurre que: (STATUS,C ==> C) B7 B6 B5 B4 B3 B2 B1 ==> (B0 ==> STATUS,C)

Esto significa que todos los bits de Reg son desplazados una posición hacia la derecha. El espacio generado a la izquierda de Reg, es decir, el bit7 (B7) de registro, será ocupado por el valor que tenía en ese momento el bit C del registro STATUS. A su vez, el Bit0 (B0) de Reg sale de Reg y rellena el bit C del registro STATUS.

Supongamos que: Reg = b'00011000' (18h = .24) y STATUS,C = 0

Page 41: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

Al aplicar: RRF Reg,F Reg = b'00001100' (Ch = .12) y STATUS,C = 0

Aquí, podemos comprobar que antes de aplicar la RRF, Reg valía 24 en sistema decimal. Después de la instrucción RRF Reg vale 12, por lo que hemos dividido a Reg por dos, utilizando la instrucción RRF. Sin embargo, veamos el caso en el que:

Reg = b'00011000' (18h = .24) y STATUS,C = 1

Al aplicar: RRF Reg,F Reg = b'10001100' (8Ch = .140) y STATUS,C = 0

En este caso Reg, antes de la instrucción RRF valía 24 en sistema decimal. Y después de la instrucción RRF Reg vale 140. Este error ocurre por que el bit C de STATUS, en este caso, antes de ejecutar la instrucción RRF valía 1, el cual al ejecutar la instrucción RRF, ocupó el bit7 del registro Reg.

Debemos considerar el motivo para evitar incurrir en este error, difícil de depurar. Para asegurar una división por dos, limpiaremos el bit C del registro STATUS antes de realizar cualquier instrucción RRF y asegurarnos que el bit STATUS,C no "corrompa" la división.

Ej.: BCF STATUS,C ;Limpia STATUS,C para asegurar que no "corrompe" la división RRF Registro,F ;y ahora si. Rota el Registro a la derecha.

Por la misma lógica rotar dos veces a la derecha un registro equivale a decir Registro / 2 / 2, lo que simplificado es Registro / 4, y así sucesivamente.

SLEEP Esto significa: SEELP (Dormir, bajo consumo). Pone a 0 el flag PD# (Power Down) y el flag TO# (Timer Out) se pone a 1. O sea, el bit de estado de energía-baja es aclarado, el bit de estado de interrupción es puesto a 1, el Temporizador Perro Guardián y su preescaler son aclarados (puestos a 0) y el procesador es puesto en el modo Sleep (bajo consumo) con el oscilador parado.

Para salir de este estado, es necesaria una de estas causas: Provocar un Reset activando el MCLR. Por desbordamiento del WDT (Watchdog) si quedo operativo en el modo reposo. Generando una interrupción distinta a TMR0 ya que ésta se desactiva con la propia instrucción SLEEP.

SUBLW Esto significa: Restar W del Literal. SUBLW (00 a FF) EL registro W es restado (método de complemento a 2) del valor Literal,

el resultado es colocado en el registro W. Esta instrucción no está disponible en el juego de instrucciones del '508A, usar estas 5

instrucciones, ejemplo: SUBLW 80h. Sustituir por:

MOVWF 13h ;Mover W a cualquier archiv o

Page 42: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

MOVLW 80h ;Poner 80h en W

MOVWF 14h ;Mover W a cualquier archiv o

MOVF 13h,0 ;Mover 13h a W

SUBWF 14h,0 ;Restar W del archivo 14h

SUBW F Esto significa: Restar W del archivo. SUBWF (00 a FF),0 El resultado estará en W. SUBWF (00 a FF),1 El resultado estará en f. Restar por el método de complemento a 2, el

registro W del archivo (de 00 a 2F).

SWAPF Esto significa: Swap Nibbles (intercambio de bits) en el archivo f. SWAPF (00 a FF),0 El resultado estará en W. SWAPF (00 a FF),1 El resultado estará en f. Los nibbles (niveles) superiores e inferiores de

un archivo 00 a 1F son cambiados.

TRIS 06 o solamente TRIS Esto significa: Carga Registro TRIS. Ver también OPTION 0DFh en la Biblioteca de Rutinas.

Esta instrucción carga a TRIS con el contenido de W, usamos TRIS 06 para recordar que se está refiriéndose al PuertoB (determinando la naturaleza de Entrada/Salida de cada una de las líneas) cuando el programa se transfiere a un PIC F84.

Las dos instrucciones de configuración (set-up) son:

MOVLW xxh ;Cargar W con un valor literal (recordar que para el '508A el Bit3 [GP3] debe ser 1). TRIS 06 ;Cargar TRIS con el valor de W.

Nota: El '508A sólo tiene 6 líneas en el puerto y usa sólo los 6 bits inferiores. Si W es 0000 1000 todas las líneas son salida excepto GP3, ya que GP3 sólo puede ser ENTRADA.

Si se requiere usar la instrucción TRIS en un '508A, son necesarias las siguientes 4 instrucciones:

BSF 03,5 ;Seleccionar pagina 1 MOVLW 08 ;Haga GP3 entrada MOVWF 06 ;Cargar el archivo TRIS (como estamos en page1, esto no es salida port 6) BCF 03,5 ;Seleccionar Page0

Page 43: Técnicas de programación en ensamblador pic16f877a repertorio 35 instrucciones

Su amigable compañero el Barra Bas

XORLW Esto significa: Exclusivo OR Literal con W. XORLW (00 a FF) El contenido del registro de W es XOR'ed con un valor literal (el

contenido de W se hace un XOR lógico con el valor literal), el resultado es colocado en el registro W.

XORWF Esto significa: Exclusivo OR W con el archivo f. XORWF (00 a FF),0 El resultado estará en W. XORWF (00 a 1F),1 El resultado estará en f. Exclusivo OR del contenido del registro W con

un archivo (00 a 1F).

Con esto, damos por terminada la descripción de las instrucciones para la familia PIC. Personalmente recomiendo que se haga una copia en papel para tener a mano en sus proyectos, esto le facilitará el proceso de programación ayudándole a recordar la función de las instrucciones y ganará tiempo en sus proyectos.