Sistemas Embarcados
Microcontroladores PIC
Prof. Wanderley
Instruções
1.
2.
FORMAS DE CONSTRUÇÃO DAS INSTRUÇÕES
Instrução do tipo MNEMÔNICO K
Possui um operando K, o qual está armazenado
ou no registrador W, ou como parte do endereço
de destino em instruções de desvio.
Instrução do tipo MNEMÔNICO REG
Possui um operando REG que representa um dos
registradores disponíveis (SFR ou GPR).
Instruções
3.
Instrução do tipo MNEMÔNICO REG, DES
O operando REG representa um dos
registradores disponíveis (SFR ou GPR),
enquanto que DES consiste em um bit indicador
de destino da instrução, de modo que:
 Se DES for igual a w ou 0, o destino da
instrução é o registrador w;
 Se DES for igual a f ou 1, o destino da
instrução é o próprio registrador REG.
Instruções
4.
Instrução do tipo MNEMÔNICO REG, BIT
O operando REG representa um dos registradores disponíveis
(SFR ou GPR), enquanto que BIT indica qual dos oito bits do
registrador REG é o alvo da instrução.
EXEMPLO: Numa instrução “MNEMÔNICO PORTB, 1”, temos
que o bit 1 de PORTB será o alvo da instrução.
Instruções
1.
2.
3.
4.
5.
ASPECTOS E CONVENÇÕES IMPORTANTES
Existem instruções que alteram indiretamente os flags no
registrador STATUS;
f é uma abreviação de file register e é utilizado para especificar
um dos registradores internos do PIC (SFR ou GPR), exceto o
W;
d é utilizado para especificar o destino da instrução, se w ou f;
b é utilizado para especificar um dos 8 bits (0 a 7) do
registrador especificado pelo primeiro operando;
Cada exemplo de instrução traz consigo uma tabela contendo o
estado dos flags C, DC e Z antes e depois da execução da
instrução, sendo destacados quando alterados;
Instruções
6.
7.
ASPECTOS E CONVENÇÕES IMPORTANTES
O tempo de execução de cada instrução é exibido em termos
de ciclo de máquina (1 ciclo de máquina equivale a 4 ciclos de
clock0;
A base numérica utilizada nos exemplos é a hexadecimal,
sendo que o valor XX em hexadecimal é representado como
0xXX.
Instruções

MANIPULAÇÃO DE REGISTRADORES
Instruções de manipulação de registradores são utilizadas para:
 Armazenar dados;
 Movimentar dados; ou
 Modificar dados.
MOVLW k
Flags afetados: nenhum
Tempo exec.: 1 ciclo
Copia o valor da constante k para o registrador w.
0≤k≤255
Os flags C, DC e Z não são afetados
Instruções
MANIPULAÇÃO DE REGISTRADORES
MOVWF f
Flags afetados: nenhum
Copia o conteúdo de w para o registrador f.
O conteúdo de w não será afetado.
Os flags C, DC e Z não são afetados
Tempo exec.: 1 ciclo
Instruções
MANIPULAÇÃO DE REGISTRADORES
MOVF f,d
Flags afetados: z
Tempo exec.: 1 ciclo
Copia o conteúdo do registrador especificado pelo operando f para
o destino especificado pelo operando d.
d=W ou d=0 faz com que o conteúdo de f seja armazenado em w.
d=F ou d=1 faz com que o conteúdo de f seja armazenado em f.
Se o valor armazenado for nulo, então Z=1, senão Z=0.
Instruções
MANIPULAÇÃO DE REGISTRADORES
CLRF f
Flags afetados: z
Tempo exec.: 1 ciclo
Apaga o conteúdo do registrador indicado pelo operando f
(armazena 0 em f).
Esta instrução faz com que o flag Z=1.
CLRW
Flags afetados: z
Tempo exec.: 1 ciclo
Apaga o conteúdo do registrador w (armazena 0 em w).
Esta instrução faz com que o flag Z=1.
Instruções
MANIPULAÇÃO DE REGISTRADORES
INCF f,d
Flags afetados: z
Tempo exec.: 1 ciclo
Incrementa de 1 o conteúdo do registrador indicado pelo operando f,
armazenando o resultado no destino indicado pelo operando d.
Esta instrução faz com que o flag Z=1.
d=W ou d=0 faz com que o destino seja o registrador w.
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f.
Esta instrução afeta o flag z.
Instruções
MANIPULAÇÃO DE REGISTRADORES
DECF f,d
Flags afetados: z
Tempo exec.: 1 ciclo
Decrementa de 1 o conteúdo do registrador indicado pelo operando
f, armazenando o resultado no destino indicado pelo operando d.
Esta instrução faz com que o flag Z=1.
d=W ou d=0 faz com que o destino seja o registrador w.
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f.
Instruções
MANIPULAÇÃO DE REGISTRADORES
BCF f,b
Flags afetados: nenhum
Tempo exec.: 1 ciclo
Apaga (coloca em nível lógico 0) o bit representado pelo operando b
do registrador representado pelo operando f.
BSF f,b
Flags afetados: nenhum
Tempo exec.: 1 ciclo
Seta (coloca em nível lógico 1) o bit representado pelo operando b
do registrador representado pelo operando f.
Instruções
MANIPULAÇÃO DE REGISTRADORES
SWAPF f,d
Flags afetados: nenhum
Tempo exec.: 1 ciclo
Troca os nibbles do registrador representado pelo operando f
(0xXY=>0xYX), armazenando o resultado no destino indicado pelo
operando d.
d=W ou d=0 faz com que o destino seja o registrador w.
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f.
Instruções
OPERAÇÕES ARITMÉTICAS
ADDLW k
Flags afetados: Z, DC e C
Tempo exec.: 1 ciclo
Adição aritmética do valor representado pela constante k ao
conteúdo armazenado no registrador w, sendo o resultado
armazenado no próprio registrador w.
C=1 se o resultado ultrapassar 255 e c=0 caso contrário;
DC=1 se houver transbordo do terceiro para o quarto bit do
registrador e DC=0 caso contrário;
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções
OPERAÇÕES ARITMÉTICAS
Flags afetados: Z, DC e C
Tempo exec.: 1 ciclo
ADDWF f,d
Adição aritmética do conteúdo armazenado no registrador w ao
conteúdo armazenado no registrador especificado pelo operando f,
sendo o resultado armazenado no destino indicado por d.
d=W ou d=0 faz com que o destino seja o registrador w.
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f.
C=1 se o resultado ultrapassar 255 e c=0 caso contrário;
DC=1 se houver transbordo do terceiro para o quarto bit do
registrador e DC=0 caso contrário;
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções
OPERAÇÕES ARITMÉTICAS
SUBLW k
Flags afetados: Z, DC e C
Tempo exec.: 1 ciclo
Subtração aritmética do conteúdo armazenado no registrador w do
valor representado pela constante k, sendo o resultado armazenado
no próprio registrador w (w=k-w).
C=1 se o resultado ultrapassar 255 e c=0 caso contrário;
DC=1 se houver transbordo do terceiro para o quarto bit do
registrador e DC=0 caso contrário;
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções
OPERAÇÕES ARITMÉTICAS
Flags afetados: Z, DC e C
Tempo exec.: 1 ciclo
SUBWF f,d
Subtração aritmética do conteúdo armazenado no registrador w do
conteúdo armazenado no registrador especificado pelo operando f,
sendo o resultado armazenado no destino indicado por d.
d=W ou d=0 faz com que o destino seja o registrador w (w=f-w).
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f (f=f-w).
C=1 se o resultado ultrapassar 255 e c=0 caso contrário;
DC=1 se houver transbordo do terceiro para o quarto bit do
registrador e DC=0 caso contrário;
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções
OPERAÇÕES LÓGICAS
ANDLW k
Flags afetados: Z
Tempo exec.: 1 ciclo
AND lógico bit a bit do conteúdo da constante representada pelo
operando k com o conteúdo do registrador w, sendo o resultado
armazenado no registrador w (w = w AND k).
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções
OPERAÇÕES LÓGICAS
ANDWF f,d
Flags afetados: Z
Tempo exec.: 1 ciclo
AND lógico do conteúdo armazenado no registrador w com o
conteúdo armazenado no registrador especificado pelo operando f,
sendo o resultado armazenado no destino indicado por d.
d=W ou d=0 faz com que o destino seja o registrador w (w = f AND
w).
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f (f = f AND w).
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário.
Instruções
OPERAÇÕES LÓGICAS
IORLW k
Flags afetados: Z
Tempo exec.: 1 ciclo
OR lógico bit a bit do conteúdo da constante representada pelo
operando k com o conteúdo do registrador w, sendo o resultado
armazenado no registrador w (w = w OR k).
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções
OPERAÇÕES LÓGICAS
IORWF f,d
Flags afetados: Z
Tempo exec.: 1 ciclo
OR lógico do conteúdo armazenado no registrador w com o
conteúdo armazenado no registrador especificado pelo operando f,
sendo o resultado armazenado no destino indicado por d.
d=W ou d=0 faz com que o destino seja o registrador w (w = f OR
w).
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f (f = f OR w).
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário.
Instruções
OPERAÇÕES LÓGICAS
XORLW k
Flags afetados: Z
Tempo exec.: 1 ciclo
XOR lógico bit a bit do conteúdo da constante representada pelo
operando k com o conteúdo do registrador w, sendo o resultado
armazenado no registrador w (w = w XOR k).
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário;
Instruções
OPERAÇÕES LÓGICAS
XORWF f,d
Flags afetados: Z
Tempo exec.: 1 ciclo
OR lógico do conteúdo armazenado no registrador w com o
conteúdo armazenado no registrador especificado pelo operando f,
sendo o resultado armazenado no destino indicado por d.
d=W ou d=0 faz com que o destino seja o registrador w (w = f XOR
w).
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f (f = f XOR w).
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário.
Instruções
OPERAÇÕES LÓGICAS
COMF f,d
Flags afetados: Z
Tempo exec.: 1 ciclo
Complementa (inverte) o nível lógico dos bits do registrador
especificado pelo operando f, sendo o resultado armazenado no
destino indicado por d.
d=W ou d=0 faz com que o destino seja o registrador w (w = f’).
d=F ou d=1 faz com que o destino seja o próprio registrador
especificado pelo operando f (f = f’).
Z=1 se o valor armazenado em w for nulo e Z=0 caso contrário.
Instruções
OPERAÇÕES LÓGICAS
RLF f,d
Flags afetados: C Tempo exec.: 1 ciclo
O conteúdo do registrador especificado pelo operando f é deslocado
1 bit à esquerda;
O valor do flag C é armazenado no bit 0 do registrador f;
O bit excedente do registrador f é armazenado no flag C;
O resultado é armazenado no destino indicado pelo operando d.
C
Registrador f
Instruções
OPERAÇÕES LÓGICAS
RRF f,d
Flags afetados: C Tempo exec.: 1 ciclo
O conteúdo do registrador especificado pelo operando f é deslocado
1 bit à direita;
O valor do flag C é armazenado no bit 7 do registrador f;
O bit excedente do registrador f é armazenado no flag C;
O resultado é armazenado no destino indicado pelo operando d.
C
Registrador f
Instruções
OPERAÇÕES DE DESVIO
 O objetivo é desviar o fluxo do programa para outro local.
 Podem ser classificados como:
 desvios com retorno;
 desvios sem retorno.
 Desvios com retorno são também conhecidos como chamada de
sub-rotina.
 O fluxo do programa é desviado, retornando ao ponto de desvio.
 As chamadas de sub-rotina fazem uso da pilha.
Instruções
OPERAÇÕES DE DESVIO
 Nos desvios sem retorno o fluxo do programa é desviado para
outro ponto, seguindo então a partir de lá.
 Os desvios em retornos podem ser classificados ainda como:
 condicionais;
 incondicionais.
 Os desvios condicionais ocorrem se uma determinada condição
for verdadeira.
 Os desvios incondicionais ocorrem independente de qualquer
condição.
Instruções
OPERAÇÕES DE DESVIO
GOTO k
Flags afetados: nenhum Tempo exec.: 2 ciclos
Desvia o programa para o ponto especificado por k.
Trata-se de um desvio incondicional (sem retorno).
É importante lembrar que nos dispositivos com mais de 2k de
memória se faz necessário modificar o conteúdo de PCLATH de
acordo com o endereço especificado por k, de modo a acessar a
página de memória adequada.
Instruções
OPERAÇÕES DE DESVIO
CALL k
Flags afetados: nenhum Tempo exec.: 2 ciclos
Chamada de sub-rotina especificada por k.
A CPU se encarrega de guarda o valor atual de PC adicionado de 1
na pilha, desviando a seguir para a sub-rotina.
É importante lembrar que nos dispositivos com mais de 2k de
memória se faz necessário modificar o conteúdo de PCLATH de
acordo com o endereço especificado por k, de modo a acessar a
página de memória adequada.
Instruções
OPERAÇÕES DE DESVIO
RETURN
Flags afetados: nenhum Tempo exec.: 2 ciclos
Ao término da sub-rotina, faz-se necessário uma instrução RETURN,
responsável por restaurar o valor de PC armazenado na pilha.
RETLW k
Flags afetados: nenhum Tempo exec.: 2 ciclos
Ao término da sub-rotina, a instrução RETLW restaurará o valor de
PC armazenado na pilha e, além disso, copiará o valor do operando
k para o registrador w.
Instruções
OPERAÇÕES DE DESVIO
RETFIE
Flags afetados: nenhum Tempo exec.: 2 ciclos
Retorna de uma interrupção.
Liga o bit GIE (GIE=1) do registrador INTCON.
Instruções
OPERAÇÕES DE DESVIO
BTFSC f,b
Flags afetados: nenhum Tempo exec.: 1 ou 2 ciclos
Instrução de desvio condicional.
Testa o bit especificado pelo operando b do registrador especificado
pelo operando f, saltando a próxima instrução caso tal bit tenha nível
lógico 0.
A instrução levará 1 ciclo de máquina caso não ocorra desvio (o bit
testado tem nível lógico 1) e 2 ciclos de máquina caso contrário.
Instruções
OPERAÇÕES DE DESVIO
BTFSS f,b
Flags afetados: nenhum Tempo exec.: 1 ou 2 ciclos
Instrução de desvio condicional.
Testa o bit especificado pelo operando b do registrador especificado
pelo operando f, saltando a próxima instrução caso tal bit tenha nível
lógico 1.
A instrução levará 1 ciclo de máquina caso não ocorra desvio (o bit
testado tem nível lógico 0) e 2 ciclos de máquina caso contrário.
Instruções
OPERAÇÕES DE DESVIO
DECFSZ f,d
Flags afetados: nenhum Tempo exec.: 1 ou 2 ciclos
Instrução de desvio condicional.
Decrementa o conteúdo do registrador especificado pelo operando f
(subtrai de 1), saltando a próxima instrução caso o resultado após o
decremento seja nulo.
O resultado é armazenado no destino indicado pelo operando d.
A instrução levará 1 ciclo de máquina caso não ocorra desvio (o
resultado do decremento é não nulo) e 2 ciclos de máquina caso
contrário.
Instruções
OPERAÇÕES DE DESVIO
INCFSZ f,d
Flags afetados: nenhum Tempo exec.: 1 ou 2 ciclos
Instrução de desvio condicional.
Incrementa o conteúdo do registrador especificado pelo operando f
(adiciona 1), saltando a próxima instrução caso o resultado após o
decremento seja nulo.
O resultado é armazenado no destino indicado pelo operando d.
A instrução levará 1 ciclo de máquina caso não ocorra desvio (o
resultado do incremento é não nulo) e 2 ciclos de máquina caso
contrário.
Instruções
OPERAÇÕES DE CONTROLE
Para funções internas e controle de CPU.
NOP
Flags afetados: nenhum Tempo exec.: 1 ciclo
Não executa nenhuma operação.
Instruções
OPERAÇÕES DE CONTROLE
CLRWDT
Flags afetados: TO e PD
Tempo exec.: 1 ciclo
Limpa o contador do watchdog.
A instrução é utilizada periodicamente para impedir que a CPU
venha a resetar.
Os flags TO e PD são setados (colocados em nível lógico 1).
Instruções
OPERAÇÕES DE CONTROLE
SLEEP
Flags afetados: TO e PD
Tempo exec.: 1 ciclo
Aciona o modo de baixa potência (power-down mode) da CPU.
O processamento é parado.
O conteúdo da memória é preservado.
O flag TO é setado (colocado em nível lógico 1).
O flag PD é zerado (colocado em nível lógico 0).
Download

Document