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
SINTAXE
#DEFINE #DEFINE
DESCRIÇÃO
Define a substituição do [ nome ] no código-fonte pelo [ texto ] ou [ instrução ]
[ nome ] [ nome ]
[ texto ] [ 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
#DEFINE
BANK0
BCF
STATUS,RP0
STATUS,RP0 –
no código-fonte.
; 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)
SINTAXE
[ nome ] [ nome ]
DESCRIÇÃO
Define a substituição do [ nome ] no código-fonte pelo [ texto ] ou [ expressão ]
EQU EQU
[ valor ] [ 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
-
; RELACIONA O NOME ‘REFERENCIA’ À ; EXPRESSÃO (256 – 123) = 133
EQU
B’0010011’
; RELACIONA O NOME ‘REFERENCIA’ AO VALOR ; BINÁRIO 0010011 (19 DECIMAL)
Nome relacionado a uma Constante com Valor Decimal
REFERENCIA
-
(.256 -.123)
Nome relacionado a uma Constante com Valor Binário
REFERENCIA
-
EQU
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
SINTAXE
#INCLUDE #INCLUDE #INCLUDE
DESCRIÇÃO
Inclui um arquivo fonte adicional.
[ nome arquivo inclusão ] “[ nome arquivo inclusão ]” <[ nome arquivo inclusão ]>
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
MACRO.INC
; ARQUIVO DE MACRO
ou #INCLUDE
- Se [ nome arquivo inclusão ] contiver espaços #INCLUDE
“MACRO CONTADOR.INC”
; ARQUIVO DE MACRO
<MACRO CONTADOR.INC>
; ARQUIVO DE MACRO
ou #INCLUDE
- 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
DESCRIÇÃO
Define uma lista sequencial de Nomes de variáveis a partir do[ endereço memória ]
[ endereç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
W_TEMP STATUS_TEMP FLAGS ENDC
; LISTA DE VARIÁVEIS A PARTIR DO END. 20H ; DO BANCO 0 DE MEMÓRIA ; VARIÁVEL ALOCADA NO END. 20H ; VARIÁVEL ALOCADA NO END. 21H ; VARIÁVEL ALOCADA NO END. 22H ; 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
CONTAGEM DIFERENCA TEMPO ENDC
; LISTA DE VARIÁVEIS A PARTIR DO END. A0H ; DO BANCO 1 DE MEMÓRIA ; VARIÁVEL ALOCADA NO END. A0H ; VARIÁVEL ALOCADA NO END. A1H ; VARIÁVEL ALOCADA NO END. A2H ; 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
W_TEMP STATUS_TEMP FLAGS ENDC
; LISTA DE VARIÁVEIS A PARTIR DO END. 20H ; DO BANCO 0 DE MEMÓRIA ; VARIÁVEL ALOCADA NO END. 20H ; VARIÁVEL ALOCADA NO END. 21H ; VARIÁVEL ALOCADA NO END. 22H ; FIM DA LISTA DE VARIÁVEIS
ou CBLOCK
0XA0
CONTAGEM DIFERENCA TEMPO ENDC
; LISTA DE VARIÁVEIS A PARTIR DO END. A0H ; DO BANCO 1 DE MEMÓRIA ; VARIÁVEL ALOCADA NO END. A0H ; VARIÁVEL ALOCADA NO END. A1H ; VARIÁVEL ALOCADA NO END. A2H ; 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ódigofonte 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 ]
DESCRIÇÃO
Determina a origem de um código-fonte específica a partir do [ endereç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
0X00
; ENDEREÇO DO VETOR DE RESET
EXEMPLO: ORG GOTO
ORG
SET_UP
0X04
; VAI PARA SEQUENCIA DE SET_UP (esta instrução será ; gravada no endereço 00h da Memória de Programa) ; ENDEREÇO DO VETOR DE INTERRUPÇÃO
MOVWF
W_TEMP
SWAPF
STATUS,W
; SALVA W NO REG. W_TEMP (esta instrução será ; gravada no endereço 04h da Memória de Programa) ; 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