You are on page 1of 9

DIRETIVAS ASSEMBLER

PIC - Microchip

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


1/9
DIRETIVAS ASSEMBLER
As Diretivas são instruções assembler que são escritas no código-fonte, mas não são transformadas em
códigos operacionais. O compilador é orientado através das diretivas quando monta o arquivo executável.
Portanto, as diretivas não são gravadas na memória de programa do controlador.

A partir das Diretivas, o programador descreve as correlações existentes entre os Nomes empregados no
código-fonte com os bits, registros e constantes previstos para uso no programa.

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


2/9
#DEFINE
DIRETIVA #DEFINE
#DEFINE [ nome ] [ texto ]
SINTAXE
#DEFINE [ nome ] [ instrução ]
DESCRIÇÃO Define a substituição do [ nome ] no código-fonte pelo [ texto ] ou [ instrução ]

Esta diretiva substitui o [ nome ] encontrado no código-fonte pelo [ texto ] ou [ instrução ] identificado na
Área de Diretivas.

No texto do código-fonte utiliza-se o Nome, que é facilmente identificável pelo programador. Quando o
compilador encontra o Nome, substitui pelo texto.

EXEMPLO:

- Nome relacionado a uma linha de Instrução

O Nome – BANK0 – substitui a linha de instrução – BCF STATUS,RP0 – no código-fonte.

#DEFINE BANK0 BCF STATUS,RP0 ; ATIVA O BANCO 0 (ZERO) DE MEMÓRIA

Este procedimento só é possível para a substituição de uma única linha de instrução. Para a
substituição de duas ou mais linhas de instrução (sequencia) deve-se criar uma Macro.

- Nome relacionado à Posição de um Bit em um Registro

O Nome – BOTAO – substitui a posição do bit – 3 – do registro – PORTB – no código-fonte.

#DEFINE BOTAO PORTB,3 ; RELACIONA O NOME ‘BOTAO’ A RB3

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


3/9
EQU
DIRETIVA EQU (EQUAL)
[ nome ] EQU [ valor ]
SINTAXE
[ nome ] EQU [ expressão ]
DESCRIÇÃO Define a substituição do [ nome ] no código-fonte pelo [ texto ] ou [ expressão ]

Esta diretiva relaciona o Nome determinado pelo programador a um valor numérico que pode ser
representado na forma binária, decimal ou hexadecimal.

No lugar de um valor numérico pode-se utilizar uma expressão aritmética onde os valores numéricos dentro
da expressão podem ser representados na forma binária, decimal ou hexadecimal.

O compilador somente interpreta valores numéricos inteiros e positivos dentro do intervalo de 0 a 255
(máximo valor para 8 bits).

O resultado de uma expressão deve ser um valor numérico inteiro e positivo dentro do intervalo de 0 a 255
(máximo valor para 8 bits).

EXEMPLO:

- Nome relacionado a uma Expressão

REFERENCIA EQU (.256 -.123) ; RELACIONA O NOME ‘REFERENCIA’ À


; EXPRESSÃO (256 – 123) = 133

- Nome relacionado a uma Constante com Valor Binário

REFERENCIA EQU B’0010011’ ; RELACIONA O NOME ‘REFERENCIA’ AO VALOR


; BINÁRIO 0010011 (19 DECIMAL)

- Nome relacionado a uma Constante com Valor Decimal

REFERENCIA EQU .234 ; RELACIONA NOME ‘REFERENCIA’ AO VALOR


; DECIMAL 234

- Nome relacionado a uma Constante com Valor Hexadecimal

REFERENCIA EQU 0x3F ; RELACIONA NOME ‘REFERENCIA’ AO VALOR


; HEXADECIMAL 0X3F (63 DECIMAL)

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


4/9
#INCLUDE
DIRETIVA #INCLUDE
#INCLUDE [ nome arquivo inclusão ]
SINTAXE #INCLUDE “[ nome arquivo inclusão ]”
#INCLUDE <[ nome arquivo inclusão ]>
DESCRIÇÃO Inclui um arquivo fonte adicional.

O arquivo especificado é lido como um código-fonte e incluído como texto completo a partir da posição
onde a diretiva #INCLUDE estiver escrita, dentro do código-fonte desenvolvido.

Esta diretiva deverá ser usada para incluir no código-fonte o arquivo padrão do controlador escolhido. Neste
arquivo estão definidos todos os Nomes dos registros e bits do dispositivo selecionado, não sendo necessário
defini-los dentro do seu código-fonte.

Esta diretiva pode ser usada para incluir no seu código-fonte arquivos contendo sequencias funcionais já
desenvolvidas e testadas – Macros - tomando o cuidado de declarar os Nomes de todas as variáveis e
constantes existentes no arquivo.

Os arquivos de inclusão devem possuir a extensão .inc .

A busca do arquivo de inclusão será feita na seguinte ordem:


- diretório de trabalho corrente
- diretório de arquivos fonte
- diretório de arquivos executáveis do programa-fonte (MPASM)

Se o arquivo de inclusão for especificado com um caminho (path), a busca será feita apenas neste caminho
especificado.

EXEMPLO:

- Se [ nome arquivo inclusão ] não contiver espaços

#INCLUDE P16F628A.INC ; ARQUIVO PADRÃO DO CONTROLADOR

ou

#INCLUDE MACRO.INC ; ARQUIVO DE MACRO

- Se [ nome arquivo inclusão ] contiver espaços

#INCLUDE “MACRO CONTADOR.INC” ; ARQUIVO DE MACRO

ou

#INCLUDE <MACRO CONTADOR.INC> ; ARQUIVO DE MACRO

- Se [ nome arquivo inclusão ] contiver caminho especificado

#INCLUDE “c:\Programas\MPASM\MACRO.INC> ; ARQUIVO DE MACRO EM POSIÇÃO DEFINIDA

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


5/9
CBLOCK
DIRETIVA CBLOCK
SINTAXE CBLOCK [ endereço memória ]
Define uma lista sequencial de Nomes de variáveis a partir do[ endereço
DESCRIÇÃO
memória ]

Esta diretiva define uma lista de Nomes de variáveis que serão alocadas na memóris RAM a partir d
endereço especificado. A primeira variável da lista é alocada no endereço de memória especificado,
enquanto as demais variáveis da lista são alocadas sequencialmente nos endereços seguintes.

Os endereços e disponibilidades de espaço nos bancos de memória dependem do modelo do controlador


portanto, o programador deve necessáriamente consultar a folha de dados (datasheet) do componente.

A lista de Nomes termina quando a diretiva ENDC é encontrada.

EXEMPLO:

CBLOCK 0X20 ; LISTA DE VARIÁVEIS A PARTIR DO END. 20H


; DO BANCO 0 DE MEMÓRIA
W_TEMP ; VARIÁVEL ALOCADA NO END. 20H
STATUS_TEMP ; VARIÁVEL ALOCADA NO END. 21H
FLAGS ; VARIÁVEL ALOCADA NO END. 22H

ENDC ; FIM DA LISTA DE VARIÁVEIS

ATENÇÃO: a lista de variáveis não pode exceder o último endereço da memória RAM do Banco de
Memória (especificado pelo endereço incial – no caso do exemplo, o endereço 0x20 encontra-se
no Bank 0). Se necessário, acrescentar outras listas, como no exemplo abaixo:

CBLOCK 0XA0 ; LISTA DE VARIÁVEIS A PARTIR DO END. A0H


; DO BANCO 1 DE MEMÓRIA
CONTAGEM ; VARIÁVEL ALOCADA NO END. A0H
DIFERENCA ; VARIÁVEL ALOCADA NO END. A1H
TEMPO ; VARIÁVEL ALOCADA NO END. A2H

ENDC ; FIM DA LISTA DE VARIÁVEIS

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


6/9
ENDC
DIRETIVA ENDC
SINTAXE ENDC
DESCRIÇÃO Determina o fim de uma lista sequencial de Nomes de variáveis.

Esta diretiva indica o fim de uma lista de variáveis iniciada pela diretiva CBLOCK.

É obrigatório o seu uso para cada diretiva CBLOCK empregada no código-fonte.

EXEMPLO:

CBLOCK 0X20 ; LISTA DE VARIÁVEIS A PARTIR DO END. 20H


; DO BANCO 0 DE MEMÓRIA
W_TEMP ; VARIÁVEL ALOCADA NO END. 20H
STATUS_TEMP ; VARIÁVEL ALOCADA NO END. 21H
FLAGS ; VARIÁVEL ALOCADA NO END. 22H

ENDC ; FIM DA LISTA DE VARIÁVEIS

ou

CBLOCK 0XA0 ; LISTA DE VARIÁVEIS A PARTIR DO END. A0H


; DO BANCO 1 DE MEMÓRIA
CONTAGEM ; VARIÁVEL ALOCADA NO END. A0H
DIFERENCA ; VARIÁVEL ALOCADA NO END. A1H
TEMPO ; VARIÁVEL ALOCADA NO END. A2H

ENDC ; FIM DA LISTA DE VARIÁVEIS

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


7/9
END
DIRETIVA END
SINTAXE END
DESCRIÇÃO Determina o fim de um código-fonte.

Esta diretiva indica o fim de um código-fonte. É necessária ao menos uma diretiva END no final do código-
fonte para indicar ao compilar o término da sequencia de instruções do programa.

ATENÇÃO: em um arquivo de código-fonte , é obrigatório o uso de um, e somente um comando END.

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


8/9
ORG
DIRETIVA ORG
SINTAXE ORG [ endereço memória ]
Determina a origem de um código-fonte específica a partir do [ endereço
DESCRIÇÃO
memória ].

Esta diretiva é usada em um código-fonte sempre que parte do código deva ser colocado em uma localização
específica da memória.

Para a colocação de diretivas ORG sucessivas, o número de endereços disponíveis após cada diretiva ORG
deve ser suficiente para conter todas as instruções previstas para este bloco.

Se não houver nenhuma outra diretiva ORG em uma sequencia de instruções, o compilador grava todas as
instruções sequencialmente na memória.

Os endereços mais comuns são:

ORG 0X00 ; ENDEREÇO DO VETOR DE RESET

ORG 0X04 ; ENDEREÇO DO VETOR DE INTERRUPÇÃO

EXEMPLO:

ORG 0X00 ; ENDEREÇO DO VETOR DE RESET

GOTO SET_UP ; VAI PARA SEQUENCIA DE SET_UP (esta instrução será


; gravada no endereço 00h da Memória de Programa)

ORG 0X04 ; ENDEREÇO DO VETOR DE INTERRUPÇÃO

MOVWF W_TEMP ; SALVA W NO REG. W_TEMP (esta instrução será


; gravada no endereço 04h da Memória de Programa)
SWAPF STATUS,W ; TROCA NIB_HI POR NIB_LO NO REG. STATUS E GRAVA
; RESULTADO NO REG. W (esta instrução será
; gravada no endereço 05h da Memória de Programa)

Bento Alves Cerqueira Cesar Filho - R 1.0 - FEV/07


9/9

You might also like