Escolar Documentos
Profissional Documentos
Cultura Documentos
Pgina 1 de 14
Microcontroladores PIC
on-line GRTIS!
Apndice A
Conjunto de Instrues
z z z z z z z z z
z z z z z z z z z
z z z z z z z z z
z z z z z z z z
A.1 MOVLW
Sintaxe: Descrio: Operao: Operando: Flag:
k(W) 0 k 255
1 1 MOVLW 0x5A Depois da instruo: W= 0x5A W = 0x10 e REGISTAR = 0x40 W = 0x40 MOVLW REGISTAR Antes da instruo: Depois da instruo:
A.2 MOVWF
Sintaxe: Descrio: Operao: Operando: Flag:
Copiar W para f
[rtulo] MOVWF f O contedo do registo W copiado para o registo f
W(f) 0 f 127
1 1 MOVWF OPTION_REG Antes da instruo: Depois da instruo: OPTION_REG = 0x20 W = 0x40 OPTION_REG = 0x40 W = 0x40
Exemplo 2:
MOVWF INDF Antes da instruo: FSR = 0xC2 Contedo do endereo 0xC2 = 0x00 Depois da instruo: FSR = 0xC2 W = 0x17 W = 0x17
http://www.i-magazine.com.br
12/8/2003
Pgina 2 de 14
A.3 MOVF
Sintaxe: Descrio:
Copiar f para d
[rtulo] MOVF f, d O contedo do registo f guardado no local determinado pelo operando d Se d = 0, o destino o registo W Se d = 1, o destino o prprio registo f A opo d = 1, usada para testar o contedo do registo f, porque a execuo desta instruo afecta a flag Z do registo STATUS.
Exemplo 2:
MOVF INDF, 0 Antes da instruo: FSR = 0xC2 contedo do endereo 0xC2 = 0x00 Depois da instruo: FSR = 0xC2 contedo do endereo 0xC2 = 0x00 Z=1 W = 0x00 W = 0x17
A.4 CLRW
Sintaxe: Descrio: Operao: Operando: Flag:
Escrever 0 em W
[rtulo] CLRW O contedo do registo W passa para 0 e a flag Z do registo STATUS toma o valor 1.
0(W)
Z 1 1 CLRW Antes da instruo: Depois da instruo: Z=1 W = 0x55 W = 0x00
A.5 CLRF
Sintaxe: Descrio: Operao: Operando:
Escrever 0 em f
[rtulo] CLRF f O contedo do registo f passa para 0 e a flag Z do registo STATUS toma o valor 1.
0f 0 f 127
http://www.i-magazine.com.br
12/8/2003
Pgina 3 de 14
Z 1 1 CLRF STATUS Antes da instruo: Depois da instruo: Z=1 STATUS = 0xC2 STATUS = 0x00
Exemplo 2:
CLRF INDF Antes da instruo: Depois da instruo: Z=1 FSR = 0xC2 FSR = 0xC2 contedo do endereo 0xC2 = 0x33 contedo do endereo 0xC2 = 0x00
A.6 SWAPF
Sintaxe: Descrio:
Copiar o contedo de f para d, trocando a posio dos 4 primeiros bits com a dos 4 ltimos
[rtulo] SWAPF f, d Os 4 bits + significativos e os 4 bits significativos de f, trocam de posies. Se d = 0, o resultado guardado no registo W Se d = 1, o resultado guardado no registo f Operao: Operando: Flag: Nmero de palavras: Nmero de ciclos: Exemplo 1:
Exemplo 2:
SWAPF REG, 1 Antes da instruo: Depois da instruo: REG = 0xF3 REG = 0x3F
A.7 ADDLW
Sintaxe: Descrio: Operao: Operando: Flag:
(W)+kW 0 k 255
C, DC, Z 1 1 ADDLW 0x15 Antes da instruo: Depois da instruo: W= 0x10 W= 0x25 W = 0x10 W = 0x47
Exemplo 2:
http://www.i-magazine.com.br
12/8/2003
Pgina 4 de 14
A.8 ADDWF
Sintaxe: Descrio:
Adicionar W a f
[rtulo] ADDWF f, d Adicionar os contedos dos registos W e f Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f
Exemplo 2:
ADDWF INDF,0 Antes da instruo: FSR = 0xC2 contedo do endereo 0xC2 = 0x20 Depois da instruo: FSR = 0xC2 Contedo do endereo 0xC2 = 0x20 W = 0x37 W = 0x17
A.9 SUBLW
Sintaxe: Descrio: Operao: Operando: Flag:
k-(W)W 0 k 255
C, DC, Z 1 1 SUBLW 0x03 Antes da instruo: Depois da instruo: Antes da instruo: Depois da instruo: Antes da instruo: Depois da instruo: W= 0x01, C = x, Z = x W= 0x02, C = 1, Z = 0 W= 0x03, C = x, Z = x W= 0x00, C = 1, Z = 1 W= 0x04, C = x, Z = x W= 0xFF, C = 0, Z = 0 W = 0x10 W = 0x27 Resultado < 0 Resultado = 0 Resultado > 0
Exemplo 2:
SUBLW REG Antes da instruo: REG = 0x37 Depois da instruo: C=1 Resultado > 0
A.10 SUBWF
Sintaxe: Descrio:
Subtrair W a f
[rtulo] SUBWF f, d O contedo do registo W subtrado ao contedo do registo f Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f
http://www.i-magazine.com.br
12/8/2003
Pgina 5 de 14
A.11 ANDLW
Sintaxe: Descrio: Operao: Operando: Flag:
( W ) .AND. k W 0 k 255
Z 1 1 ANDLW 0x5F Antes da instruo: Depois da instruo: W= 0xA3 ; W= 0x03; W = 0xA3 REG = 0x37 Depois da instruo: W = 0x23 ; ; ; ; 0101 1111 1010 0011 0000 0011 1010 0011 0011 0111 0010 0011 (0x5F) (0xA3) (0x03) (0xA3) (0x37) (0x23)
Exemplo 2:
A.12 ANDWF
Sintaxe: Descrio:
Depois da instruo: W= 0x17, FSR= 0x02 ; Exemplo 2: ANDWF FSR, 0 Antes da instruo: Depois da instruo: W= 0x17, FSR= 0xC2; ; W= 0x02, FSR= 0xC2;
1100 0010
(0xC2)
http://www.i-magazine.com.br
12/8/2003
Pgina 6 de 14
A.13 IORLW
Sintaxe: Descrio: Operao: Operando: Flag:
( W ) .OR. k W 0 k 255
Z 1 1 IORLW 0x35 Antes da instruo: Depois da instruo: Z= 0 W= 0x9A W= 0xBF
Exemplo 2:
IORLW REG Antes da instruo: Depois da instruo: Z=0 W = 0x9A W = 0x9F contedo de REG = 0x37
A.14 IORWF
Sintaxe: Descrio:
Exemplo 2:
IORWF REG, 1 Antes da instruo: Depois da instruo: Z= 0 REG= 0x13, W= 0x91 REG= 0x93, W= 0x91
A.15 XORLW
Sintaxe: Descrio: Operao: Operando: Flag:
( W ) .XOR. k W 0 k 255
Z 1 1 XORLW 0xAF Antes da instruo: W= 0xB5 ; ; 1010 1111 1011 0101 (0xAF) (0xB5)
http://www.i-magazine.com.br
12/8/2003
Pgina 7 de 14
Depois da instruo: Exemplo 2: XORLW REG Antes da instruo: Depois da instruo: Z=0
A.16 XORWF
Sintaxe: Descrio:
OU-EXCLUSIVO de W com f
[rtulo] XORWF f, d Faz o OU-EXCLUSIVO dos contedos dos registos W e f Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f
Exemplo 2:
A.17 INCF
Sintaxe: Descrio:
Incrementar f
[rtulo] INCF f, d Incrementar de uma unidade, o contedo do registo f. Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f
Exemplo 2:
INCF REG, 0 Antes da instruo: W=x Z=0 Depois da instruo: W = 0x11 Z=0 REG = 0x10 REG = 0x10
http://www.i-magazine.com.br
12/8/2003
Pgina 8 de 14
A.18 DECF
Sintaxe: Descrio:
Decrementar f
[rtulo] DECF f, d Decrementar de uma unidade, o contedo do registo f. Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f
Exemplo 2:
DECF REG, 0 Antes da instruo: W=x Z=0 Depois da instruo: W = 0x12 Z=0 REG = 0x13 REG = 0x13
A.19 RLF
Sintaxe: Descrio:
Exemplo 2:
RLF REG, 1 Antes da instruo: C=0 Depois da instruo: C=1 REG = 1100 1100 REG = 1110 0110
A.20 RRF
Sintaxe: Descrio:
http://www.i-magazine.com.br
12/8/2003
Pgina 9 de 14
Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f Operao: Operando: Flag: Nmero de palavras: Nmero de ciclos: Exemplo 1:
Exemplo 2:
RRF REG, 1 Antes da instruo: C=0 Depois da instruo: C=0 REG = 0111 0011 REG = 1110 0110
A.21 COMF
Sintaxe: Descrio:
Complementar f
[rtulo] COMF f, d O contedo do registo f complementado. Se d=0, o resultado guardado no registo W Se d=1, o resultado guardado no registo f
() d 0 f 127, d [0, 1]
Z 1 1 COMF REG, 0 Antes da instruo: Depois da instruo: W = 0xEC REG= 0x13 REG= 0x13 ; 0001 0011 ; 1110 1100 FSR= 0xC2 FSR= 0xC2 (0x13) (0xEC) ; complementar
Exemplo 2:
COMF INDF, 1 Antes da instruo: Depois da instruo: contedo de FSR = (FSR) = 0xAA contedo de FSR = (FSR) = 0x55
A.22 BCF
Sintaxe: Descrio: Operao: Operando: Flag:
Pr a 0 o bit b de f
[rtulo] BCF f, b Limpar (pr a 0), o bit b do registo f
0 f<b> 0 f 127, 0 b 7
1 1 BCF REG, 7 Antes da instruo: Depois da instruo: REG = 0xC7 REG = 0x47 ; 1100 0111 ; 0100 0111 (0xC7) (0x47)
http://www.i-magazine.com.br
12/8/2003
Pgina 10 de 14
Exemplo 2:
BCF INDF, 3 Antes da instruo: FSR = 0xC2 contedo do endereo em FSR (FSR) = 0x2F Depois da instruo: W = 0x17 W = 0x17
A.23 BSF
Sintaxe: Descrio: Operao: Operando: Flag:
Pr a 1 o bit b de f
[rtulo] BSF f, b Pr a 1, o bit b do registo f
1 f<b> 0 f 127, 0 b 7
1 1 BSF REG, 7 Antes da instruo: Depois da instruo: REG = 0x07 REG = 0x17 W = 0x17 ; 0000 0111 ; 1000 0111 (0x07) (0x87)
Exemplo 2:
BSF INDF, 3 Antes da instruo: FSR = 0xC2 contedo do endereo em FSR (FSR) = 0x2F Depois da instruo: FSR = 0xC2 contedo do endereo em FSR (FSR) = 0x28 W = 0x17
A.24 BTFSC
Sintaxe: Descrio:
0 f 127, 0 b 7
1 1 ou 2 dependendo do valor lgico do bit b LAB_01 LAB_02 LAB_03 BTFSC REG, 1; Testar o bit 1 do registo REG ........... ........... ; Ignorar esta linha se for 0 ; Executar esta linha depois da anterior, se for 1
Antes da instruo, o contador de programa contm o endereo LAB_01. Depois desta instruo, se o bit 1 do registo REG for zero, o contador de programa contm o endereo LAB_03. Se o bit 1 do registo REG for um, o contador de programa contm o endereo LAB_02.
A.25 BTFSS
Sintaxe:
http://www.i-magazine.com.br
12/8/2003
Pgina 11 de 14
Descrio:
Se o bit b do registo f for igual a um, ignorar instruo seguinte. Se durante a execuo desta instruo este bit b for um, ento, a execuo da instruo seguinte no se concretiza e executada, em vez desta, uma instruo NOP, assim, a instruo actual demora dois ciclos de instruo a ser executada. Ignorar a instruo seguinte se (f<b>) = 1
0 f 127, 0 b 7
1 1 ou 2 dependendo do valor lgico do bit b LAB_01 LAB_02 LAB_03 BTFSS REG, 1; Testar o bit 1 do registo REG ........... ........... ; Ignorar esta linha se for 1 ; Executar esta linha depois da anterior, se for 0
Antes da instruo, o contador de programa contm o endereo LAB_01. Depois desta instruo, se o bit 1 do registo REG for um, o contador de programa contm o endereo LAB_03. Se o bit 1 do registo REG for zero, o contador de programa contm o endereo LAB_02.
A.26 INCFSZ
Sintaxe: Descrio:
Contedo do contador de programa antes da instruo, PC = endereo LAB_01. Se o contedo do registo REG depois de a operao REG = REG + 1 ter sido executada, for REG = 0, o contador de programa aponta para o rtulo de endereo LAB_03. Caso contrrio, o contador de programa contm o endereo da instruo seguinte, ou seja, LAB_02.
A.27 DECFSZ
Sintaxe: Descrio:
http://www.i-magazine.com.br
12/8/2003
Pgina 12 de 14
1 ou 2 dependendo do resultado LAB_01 LAB_02 LAB_03 0 DECFSZ REG, 1; Decrementar o contedo de REG de uma unidade ........... ........... ; Ignorar esta linha se resultado = 0 ; Executar esta linha depois da anterior, se der
Contedo do contador de programa antes da instruo, PC = endereo LAB_01. Se o contedo do registo REG depois de a operao REG = REG 1 ter sido executada, for REG = 0, o contador de programa aponta para o rtulo de endereo LAB_03. Caso contrrio, o contador de programa contm o endereo da instruo seguinte, ou seja, LAB_02.
A.28 GOTO
Sintaxe: Descrio: Operao: Operando: Flag:
A.29 CALL
Sintaxe: Descrio: Operao: Operando: Flag:
Chamar um programa
[rtulo] CALL k Esta instruo, chama um subprograma. Primeiro, o endereo de retorno (PC+1) guardado na pilha, a seguir, o operando k de 11 bits, correspondente ao endereo de incio do subprograma, vai para o contador de programa (PC).
A.30 RETURN
Sintaxe: Descrio: Operao:
Retorno de um subprograma
[rtulo] RETURN O contedo do topo da pilha guardado no contador de programa. TOS
Contador de programa PC
http://www.i-magazine.com.br
12/8/2003
Pgina 13 de 14
A.31 RETLW
Sintaxe: Descrio: Operao: Operando: Flag:
A.32 RETFIE
Sintaxe: Descrio:
TOS PC ; 1 GIE
1 2 RETFIE Antes da instruo: GIE = 0 Depois da instruo: GIE = 1 PC = TOS PC = x
A.33 NOP
Sintaxe:
Nenhuma operao
[rtulo] NOP Nenhuma operao executada, nem qualquer flag afectada. -
http://www.i-magazine.com.br
12/8/2003
Pgina 14 de 14
1 1 NOP
A.34 CLRWDT
Sintaxe: Descrio:
Operao:
A.35 SLEEP
Sintaxe: Descrio:
Modo de repouso
[rtulo] SLEEP O processador entra no modo de baixo consumo. O oscilador pra. O bit (Power Down) do registo Status reposto a 0. O bit (Timer Out) posto a 1. O temporizador de WDT (Watchdog) e o respectivo prescaler so repostos a 0.
Operao:
http://www.i-magazine.com.br
12/8/2003