Skip to content

Instruções

DenisWP edited this page Jun 19, 2014 · 5 revisions

###Métodos das instruções no nosso simulador:

setup(binario referente a instrucao) > Inicia a instrução.

run(memoria,cpu) > executa a instrução.

ADDWF

Com esta instrução, adicionamos o conteúdo do registo 'W' com o conteúdo de um arquivo de registro. Se 'd' é 0 (zero), o resultado é armazenado no registrador 'W', se 'd' é 1 (um), o resultado é armazenado de volta para o arquivo do registrador 'f'.

Sintaxe: [label] ADDWF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: C, DC, Z

ANDWF

Esta instrução executa uma função lógica AND entre o registrador 'W' com o 'f'. Se 'd' for igual a 0 (zero), o resultado será armazenado no registrador 'W'. Se 'd' for igual a 1 (um) o resultado volta a ser armazenado no registrador 'f'.

Sintaxe: [label] ANDWF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Z

CLRF

Nesta instrução, fará com que o conteúdo do registrador 'f' seja apagado e o bit 'Z' setado.

Sintaxe: [label] CLRF f

Operandos: 0 <= f <= 31

Status afetados: Z

CLRW

A instrução apagará o registrador 'W'.

Sintaxe: [label] CLRW

Operandos: Não possui

Status afetados: Z

COMF

A instrução fará a complementação do conteúdo do registrador 'f'. Se 'd' for igual a 0 (zero) o resultado será armazenado no registrador 'W'. Se 'd' for igual a 1 (um) o resultado será armazenado novamente no registrador 'f'.

Sintaxe: [label] COMF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Z

DECF

A instrução irá decrementar o registrador 'f'. Se 'd' for igual a 0 (zero) o resultado será armazenado no registrador 'W'. Se 'd' for igual a 1 (um) o resultado será armazenado no registrador 'f'.

Sintaxe: [label] DECF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Z

DECFSZ

A instrução fará o decremento do conteúdo do registrador 'f', e pulará se o resultado for igual a 0 (zero). Se 'd' for igual a 0 (zero), o resultado é armazenado no registrador 'W', se for igual a 1 (um), será armazenado de volta no registrador 'f'. Se o resultador for igual a 0 (zero) irá pular a instrução e executará uma 'NOP' tornando uma instrução de dois ciclos.

Sintaxe: [label] DECFSZ f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Nenhum

INCF

O conteúdo do registrador 'f' são aumentados em 1. Se 'd' é 0 (zero), o resultado é armazenado no registrador 'W', se 'd' é 1, o resultado é armazenado de volta para o arquivo do registrador 'f'.

Sintaxe: [label] INCF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Z

INCFSZ

A instrução fará a incrementação do conteúdo do registrador 'f'. Se 'd' for igual a 0 (zero) o resultado será armazenado no registrador 'W', se for igual a 1 (um) será armazenado de volta no registrador 'f'. Se o resultado for igual a 0 (zero) pulará para próxima instrução e executará uma 'NOP' tornando uma instrução de dois ciclos.

Sintaxe: [label] INCFSZ f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Nenhum

IORWF

Com esta instrução executamos uma função lógica 'OU' entre o registrador 'W' e o arquivo do registrador 'f'. Se 'd' é 0 (zero), o resultado é armazenado no registrador 'W', se 'd' é 1 (um), o resultado é armazenado de volta para o registrador de arquivo.

Sintaxe: [label] IORWF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Z

MOVF

O conteúdo do registrador 'f' são movidos para 'd'. Se 'd' for igual a 0 (zero) o conteúdo será movido para o registrador 'W', se for igual a 1 (um) será movido para o registrador 'f'.

Sintaxe: [label] MOVF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Z

MOVWF

A instrução moverá os dados do registrador 'W' para o registrador 'f'.

Sintaxe: [label] MOVWF f

Operandos: 0 <= f <= 31

Status afetados: Nenhum

NOP

Esta é uma instrução de nenhuma operação. Quando esta for executada, nada vai acontecer. Não tem nenhuma ocorrência a qualquer coisa no programa. Esta instrução é usada para criar atrasos de tempo para sincronização ou outros fins.

Sintaxe: [label] NOP

Operandos: Nenhum

Status afetados: Nenhum

RLF

Esta instrução irá mudar todos os bits do registrador 'f' uma posição para a esquerda. O bit 'MSB' será enviado para o Carry e o bit Carry será enviado de volta para o registro da 'LSB'. Se 'd' é 0 (zero), o resultado é armazenado no registrador 'W', se 'd' é 1 (um), o resultado é armazenado de volta para o arquivo do registrador 'f'.

Sintaxe: [label] RLF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: C

RRF

Esta instrução irá mudar todos os bits do registrador 'f' uma posição para direita. O bit 'LSB' será enviado para o Carry e o bit Carry será enviado de volta ao 'MSB' do registrador. Se 'd' é 0 (zero), o resultado é armazenado no registrador 'W', se 'd' é 1 (um), o resultado é armazenado de volta para o arquivo do registrador 'f'.

Sintaxe: [label] RRF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: C

SUBWF

Fará a subtração do registrador 'W' de 'f'.

Sintaxe: [label] SUBWF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: C, DC, Z

SWAPF

Esta instrução é usada para trocar as mordidelas de um registrador. Quando executado, os bits 0-3 serão trocados com os bits 4-7. Se 'd' é 0 (zero), o resultado é armazenado no registrador 'W', se 'd' é 1 (um), o resultado é armazenado de volta para o arquivo do registrador 'f'. O Estado não é afetado com esta instrução.

Sintaxe: [label] SWAPF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Nenhum

XORWF

Com esta instrução executamos uma função lógica 'OU EXCLUSIVO' entre o registrador 'W' e o arquivo de registrador 'f'. Se 'd' é 0 (zero), o resultado é armazenado no registrador 'W', se 'd' é 1 (um), o resultado é armazenado de volta para o registrador de arquivo.

Sintaxe: [label] XORWF f,d

Operandos: 0 <= f <= 31 d ∈ [0,1]

Status afetados: Z

Operações Orientadas por Bits

BCF

A instrução BCF recebe um 'b' e um 'f' e faz com que o bit 'b' no registrador 'f' seja limpado (definido como zero).

Sintaxe: [label] BCF f,b

Operandos: 0 <= f <=31 0 <= b <= 7

Status afetados: nenhum.

BSF

A instrução BSF recebe um 'b' e um 'f' e faz com que o bit 'b' no registrador 'f' seja setado (definido como 1).

Sintaxe: [label] BSF f,b

Operandos: 0 <= f <=31 0 <= b <= 7

Status afetados: nenhum.

BTFSC

Na instrução BTFSC se o bit 'b' no registrador 'f' é 0 (zero) a próxima instrução é ignorada. Se bit 'b' é zero então a próxima instrução anexada durante o processo de execução de instruções atual é descartada e um NOP é executado em seu lugar, fazendo desta uma instrução de dois ciclos.

Sintaxe: [ label ] BTFSC f,b

Operandos: 0 <= f <=31 0 <= b <= 7

Status afetados: nenhum.

BTFSS

Na instrução BTFSC se o bit 'b' no registrador 'f' é 1 (um) a próxima instrução é ignorada. Se bit 'b' é Um então a próxima instrução anexada durante o processo de execução de instruções atual é descartada e um NOP é executado em seu lugar, fazendo desta uma instrução de dois ciclos.

Sintaxe: [ label ] BTFSS f,b

Operandos: 0 <= f <=31 0 <= b <= 7

Status afetados: nenhum.

Operações Literal e Controle

ANDLW

Com esta instrução executamos uma função lógica AND entre o registrador 'W' e o valor literal k. O resultado é armazenado de volta para o registrador 'W'.

Sintaxe: [label] ANDLW k

Operandos: 0 <= k <= 255

Status afetados: Z

CALL

CLRWDT

Esta instrução irá limpar o Watchdog timer. O Watchdog timer é muito útil e independente no chip temporizador que é usado para assegurar que o chip estárá funcionando normalmente. Quando o Watchdog timer estiver ativado, ele irá exigir periodicamente um Watchdog timer do reset via instrução do software. Os coders colocaram esta instrução em posições estrategicamente onde irá redefinir periodicamente o Watchdog timer . Se o temporizador não é reposto dentro de um período de tempo pré-selecionado, o Watchdog timer irá redefinir o PIC e o programa vai começar de novo, porque ele vai assumir que o fluxo do programa é interrompido de caindo em um loop infinito.

Sintaxe: [label] CLRWDT

Operandos: Nenhum

Status afetados: Z

GOTO

Esta é uma forma muito comum de alterar o fluxo normal do program. O GOTO vem junto com uma linha do programa. Quando o fluxo atinge um programa de instruções IR, então ele passa diretamente para a linha do programa colocada no campo k. O campo k pode ser de 0 a 2047, um número de 11 bits.

Sintaxe: [label] GOTO k

Operandos: 0 <= k <= 511

Status afetados: Nenhum

IORLW

Com esta instrução executamos uma função lógica OR entre o registrador 'W' e o valor literal k. O resultado é armazenado de volta para o registrador 'W'.

Sintaxe: [label] IORLW k

Operandos: 0 <= k <= 255

Status afetados: Z

MOVLW

OPTION

RETLW

Esta instrução opera exatamente como a instrução RETURN. A única diferença é que, logo após uma instrução RETLW, o registrador 'W' terá o valor do campo k como conteúdo.

Sintaxe: [label] RETLW k

Operandos: 0 <= k <= 255

Status afetados: Nenhum

SLEEP

Esta instrução irá colocar o chip em modo de sono. Modo de sono é um estado onde o PIC vai chamar um valor tão baixo quanto atual 0.1uA, e isso só vai ter algumas operações básicas ainda correndo para acordar-lo. O modo de sono é basicamente para a manutenção de energia.

Quando a instrução SLEEP é executada, o Watchdog temporizador e o prescaller são apagadas. O bit Power Down (PD) também é cancelado, a Time Out bit Estado (TO) será definido. O chip então entra em modo de sono e o oscilador pára.

Sintaxe: [label] SLEEP

Operandos: Nenhum

Status afetados: TO, PD, RBWUF

TRIS

XORLW

Com esta instrução executamos uma função lógica EXCLUSIVE OR entre o registrador 'W' e o valor literal k. O resultado é armazenado de volta para o registrador 'W'.

Sintaxe: [label] XORLW k

Operandos: 0 <= k <= 255

Status afetados: Z