Вы находитесь на странице: 1из 36

CENTRO CULTURAL DE INGENIERÍA ELÉCTRICA

SANTIAGO ANTÚNEZ DE MAYOLO

Expositor: Juan Linares

Universidad Nacional de Ingeniería


Alma Mater de la Ciencia y Tecnología
2
CCIESAM - UNI 3

I.- INTRODUCCIÓN
• La familia de la Gama Media de PIC´s cuenta
con 35 instrucciones , cada una de ellas de 14
bits.
• La gran mayoría de éstas instrucciones se
ejecutan en un ciclo de instrucción, excepto
aquellas que nos generan saltos en la memoria
del programa.

Juan Linares
CCIESAM - UNI 4

II.-SINTAXIS

• f Direccion o valor de un registro.


• W Registro de trabajo.
• k Numero inmediato o literal (0
• b Direccion de un bit dentro de un registro
(0
0 W
•d Destino de operación d = 1

• Label L

Juan Linares
CCIESAM - UNI 5

III.-INSTRUCCIONES ORIENTADAS A BITS

INSTRUCCIONES QUE MANEJAN BITS


SINTAXIS OPERACIÓN Ciclos FORMATO Bits
BCF f, b Borra bit b de f 1 01 00bb bfff ffff
BSF f, b Pone a 1 bit b de f 1 01 01bb bfff ffff
BTFSC f, d Explora bit d de f y salta si es 0 01 10bb bfff ffff
BTFSS f, d Explora bit d de f y salta si es 1 01 11bb bfff ffff

Juan Linares
CCIESAM - UNI 6

BCF
• Sintaxis: bcf f,b

• Operación: f, b  0
Escribe el valor de cero al bit “b” del registro “f”
• Opcode: 13 10 9 7 6 0
0 1 0 0 b f

• Ejemplo:

bcf PORTB,7 ; PORTB,7 <- 0

Juan Linares
CCIESAM - UNI 7

BSF
• Sintaxis: bsf f,b

• Operación: f, b  1
Escribe el valor de uno al bit “b” del registro “f”
• Opcode: 13 10 9 7 6 0
0 1 0 1 b f

• Ejemplo:

bsf PORTB,2 ; PORTB,2 <- 1

Juan Linares
CCIESAM - UNI 8

BTFSC
• Sintaxis:
btfsc f,b

• Operación: Se salta una instrucción si el bit “b” del


registro “f” es igual a cero
• Opcode:
13 10 9 7 6 0
0 1 1 0 b f
• Ejemplo:
movlw b’10101010’ ; W <- b’10101010’
movwf PORTB ; PORTB <- W
btfsc PORTB,2 ; ¿PORTB,2 == 1?
INSTRUCCION1 ; no Como el bit 2de PORTB es igual a cero
ejecuta la INTRUCCION2 sin ejecutar la
INSTRUCCION2 ; si INTRUCCION1

Juan Linares
CCIESAM - UNI 9

BTFSS
• Sintaxis: btfss f,b

• Operación: Se salta una instrucción si el bit “b” del


registro “f” es igual a uno
• Opcode:
13 10 9 7 6 0
0 1 1 1 b f
• Ejemplo:
movlw b’10001010’ ; W <- b’10001010’
movwf PORTB ; PORTB <- W
btfss PORTB,5 ; ¿PORTB,5 == 1?
INSTRUCCION1 ; no Como el bit 5 de PORTB NO es igual a uno
ejecuta la INTRUCCION1 y luego ejecuta la
INSTRUCCION2 ; si INTRUCCION2

Juan Linares
CCIESAM - UNI 10

IV.- INSTRUCCIONES ORIENTADAS AL


MANEJO DE LITERALES

INSTRUCCIONES QUE MANEJAN LITERALES


SINTAXIS OPERACIÓN Ciclos FORMATO Bits
MOVLW k Mueve a W el valor k 1 11 00xx kkkk kkkk
SUBLW k k–W 1 11 110x kkkk kkkk C,DC,Z
ADDLW k W+k 1 11 111x kkkk kkkk C,DC,Z
ANDLW k W AND k 1 11 1001 kkkk kkkk Z
IORLW k W OR k 1 11 1000 kkkk kkkk Z
XORLW k W XOR k 1 11 1010 kkkk kkkk

Juan Linares
CCIESAM - UNI 11

MOVLW
• Sintaxis: movlw k

• Operación: w k

• Opcode:
13 8 7 0
1 1 0 0 x x k
• Ejemplo:

movlw .3 ; W <- .3

Juan Linares
CCIESAM - UNI 12

SUBLW
• Sintaxis: sublw k

• Operación: w k-w

• Opcode:
13 8 7 0
1 1 1 1 0 x k
• Ejemplo:
movlw 0x25 ; W <- 0x25
sublw 0x26 ; W <- 0x26 – W

Juan Linares
CCIESAM - UNI 13

ADDLW
• Sintaxis: addlw k

• Operación: w  w+k

• Opcode:
13 8 7 0
1 1 1 1 1 x k
• Ejemplo:

movlw 0x06 ; W <- 0x06


addlw 0x31 ; W <- W + 0x31
Juan Linares
CCIESAM - UNI 14

ANDLW
• Sintaxis: andlw k

• Operación: w  k (and) w

• Opcode:
13 8 7 0
1 1 1 0 0 1 k
• Ejemplo:
movlw b’10101010’ ; w b’10101010’
andlw b’11010011’ ; w b’10000010’

Juan Linares
CCIESAM - UNI 15

IORLW
• Sintaxis: iorlw k

• Operación: w  k (ior) w

• Opcode:
13 8 7 0
1 1 1 0 0 0 k
• Ejemplo:
movlw b’10101010’ ; w b’10101010’
iorlw b’11010011’ ; w b’11111011’

Juan Linares
CCIESAM - UNI 16

XORLW
• Sintaxis: xorlw k

• Operación: w  k (xor) w

• Opcode:
13 8 7 0
1 1 1 0 1 0 k
• Ejemplo:
movlw b’10101010’ ; w b’10101010’
xorlw b’11010011’ ; w b’01111001’

Juan Linares
CCIESAM - UNI 17

V.- INSTRUCCIONES ORIENTADAS AL


MANEJO DE REGISTROS
INSTRUCCIONES QUE MANEJAN REGISTROS
SINTAXIS OPERACIÓN C FORMATO Bits
CLRF f Borra f 1 00 0001 1fff ffff Z
CLRW Borra W 1 00 0001 0xxx xxxx Z
NOP No operación 1 00 0000 0xx0 0000
MOVWF f Mueve W y f 1 00 0000 1fff ffff
MOVF f, d Mueve f 1 00 1000 dfff ffff Z
SUBWF f, d F–W 1 00 0010 dfff ffff C,DC,Z
ADDWF f, d W+f 1 00 0111 dfff ffff C,DC,Z
ANDWF f, d W AND f 1 00 0101 dfff ffff Z
IORWF f, d W OR f 1 00 0100 dfff ffff Z
XORWF f, d W XOR f 1 00 0110 dfff ffff Z
DECF f, d Decrementa f 1 00 0011 dfff ffff Z
INCF f, d Incrementa f 1 00 1010 dfff ffff Z
COMF f, d Invierte f 1 00 1001 dfff ffff Z
SWAPF f, d Intercambia bits 1 00 1110 dfff ffff
RLF f, d Rota f a la izquierda 1 00 1101 dfff ffff C
RRF f, d Rota f a la derecha 1 00 1100 dfff ffff C
DECFSZ f, d Decrementa f y si es 0 salta 00 1011 dfff ffff
INCFSZ f, d Incrementa f y si es 1 salta 00 1111 dfff ffff

Juan Linares
CCIESAM - UNI 18

CLRF
• Sintaxis: clrf f

• Operación: f 0

• Opcode:
13 8 7 6 0
0 0 0 0 0 1 1 f
• Ejemplo:
clrf TMR0 ; TMR0 <- 0

Juan Linares
CCIESAM - UNI 19

CLRW
• Sintaxis: clrw

• Operación: w0

• Opcode:
13 8 7 6 0
0 0 0 0 0 1 0 xxxxxxx
• Ejemplo:
clrf W ; W <- 0

Juan Linares
CCIESAM - UNI 20

MOVWF
• Sintaxis: movwf f

• Operación: f w

• Opcode:
13 8 7 6 0
0 0 0 0 0 0 1 f
• Ejemplo:
movlw .2 ; w <- .2
movwf PORTB ; PORTB <- W

Juan Linares
CCIESAM - UNI 21

MOVF
• Sintaxis: movf f,d

• Operación: 0, w  f
d=
1, f  f (actualizar)
• Opcode:
13 8 7 6 0
0 0 1 0 0 0 d f
• Ejemplo:

movf PORTB,1 ; PORTB <- PORTB

Juan Linares
CCIESAM - UNI 22

SUBWF
• Sintaxis: subwf f,d

• Operación: 0, w  f - w
d=
1, f  f - w
• Opcode:
13 8 7 6 0
0 0 0 0 1 0 d f
• Ejemplo:
movlw .27 ; W <- 27
movwf PORTB ; PORTB <- W
movlw .21 ; W <- 21
subwf PORTB,W ; W <- 27–21,(w <- 6)
Juan Linares
CCIESAM - UNI 23

ADDWF
• Sintaxis: addwf f,d

• Operación: 0, w  f + w
d=
1, f  f + w
• Opcode:
13 8 7 6 0
0 0 0 1 1 1 d f
• Ejemplo:
movlw .3 ; W <- 3
movwf PORTB ; PORTB <- W
movlw .15 ; W <- 15
addwf PORTB,F ; PORTB <- 3+15
Juan Linares
CCIESAM - UNI 24

ANDWF
• Sintaxis: andwf f,d

• Operación: 0, w  f (and) w
d=
1, f  f (and) w
• Opcode:
13 8 7 6 0
0 0 0 1 0 1 d f
• Ejemplo:
movlw b’11001100’ ; W <- b’11001100’
movwf PORTB ; PORTB <- W
movlw b’10110001’ ; W <- b’10110001’
andwf PORTB,F ; PORTB <- B’10000000’
Juan Linares
CCIESAM - UNI 25

IORWF
• Sintaxis: iorwf f,d

• Operación: 0, w  f (ior) w
d=
1, f  f (ior) w
• Opcode:
13 8 7 6 0
0 0 0 1 0 0 d f
• Ejemplo:
movlw b’11001100’ ; W <- b’11001100’
movwf PORTB ; PORTB <- W
movlw b’10110001’ ; W <- b’10110001’
iorwf PORTB,F ; PORTB <- B’11111101’
Juan Linares
CCIESAM - UNI 26

XORWF
• Sintaxis: xorwf f,d

• Operación: 0, w  f (xor) w
d=
1, f  f (xor) w
• Opcode:
13 8 7 6 0
0 0 0 1 1 0 d f
• Ejemplo:
movlw b’11001100’ ; W <- b’11001100’
movwf PORTB ; PORTB <- W
movlw b’10110001’ ; W <- b’10110001’
xorwf PORTB,W ; W <- B’01111101’
Juan Linares
CCIESAM - UNI 27

DECF
• Sintaxis: decf f,d

• Operación: 0, w  f - 1
d=
1, f  f - 1
• Opcode:
13 8 7 6 0
0 0 0 0 1 1 d f
• Ejemplo:
movlw .156 ; W <- 156
movwf PORTB ; PORTB <- W
decf PORTB,F ; PORTB <- 156-1

Juan Linares
CCIESAM - UNI 28

INCF
• Sintaxis: incf f,d

• Operación: 0, w  f+1
d=
1, f  f+1
• Opcode:
13 8 7 6 0
0 0 1 0 1 0 d f
• Ejemplo:
movlw .27 ; W <- 27
movwf PORTB ; PORTB <- W
incf PORTB,W ; W <- 27+1

Juan Linares
CCIESAM - UNI 29

COMF
• Sintaxis: comf f,d

• Operación: 0, w  255 - f
d=
1, f  255 - f
• Opcode:
13 8 7 6 0
0 0 1 0 1 0 d f
• Ejemplo:
movlw .5 ; W <- 5
movwf PORTB ; PORTB <- W
comf PORTB,W ; W <- 255 - 5

Juan Linares
CCIESAM - UNI 30

SWAPF
• Sintaxis: swapf f,d

• Operación: 0, w<3:0>  f<7:4>


d= w<7:4>  f<3:0>
1 , f<3:0>  f<7:4>
f<7:4>  f<3:0>
• Opcode: 13 8 7 6 0
0 0 1 1 1 0 d f

• Ejemplo:
movlw b’11000001’ ; W <- b’11000001’
movwf PORTB ; PORTB <- W
swapf PORTB,W ; W <- b’00011100’

Juan Linares
CCIESAM - UNI 31

RLF
• Sintaxis: rlf f,d

• Operación: d= 0, w 
1,f 
Rota a la izquierda una posición los bits del registro “f” a travez del bit carry
• Opcode: 13 8 7 6 0
0 0 1 1 0 1 d f

• Ejemplo: C
movlw b’00101110’ ; W <- b’00101110’
movwf PORTB ; PORTB <- W
rlf PORTB,W ; W <- b’01011101’
; C <- 0

Juan Linares
CCIESAM - UNI 32

RRF
• Sintaxis: rrf f,d

• Operación: d = 0, w 
1,f 
Rota a la derecha una posición los bits del registro “f” a travez del bit carry
• Opcode: 13 8 7 6 0
0 0 1 1 0 0 d f

• Ejemplo: C
movlw b’11000001’ ; W <- b’11000001’
movwf PORTB ; PORTB <- W
rrf PORTB,F ; PORTB <- b’01100000’
; C <- 1

Juan Linares
CCIESAM - UNI 33

DECFSZ
• Sintaxis: decfsz f,d
• Operación: 0, w  f - 1
d= 1, f  f - 1
Se salta una instrucción si del resultado de “f-1” es igual a cero
• Opcode: 13 8 7 6 0
0 0 1 0 1 1 d f
• Ejemplo:
movlw .1 ; W <- 1
movwf PORTB ; PORTB <- W
decfsz PORTB,W ; W <- 1-1, PORTB=1
INSTRUCCION1
Como el resultado del decremento es igual
INSTRUCCION2 a cero ejecuta la INTRUCCION2 sin
ejecutar la INTRUCCION1
Juan Linares
CCIESAM - UNI 34

INCFSZ
• Sintaxis: incfsz f,d
• Operación: 0, w  f + 1
d= 1, f  f + 1
Se salta una instrucción si del resultado de “f+1” es igual a cero
• Opcode: 13 8 7 6 0
0 0 1 1 1 1 d f
• Ejemplo:
movlw .250 ; W <- 250
movwf PORTB ; PORTB <- W
incfsz PORTB,W ; W <- 250+1, PORTB=250
INSTRUCCION1
Como el resultado del incremento es
INSTRUCCION2 diferente de cero ejecuta la INTRUCCION1
y luego la instrucción INTRUCCION2
Juan Linares
CCIESAM - UNI 35

Juan Linares
CCIESAM - UNI 36

Juan Linares

Вам также может понравиться