Você está na página 1de 19

Coleção TUTPRO

Tutoriais sobre programação de microcontroladores

Solbet Ltda
Expandindo a percepção humana

Neste volume: O conjunto de instruções do PIC16F877

versão 1.0 Campinas 11/11/2007

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 1


Sumário
Recursos necessários para execução deste tutorial...............................................................................3
Descrição das instruções do PIC16F877 em ordem alfabética...........................................................3
ADDLW...........................................................................................................................................3
ADDWF...........................................................................................................................................3
ANDLW...........................................................................................................................................4
ANDWF...........................................................................................................................................4
BCF..................................................................................................................................................4
BSF..................................................................................................................................................5
BTFSC.............................................................................................................................................5
BTFSS..............................................................................................................................................6
CALL...............................................................................................................................................6
CLRF...............................................................................................................................................6
CLRW..............................................................................................................................................7
CLRWDT.........................................................................................................................................7
COMF..............................................................................................................................................8
DECF...............................................................................................................................................8
DECFSZ...........................................................................................................................................9
GOTO..............................................................................................................................................9
INCF................................................................................................................................................9
INCFSZ..........................................................................................................................................11
IORLW...........................................................................................................................................11
IORWF...........................................................................................................................................11
MOVLW........................................................................................................................................12
MOVF............................................................................................................................................12
MOVWF........................................................................................................................................13
NOP...............................................................................................................................................13
RETFIE..........................................................................................................................................13
RETLW..........................................................................................................................................14
RETURN.......................................................................................................................................14
RLF................................................................................................................................................15
RRF................................................................................................................................................15
SLEEP............................................................................................................................................16
SUBLW..........................................................................................................................................16
SUBWF..........................................................................................................................................17
SWAPF...........................................................................................................................................17
XORLW.........................................................................................................................................18
XORWF.........................................................................................................................................19

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 2


Recursos necessários para execução deste tutorial

Este tutorial cobre somente partes teóricas. Você só precisará de um computador com leitor
PDF.
Você pode copiar este material a vontade, desde que mantida a informação da fonte.

Descrição das instruções do PIC16F877 em ordem alfabética


As trinta e cinco instruções do PIC16F877A são todas de um mesmo comprimento, 14 bits.
Se a instrução não provocar um desvio do fluxo normal do programa, ela é executada em um ciclo.
Aquelas que provocam a alteração do contador de programas diferente do simples incremento de
uma unidade são executadas em dois ciclos.
A compreensão da funcionalidade de cada instrução é indispensável para o programador
assembler.

Soma um literal no registrador W


ADDLW
Sintaxe [label] ADDLW k
Operação (W) + k -> (W)
Status C, DC, Z
Codificação 0011 111x kkkk kkkk
Descrição O conteúdo do registrador W é somado
com o literal k e o resultado colocado no
registrador W
Ciclos 1

Soma o registrador W ao registro f


ADDWF
Sintaxe [label] ADDWF f,d
Operação (W) + (f) -> (dest)
Status C, DC, Z
Codificação 0011 0111 dfff ffff
Descrição Soma o conteúdo do registro W ao
registro f. Se <d> é igual a zero o
resultado é colocado no registro W. Se
<d> é igual a 1 o resultado é
armazenado no registro f
Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 3


Operação lógica <E> entre o literal k e o
ANDLW registro W
Sintaxe [label] ANDLW k
Operação (W) .AND. (k) -> (W)
Status Z
Codificação 0011 1001 kkkk kkkk
Descrição Realiza a operação lógica E (AND) entre
o conteúdo do registrador W com o
literal k. O resultado e colocado no
registrador W.
Ciclos 1

Soma o registrador W ao registro f


ANDWF
Sintaxe [label] ANDWF f,d
Operação (W) .AND. (f) -> (dest)
Status Z
Codificação 0000 0101 dfff ffff
Descrição Realiza a operação lógica <E> entre o
conteúdo do registrador W e do
registrador f. . Se <d> é igual a zero o
resultado é colocado no registro W. Se
<d> é igual a 1 o resultado é
armazenado no registro f
Ciclos 1
.

Limpa um bit do registro f


BCF
Sintaxe [label] BCF f,b

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 4


Operação 0 -> (f<b>)
Status nenhum
Codificação 0001 00bb bfff ffff
Descrição Faz o bit <b> do registro f igual a zero
Ciclos 1

set bit f
BSF
Sintaxe [label] BSF f,b
Operação 1 -> (f<b>)
Status nenhum
Codificação 0001 01bb bfff ffff
Descrição Faz o bit <b> do registro f um
Ciclos 1

Teste bit f, pula se zero


BTFSC
Sintaxe [label] BTFSC f,b
Operação desvia se f<b> for igual a zero
Status nenhum
Codificação 0001 10bb bfff ffff
Descrição Se o bit <b> no registro <f> for igual a
zero, pula a próxima instrução.
Ciclos 1 se não tiver o desvio, 2 se ocorrer o
desvio

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 5


Teste bit f, pula se um
BTFSS
Sintaxe [label] BTFSS f,b
Operação desvia se f<b> for igual a um
Status nenhum
Codificação 0001 11bb bfff ffff
Descrição Se o bit <b> no registro <f> for igual a
um, pula a próxima instrução.
Ciclos 1 se não tiver o desvio, 2 se ocorrer o
desvio

chama subrotina
CALL
Sintaxe [label] call k
Operação (PC) +1 ->TOS
k -> (PC <10Ç0>),
(PCLATH <4-3>) -> (PC<12 -11>)
Status nenhum
Codificação 0010 0kkk kkkk kkkk
Descrição Chama uma subrotina. Primeiro, o
endereço de retorno (PC + 1) é colocado
no stack. O endereço de 11 bits é
armazenado nos bits <10 0> do PC. Os
bits superiores do PC são carregados do
registro PCLATH.
Ciclos 2

Limpa o registro f
CLRF
Sintaxe [label] CLRF f
Operação 0 -> (f)
1 -> Z

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 6


Status Z
Codificação 0000 0001 1fff ffff
Descrição O conteúdo do registro <f> é feito igual
a zero e o bit Z é feito igual a um.
Ciclos 1

Limpa o registro W
CLRW
Sintaxe [label] CLRW
Operação 0 -> (W)
1 -> Z
Status Z
Codificação 0000 0001 0000 0011
Descrição O conteúdo do registro <W> é feito
igual a zero e o bit Z é feito igual a um.
Ciclos 1

Limpa o registro do watch dog


CLRWDT
Sintaxe [label] CLRWDT
Operação 0 -> (WDT)
0 -> WDT preescalador
1 -> TO (invertido)
1 -> PD (invertido)
Status TO, PD
Codificação 0000 0000 0110 0100
Descrição Faz o temporizador watch dog timer

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 7


igual a zero. Também zera o
preescalador do watch dog. Os bits de
estado TO e PD são feitos igual a 1.
Ciclos 1

Complementa a registro f
COMF
Sintaxe [label] COMF f,d
Operação (naof) ->destino
Status Z
Codificação 0000 1001 dfff ffff
Descrição O conteúdo do registrador <f> é
complementado. Se <d> for igual a zero
o resultado é colocado no registro W. Se
<d> for igual a 1 o resultado é colocado
no registro <f>.
Ciclos 1

Decrementa f
DECF
Sintaxe [label] DECF f,d
Operação (f) - 1 -> (dest)
Status Z
Codificação 0000 0011 dfff ffff
Descrição Decrementa o registro <f>. Se <d> for
igual a zero o resultado será colocado no
registro W. Se <d. for igual a 1 o
resultado será colocado no registro <f>.
Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 8


Decrementa f , pula se zero
DECFSZ
Sintaxe [label] DECFSZ f,d
Operação (f) - 1 -> (dest), desvia se resultado igual
a zero
Status nenhum
Codificação 0000 1011 dfff ffff
Descrição Decrementa o registro <f>. Se <d> for
igual a 0 o resultado será colocado no
registro W. Se <d> for igual a 1 o
resultado será colocado no registro <f>.
Se o resultado for zero a próxima
instrução é descartada.
Ciclos 1 se não ocorrer o desvio.
2 se ocorrer o desvio.

desvia para o endereço especificado


GOTO
Sintaxe [label] GOTO k
Operação k -> (PC <10 0>
PCLATH <4 3> -> (PC <12 11> )
Status nenhum
Codificação 0010 1kkk kkkk kkkk
Descrição Desvia o programa para o endereço K. O
onze bits k são carregados para o
registro do PC <10 0>. Os bits
superiores do PC são carregados a partir
do registro PCLATH.
Ciclos 2

incrementa f
INCF
Sintaxe [label] INCF f,d
Operação (f) +1 -> (dest)

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 9


Status Z
Codificação 0000 1010 dfff ffff
Descrição Incrementa o conteúdo do registro f. Se
<d> for igual a zero o resultado é
colocado no registro W. Se <d> for igual
a 1 o resultado é colocado no registro f.
Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 10


incrementa f, desvia se zero
INCFSZ
Sintaxe [label] INCFSZ f, d
Operação (f) +1 -> (dest). Desvia se resultado for
zero.
Status nenhum
Codificação 0000 1111 dfff ffff
Descrição Incrementa o conteúdo do registrador f.
Se <d> for igual a zero, o resultado e
colocado em W, se <d> for igual a um o
resultado e colocado em f. Se o resultado
for zero, a próxima instrução é
descartada.
Ciclos 1 se não ocorrer o desvio
2 se ocorrer o desvio

Ou inclusivo entre k e o registro W


IORLW
Sintaxe [label] IORLW k
Operação (W) .OR. (k) -> (W).
Status Z
Codificação 0011 1000 kkkk kkkk
Descrição Realiza a operação lógica OU entre o
registrador k e o registro W. O resultado
e colocado no registro W.
Ciclos 1

Ou inclusivo entre W e f
IORWF
Sintaxe [label] IORWF f,d
Operação (W) .OR. (f) -> (destino).
Status Z

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 11


Codificação 0011 0100 dfff ffff
Descrição Realiza a operação lógica OU entre o
registro f e o registro W. Se ,d. for igual
a 0 o resultado e colocado no registro W.
Se <d> for igual a 1 o resultado é
colocado no registro f.
Ciclos 1

Move literal para o registro W


MOVLW
Sintaxe [label] MOVLW k
Operação k ->(w)
Status nenhum
Codificação 0011 00xx kkkk kkkk
Descrição carrega o valor do literal K para o
registro W.
Ciclos 1

Move f
MOVF
Sintaxe [label] MOVF f,d
Operação (f) -> destino
Status Z
Codificação 0000 1000 dfff ffff
Descrição O conteúdo do registro f e colocado no
destino. Se d for igual a 0 o destino será
o registrador W, se d for igual a 1 o
destino será o próprio registrador. Esta
instrução pode ser utilizada para

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 12


verificarmos se o conteúdo de um
registrador e zero, pois o flag Z é
alterado.
Ciclos 1

Move o registro W para f


MOVWF
Sintaxe [label] MOVWF f
Operação (W) -> (f)
Status nenhum
Codificação 0000 0000 1fff ffff
Descrição Move dados do registrador W para o
registro f
Ciclos 1

nenhuma operação
NOP
Sintaxe [label] NOP
Operação nada
Status nenhum
Codificação 0000 0000 0000 0000
Descrição não executa nenhuma instrução. Útil
como ajuste fino de laços de
temporização.
Ciclos 1

retorno de interrupção
RETFIE
Sintaxe [label] RETFIE

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 13


Operação TOS -> (PC)
1 -> GIE
Status nenhum
Codificação 0000 0000 0000 1001
Descrição O topo do stack (TOS) e carregado no
PC. Os interrupts são habilitados de uma
forma global pelo flag GIOE. O
apontador do stack e diminuído de um
(pop).
Ciclos 2

retorna com um literal em W


RETLW
Sintaxe [label] RETLW k
Operação k -> (W)
TOS -> (PC)
Status nenhum
Codificação 11 01xx kkkk kkkk
Descrição O registrador W e carregado com o valor
k. O contador de programa assume o
valor do topo do stack. Eqüivale a uma
instrução de retorno de subrotina sendo
que o registro W retorna com o valor
desejado.
Ciclos 2

retorna da subrotina
RETURN
Sintaxe [label] RETURN

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 14


Operação TOS -> (PC)
Status nenhum
Codificação 0000 0000 0000 1000
Descrição O contador de programa assume o valor
do topo do stack. O apontador do stack e
atualizado (pop).
Ciclos 2

desloca f para esquerda usando carry


RLF
Sintaxe [label] RLF f,d
Operação veja a descrição
Status C
Codificação 0000 1101 dfff ffff
Descrição O conteúdo do registro <f> é deslocado
de um bit para a esquerda, sendo que o
oitavo bit e enviado para o carry. O
conteúdo do carry e enviado para o bit 0.
Se <d> for igual a zero o resultado e
colocado no registrador W, se for igual a
1 o resultado e colocado no registro <f>
Ciclos 1

desloca f para direita usando carry


RRF
Sintaxe [label] RRF f,d
Operação veja a descrição
Status C
Codificação 0000 1100 dfff ffff
Descrição O conteúdo do registro <f> é deslocado
de um bit para a direita, sendo que o bit
zero e enviado para o carry. O conteúdo
do carry e enviado para o bit 7. Se <d>

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 15


for igual a zero o resultado e colocado
no registrador W, se for igual a 1 o
resultado e colocado no registro <f>
Ciclos 1

Vai para o modo de repouso (stand by)


SLEEP
Sintaxe [label] SLEEP
Operação 00 -> WDT
0 -> pré-escalador do WDT
1 -> TO barra
0 -> PD barra
Status TO, PD barra
Codificação 0000 0000 0110 0011
Descrição O bit de power down, (PD) é feito igual
a zero. O bit de estouro de tempo (time
-out) e feito igual a 1. Os temporizadores
do watch dog timer e seu pré-escalador
são zerados. O processador assume o
modo SLEEP , com o oscilador parado.
Para sair deste modo somente com reset
ou interrupt.
Ciclos 1

Subtrai de um literal o valor do


SUBLW registrador W
Sintaxe [label] SUBLW k
Operação k - (W) -> (W)
Status C, DC, Z
Codificação 0011 110x kkkk kkkk
Descrição Subtrai do valor do literal <k> o
conteúdo do registrador W. O resultado e
colocado em W
Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 16


Subtrai o registro <f> do conteúdo do
SUBWF registro W.
Sintaxe [label] SUBWF f,d
Operação (f) - (W) -> (dest)
Status C, DC, Z
Codificação 0000 0010 dfff ffff
Descrição Subtrai do registrador f o conteúdo do
registrador W. Se <d> é igual a zero o
resultado é colocado no registro W. Se
<d> é igual a 1 o resultado é
armazenado no registro f
Ciclos 1

Inverte bits em f
SWAPF
Sintaxe [label] SWAPF f,d
Operação (f<3^0) -> (dest(<7.4>)
(f<7,4>) -> (dest(<3,0>)
Status nenhum
Codificação 0000 1110 dfff ffff
Descrição Troca de posição os nibles do registrador
f. Se <d> é igual a zero o resultado é
colocado no registro W. Se <d> é igual a
1 o resultado é armazenado no registro f
Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 17


Ou exclusivo entre k e o registro W
XORLW
Sintaxe [label] XORLW k
Operação (W) .XOR. (k) -> (W).
Status Z
Codificação 0011 1010 kkkk kkkk
Descrição Realiza a operação lógica OU
EXCLUSIVO entre o registrador k e o
registro W. O resultado e colocado no
registro W.
Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 18


Ou exclusivo entre W e f
XORWF
Sintaxe [label] XORWF f,d
Operação (W) .XOR. (f) -> (destino).
Status Z
Codificação 0011 0100 dfff ffff
Descrição Realiza a operação lógica OU
EXCLUSICO entre o registro f e o
registro W. Se ,d. for igual a 0 o
resultado e colocado no registro W. Se
<d> for igual a 1 o resultado ~e
colocado no registro f.
Ciclos 1

http://www.solbet.com.br O conjunto de instruções do PIC16F877A 19