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
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
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.
ADDLW
Soma 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
ADDWF
Soma 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
ANDLW
Operaçã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
ANDWF
Soma 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
.
BCF
Limpa um bit do registro f
Sintaxe [label] BCF f,b
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
BSF
set 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
BTFSC
Teste 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
BTFSS
Teste 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
CALL
chama 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
CLRF
Limpa o registro f
Sintaxe [label] CLRF f
Operação 0 -> (f)
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
CLRW
Limpa 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
CLRWDT
Limpa 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
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
COMF
Complementa 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
DECF
Decrementa 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
DECFSZ
Decrementa 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.
GOTO
desvia 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
INCF
incrementa f
Sintaxe [label] INCF f,d
Operação (f) +1 -> (dest)
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