Who's online

There are currently 0 users and 3 guests online.

Publicidade

ICD2-BR, PCB inferior

User login

PIC16: Instruções de movimentação de dados

Cada instrução da família mid-range tem 14 bits divididos entre um OPCODE, que especifica o tipo de instrução, e um ou mais operandos. Neste artigo, comentaremos as instruções relacionadas à movimentação de dados.

Nas instruções orientadas a bytes, 'f' denomina um registrador (file) e 'd' denomina um destino para a operação. Se 'd' é zero, o resultado é automaticamente armazenado no registrador W e caso 'd' seja um, o resultado é armazenado no registrador (file) especificado na instrução.

Nas intruções orientadas a bits, 'b' representa o bit a ser afetado pela operação e nas instruções que envolvam literais (constantes), 'k' representa uma constante de 8 ou 11 bits.

Todas as instruções são executadas em um único ciclo de instrução, com exceção das instruções que resultam em um teste condicional verdadeiro ou em uma alteração no contador de programa como resultado de uma instrução.

Conforme a figura 1, pode-se ter três formatos gerais de instruções e o tamanho do opcode pode variar de 3 a 6 bits dependendo do tipo de operação.

 

Figura 1. Formato de instruções. Fonte: Microchip Mid-Range Family Manual.

Na figura 2, temos todo o conjunto de instruções relacionadas aos microcontroladores PIC da família mid-range da Microchip. As instruções relacionadas à movimentação de dados são as instruções movf, movwf e movlw. Conforme podemos visualizar na tabela, a última instrução corresponde a uma operação com literal e, por isso, possui a letra L no opcode.

Figura 2. Conjunto de instruções da família mid-range.

 

Instruções

 

MOVLW - Move Literal to W

Tamanho da instrução: 1 Word

Ciclos de trabalho: 1 ciclo

Q1 - Decodifica

Q2 - Ler a literal 'k'

Q3 - Processar os dados

Q4 - Escrever no registrador W

Flags afetadas: Nenhuma

Sintaxe:

[label] MOVLW k, sendo k uma constante de 8 bits ([0d,255d] ou [0x00,0xFF])

Após esta instrução, o conteúdo do registrador W terá o valor da constante k

Exemplos:

movlw 0x33 ; W = 0x33
movlw REG ; W = endereço de REG
movlw HIGH (TABELA) ; W = 2 bytes mais signifcativos do endereço de TABELA

 

 

MOVF - Move f

Tamanho da instrução: 1 Word

Ciclos de trabalho: 1 ciclo

Q1 - Decodifica

Q2 - Ler registrador 'f'

Q3 - Processar os dados

Q4 - Escrever no destino

Flags afetadas: Z

Sintaxe:

[label] MOVF f,d sendo 'f' o endereço de 7 bits ([0d,127d] ou [0x00,0x7F]) do registrador e 'd' o bit que especifica o destino da operação (d=0, registrador W e d=1, o próprio registrador f). Caso d não seja informado na instrução, o valor padrão assumido é 0, ou seja, o destino da movimentação será o registrador W.

Caso o destino da operação seje o registrador W, este receberá o valor do registrador (file) F e a flag Z será setada de acordo com o valor de F. Caso o destino da operação seje o próprio registrador f, ocorrerá uma questão interessante: apenas o valor da flag Z será atualizada. Isso pode ser útil para testar se o valor de um registrador é zero ou não.

Exemplos:

movf delay,f  

Após a instrução acima, a flag Z poderá ser testada para verificar se o registrador delay é nulo ou não. Este comportamento não acontece na instrução movlw porque ela não altera nenhum bit do registrador STATUS.

movf k_high,w ; W = k_high, sendo k_high uma variável 

 

 

MOVWF - Move W to f

Tamanho da instrução: 1 Word

Ciclos de trabalho: 1 ciclo

Q1 - Decodifica

Q2 - Ler registrador 'f'

Q3 - Processar os dados

Q4 - Escrever no registrador 'f'

Flags afetadas: Nenhuma

Sintaxe:

[label] MOVWF f sendo 'f' o endereço de 7 bits ([0d,127d] ou [0x00,0x7F]) do registrador de destino.

Após esta instrução, o registrador W assumirá o valor do registrador 'f'.

Exemplos:

movwf delay ; A variável delay (file) assumirá o valor de W.  
movwf k_high ; k_high = W, sendo k_high uma variável 

 

Referências

PICmicro Mid-Range MCU Family Reference Manual. Dezembro de 1997.

 

Reply

The content of this field is kept private and will not be shown publicly.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.