Post on 30-Jun-2015
Coleção TUTPRO
Tutoriais sobre programação de microcontroladores
Solbet LtdaExpandindo 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árioRecursos necessários para execução deste tutorial...............................................................................3Descrição das instruções do PIC16F877 em ordem alfabética...........................................................3
ADDLW...........................................................................................................................................3ADDWF...........................................................................................................................................3ANDLW...........................................................................................................................................4ANDWF...........................................................................................................................................4BCF..................................................................................................................................................4BSF..................................................................................................................................................5BTFSC.............................................................................................................................................5BTFSS..............................................................................................................................................6CALL...............................................................................................................................................6CLRF...............................................................................................................................................6CLRW..............................................................................................................................................7CLRWDT.........................................................................................................................................7COMF..............................................................................................................................................8DECF...............................................................................................................................................8DECFSZ...........................................................................................................................................9GOTO..............................................................................................................................................9INCF................................................................................................................................................9INCFSZ..........................................................................................................................................11IORLW...........................................................................................................................................11IORWF...........................................................................................................................................11MOVLW........................................................................................................................................12MOVF............................................................................................................................................12MOVWF........................................................................................................................................13NOP...............................................................................................................................................13RETFIE..........................................................................................................................................13RETLW..........................................................................................................................................14RETURN.......................................................................................................................................14RLF................................................................................................................................................15RRF................................................................................................................................................15SLEEP............................................................................................................................................16SUBLW..........................................................................................................................................16SUBWF..........................................................................................................................................17SWAPF...........................................................................................................................................17XORLW.........................................................................................................................................18XORWF.........................................................................................................................................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éticaAs 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.
ADDLWSoma um literal no registrador W
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
ADDWFSoma o registrador W ao registro f
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
ANDLWOperação lógica <E> entre o literal k e o 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
ANDWFSoma o registrador W ao registro f
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
.
BCFLimpa um bit do registro f
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
BSFset bit f
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
BTFSCTeste bit f, pula se zero
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
BTFSSTeste bit f, pula se um
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
CALLchama subrotina
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
CLRFLimpa o registro f
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
CLRWLimpa o registro W
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
CLRWDTLimpa o registro do watch dog
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
COMFComplementa a registro f
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
DECFDecrementa f
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
DECFSZDecrementa f , pula se zero
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.
GOTOdesvia para o endereço especificado
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
INCFincrementa f
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
INCFSZincrementa f, desvia se zero
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
IORLWOu inclusivo entre k e o registro W
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
IORWFOu inclusivo entre W e f
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
MOVLWMove literal para o registro W
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
MOVFMove f
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
MOVWFMove o registro W para f
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
NOPnenhuma operação
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
RETFIEretorno de interrupção
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
RETLWretorna com um literal em W
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
RETURNretorna da subrotina
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
RLFdesloca f para esquerda usando carry
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
RRFdesloca f para direita usando carry
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
SLEEPVai para o modo de repouso (stand by)
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
SUBLWSubtrai de um literal o valor do 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
SUBWFSubtrai o registro <f> do conteúdo do 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
SWAPFInverte bits em f
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
XORLWOu exclusivo entre k e o registro W
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
XORWFOu exclusivo entre W e f
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