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