All for Joomla All for Webmasters

Microcontroladores PIC16: Instruções assembly para 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.

node41 formato instrucoes

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.

node41 conj instrucoes

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.

Deixe um comentário

Certifique-se de preencher os campos indicados com (*). Não é permitido código HTML.