Cursos / Eletrônica / Projeto de Sistemas Microcontrolados / Aula
Nem todas as instruções de um microcontrolador PIC apresentam um mesmo padrão de execução. Essa diversidade de padrões de execução é caracterizada pela codificação binária que é dada para cada uma delas. Essas codificações binárias são distribuídas em quatro formatos típicos, caracterizando os quatro grupos de instruções citadas no início desta seção.
Código de operação | d | f | |||||||||||
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nesse formato, "f" representa uma nomeação de um registro, uma posição de memória ou uma variável, "d" representa uma nomeação de destino. Se "d" é 0, o resultado é colocado no registrador de trabalho W, e se "d" é 1, o resultado é armazenado no próprio registrador, na posição de memória ou na variável referenciada na instrução.
Exemplos de instruções que se utilizam desse formato:
|
; Adicione W com o valor presente em PORTA e |
;armazene resultado em PORTA. | |
|
; Adicione W com valor em PORTA e armazene |
;resultado em W. |
Código de operação | b | f | |||||||||||
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Nesse formato, "b" representa a denominação do bit afetado pela operação, enquanto "f" representa um endereço de registro ou variável no qual o bit está localizado.
Exemplo de uma instrução que se utiliza desse formato:
Código de operação | k (literal) | ||||||||||||
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Exemplo de instruções que se utilizam desse formato:
Código de operação | k (literal) | ||||||||||||
13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Exemplo de uma instrução que se utiliza desse formato:
Um quadro-resumo do conjunto de instruções dos microcontroladores PIC 16F, separadas por grupo de instruções aritméticas, lógicas, de movimentação, de desvio, de tratamento com bits e de controle é apresentado no Quadro 1 e uma análise completa do conjunto de instruções PIC 16, com exemplos, pode ser acessada em:
<http://www.cinelformacao.com/mpics/files/ud3/instr/index.htm>.
Instrução | Descrição da operação | No de ciclos | Flags afetados |
Aritméticas | |||
ADDLW k | W = W + k | 1 | C, DC, Z |
ADDWF f, d | d = W + f | 1 | C, DC, Z |
SUBLW k | W = k - W | 1 | C, DC, Z |
SUBWF f, d | d = f – W | 1 | C, DC, Z |
INCF f, d | d = f + 1 | 1 | Z |
DECF f, d | d = f – 1 | 1 | Z |
CLRF f | f = 0 | 1 | Z |
CLRW | W = 0 | 1 | Z |
Movimentação | |||
MOVLW k | W = k | 1 | - |
MOVWF f | f = W | 1 | - |
MOVF f,d | d = f | 1 | Z |
RLF f, d | Rotaciona f à esquerda através do carry | 1 | C |
RRF f, d | Rotaciona f à direita através do carry | 1 | C |
Lógicas | |||
ANDLW k | W = W.and. k | 1 | Z |
ANDWF f, d | d = W.and.f | 1 | Z |
IORLW k | W = W.or.k | 1 | Z |
IORWF f, d | d = W.or. f | 1 | Z |
XORLW k | W = W.xor.k | 1 | Z |
XORWF f, d | d = W.xor.f | 1 | Z |
COMF f,d | d = .not.f | 1 | Z |
SWAPF f, d | d = f<3:0> f<7:4> | 1 | - |
Operações com bit | |||
BCF f, b | Clear bit b de f | 1 | - |
BSF f, b | Set bit b de f | 1 | - |
BTFSS f,b | salta próxima instrução se Bit b de f = 1 | 1 (2) | - |
BTFSC f, b | salta próxima instrução se Bit b de f = 0 | 1 (2) | - |
INCFSZ f, d | d = f+1 e salta próxima instrução se d=0 | 1 (2) | - |
DECFSZ f, d | d = f-1 e salta próxima instrução se d=0 | 1 (2) | - |
Desvio | |||
GOTO k | Desvia execução do programa para k | 2 | - |
CALL k | Chama sub-rotina no endereço k | 2 | - |
RETURN | Retorna de sub-rotina | 2 | - |
RETLW k | Retorna de sub-rotina fazendo W = k | 2 | - |
RETFIE | Retorna de interrupção | 2 | - |
Controle | |||
NOP | Não faça nada | 1 | - |
CLRWDT | WDT = 0 e WDTPrescaler = 0 | 1 | /TO=1, /PD=0 |
SLEEP | Clock OFF, WDT = 0 e WDTPrescaler = 0 | 1 | /TO=1, /PD=1 |
Versão 5.3 - Todos os Direitos reservados