Instrução Assembler - Microcontrolador PIC - Instruções da família PIC - Microchip...
Instrução Assembler - Microcontrolador PIC
INSTRUÇÕES ASSEMBLER PIC - Microchip
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 1/103
Através das Instruções o código-fonte pode executar as funções determinadas pelo programador para controlar o sistema externo de acordo com o projeto.
A Instrução Assembler é formada por uma série de palavras (mnemônicos) que traduzem a função a ser realizada. Normalmente, cada fabricante desenvolve seu próprio conjunto de instruções que tem aplicação exclusiva nos seus componentes, sem nenhuma compatibilidade com outros fabricantes. Para o programador, cabe estudar cada instrução no seu formato, função e aplicação de acordo com o controlador empregado no projeto.
É claro que, se existem vários projetos de aplicação desenvolvidos por uma única empresa, esta optará pelo uso de um só fabricante de controlador por uma simples questão de custo/investimento na educação dos programadores para a linguagem de programação (conjunto de instruções) e características de intercambio de programas ou trechos de programas em aplicações diversas.
No geral, entre os diversos controladores existentes no mercado, a função que se deseja realizar com uma instrução em qualquer dispositivo não altera, apenas o nome da instrução (mnemônico) é que sofre uma alteração.
Para o nosso caso, serão utilizadas as instruções da família PIC – Microchip, que reúne um conjunto de 37 instruções aplicadas em controladores de 8 bits (Mid Range MCU).
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 2/103
Índice de Instruções As instruções são agrupadas em três categorias básicas de aplicação:
ADDWFSoma o valor contido em W com valor contido em F1C, DC, Z* ANDWFOperação AND (E) entre o valor contido em W e valor contido em F1Z* CLRFColoca valor 0 (zero) no registro F1Z* CLRWColoca valor 0 (zero) no registro W1Z* COMF"Complemento de 1" (1's complement) do valor contido em F1Z DECFDecrementa uma unidade do valor contido em F1Z*
DECFSZDecrementa uma unidade do valor contido em F e salta a instrução seguinte se o resultado for 0 (zero)1 (2)*
INCFIncrementa uma unidade no valor contido em F1Z*
INCFSZIncrementa uma unidade no valor contido em F e salta a instrução seguinte se o resultao for 0 (zero)1 (2)*
IORWFOperação OR (OU) entre o valor contido em W e valor contido em F1Z*
MOVFMover o valor contido no registro F para o destino especificado1Z* MOVWFMover o valor contido em W para o registro F1* NOPNenhuma operação (No Operation)1* RLFRotaciona valor contido em F à esquerda através do bit CARRY1C RRFRotaciona valor contido em F à direita através do bit CARRY1C SUBWFSubtrai o valor contido em W do valor contido em F1C, DC, Z* SWAPFTroca NIB_LO com NIB_HI no registro F1*
XORWFOperação EXCLUSIVE OR (OU EXCLUSIVO) entre o valor contido em W e valor contido em F1Z*
BCFColoca valor '0' (clear) no bit F1* BSFColoca valor '1' (set) no bit F1*
BTFSCTesta o valor (nível lógico) do bit F e salta a instrução seguinte se valor do bit for igual a '0' (clear)1 (2)*
BTFSSTesta o valor (nível lógico) do bit F e salta a instrução seguinte se valor do bit for igual a '1' (set)1 (2)*
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 3/103
ADDLWSoma valor literal ao valor contido em W1C, DC, Z* ANDLWOperação AND (E) entre o valor literal e valor contido em W1Z* CALLChama sub-rotina2/TO, /PD* CLRWDTColoca valor zero no registro WDT (Watchdog Timer)1 GOTOVá para (o endereço indicado)2* IORLWOperação OR (OU) entre o valor literal e valor contido em W1Z* MOVLWMover o valor literal para o registro W1* RETFIERetorna do Tratamento das Interrupções2* RETLWRetorna o valor literal no registro W2 RETURNRetorna de uma sub-rotina2* SLEEPVai para modo baixo consumo1/TO, /PD SUBLWSubtrai valor literal do valor contido em W1C, DC, Z
XORLWOperação EXCLUSIVE OR (OU EXCLUSIVO) entre o valor literal e valor contido em W1Z*
Cada instrução se apresenta como um capítulo onde é descrita em sua função com os detalhes necessários para a compreensão de sua operação, incluídos exemplos de aplicação com amostra da sintaxe no código_fonte e como ocorre o comportamento dos bits e registros quando a instrução é executada.
Quadro Demonstrativo Contém as informações básicas para consulta de aplicação indicando a função e o uso a instrução.
Forma contraída da instrução - normalmente formado pelas iniciais da frase que descreve a operação - o compilador dispões dos códigos de conversão adequados para esta forma.
INSTRUÇÃOFrase que descreve a operação realizada pela instrução reproduzindo o texto na língua de origem (ingles).
SINTAXEForma que as instruções devem ser escritas no código_fonte para que o compilador interprete corretamente a conversão para código de máquina.
DESCRIÇÃODescreve a operação da instrução com detalhes.
Quantidade de Ciclos de Máquina necessários para que a instrução seja executada completamente - tempo de execução da instrução, dependente da frequencia do clock do dispositivo aplicado.
STATUSBit do registro STATUS que sofre alteração quando a execução da instrução resulta em situação definida pelo fabricante (ver quadro descritivo do registro STATUS).
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 4/103
Organização do Registro
Lembrar que todos os sistemas processados tem como base as Técnicas Digitais fundamentais logo, a estrutura do registro onde a informação é armazenada segue todos os padrões habituais de formato, nomes, localização de bit etc., etc., etc..
Para a exposição do funcionamento das instruções e seu emprego, os exemplos serão sempre baseados nos elementos identificados como mostra a figura abaixo:
│ ┌────────> [ nome bit ] ─────> BOTAO
│ └─────> Bit menos significativo │LSB - Least Significant Bit
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 5/103
[ posição bit ] -número inteiro, no intervalo de 0 a 7, que identifica a posição do bit em um registro, contado sempre da direita para a esquerda, começando no bit 0 (LSB - bit menos significativo).
BTFSC[ nome registro ],[ posição bit ]; VERIFICA O ESTADO DO BIT [ posição bit ] DO ; REG. [ nome registro ]
BTFSCPORTA,6; VERIFICA O ESTADO DO BIT 6 DO REG. PORTA
┌──────> [ posição bit ] ───> 6 │
[ nome bit ] -nome que identifica o bit dentro do registro em substituição do número que identifica a [ posição bit ] - o nome do bit pode ser estabelecido pelo fabricante (Registros de Funções Especiais - SFR):
BCF[ nome registro ],[ nome bit ]; DESLIGA O BIT [ nome bit ] NO REGISTRO ; [ nome registro ]
Ou pode ser estabelecido pelo programador (Registros de Uso Geral) e devidamente declarado na área de Diretivas.
BCF[ nome bit ]; DESLIGA O BIT [ nome bit ]
Bento Alves Cerqueira Cesar Filho - R 1.4 - Mai/09 6/103
[ nome registro ] -identifica um registro na memória (Ram ou Programa) a partir de um nome - o nome do registro pode ser estabelecido pelo fabricante (Registros de Funções Especiais - SFR):
Instruções da família PIC - Microchip de 8 bits com exemplos da técnica de aplicação e resultados obtidos - esta versão substitui anteriormente publicada.