HOME      PROJETOS      PROGRAMAÇÃO     



MACRO-INSTRUÇÕES



Quando se programa em linguagem assembler, quase sempre é necessário repetir um conjunto de instruções que já foram usadas em outro programa e que servem, por exemplo, para configurar um periférico como a USART ou as portas analógicas do microcontrolador. Se for possível lembrar em que programa esse grupo de instruções foi usado anteriormente, é só copiá-lo e colá-lo no novo programa senão, teremos que codificar tudo novamente. Para "quebrar esse galho", existem as macro-instruções.

Macro-instruções são conjuntos de instruções assembler que podem ser agrupadas e nomeadas, dentro de uma estrutura denominada macro-instrução, para poderem ser facilmente referenciadas durante a codificação de um programa, isto é, escrevendo o nome da macro-instrução no código fonte, estaremos pedindo ao compilador para repetir o mesmo conjunto de instruções agrupadas dentro da estrutura.

Uma macro-instrução tem as seguintes características:

  1. Uma macro-instrução sempre tem um nome.

  2. Uma macro-instrução é identificada pelo compilador pela palavra MACRO.

  3. Uma macro-instrução pode ou não ter argumentos.

  4. Uma macro-instrução sempre termina com a diretiva ENDM.



Mais precisamente, uma macro tem a seguinte estrutura:

nome_da_macro MACRO arg1, arg2,..... argn instrucao assembler instrucao assembler instrucao assembler instrucao assembler instrucao assembler . . . ENDM


As macro-instruções podem ser escritas diretamente no código fonte, obedecendo a estrutura mostrada acima ou podem residir em arquivos com a extensão .mac.

Quando as macro-instruções residem em arquivos, esses arquivos podem conter várias macros ou então cada macro pode residir num arquivo individual. Esses arquivos devem ser incluidos no programa com a diretiva include.

Nossa intensão não é ensinar a desenvolver macros-instruções porque, a grosso modo, isso é uma tarefa muito simples de ser realizada por qualquer programador iniciante. A intensão é mostrar algumas macros desenvolvidas para facilitar a programação como, por exemplo, macros para configuração e operação de portas analógicas, diversos serviços de temporização, testes e desvios, operações com a porta serial, operação de LCD, etc...

Como as macros-instruções aqui apresentadas formam uma infraestrutura de programação assembler, muitas delas trabalham em conjunto e possuem interdependências. Muitas dessas macros podem trabalhar com microcontroladores das famílias 16F e 18F e, para fazer essa distinção, necessitam que a macro-instrução FAMILIAS seja codificada antes de qualquer outra.

Clique aqui para fazer o download do arquivo de macros-instruções descritos nesta página.

Índice


ADCONV          Configuração e leitura do Conversor Analógico Digital
BAL          Branch and link
BCT          Desvia na contagem
BE          Desvia se igual
BH          Desvia se maior
BL          Desvia se menor
BNE          Desvia se diferente
BNO          Desvia se os bits estão desligados
BO          Desvia se os bits estão ligados
CMP          Compara um registrador com um valor imediato
CR          Compara dois registradores
DELAY          Produz um retardo
EXINT          Configura interrupções externas na família 18F
FAMILIAS          Identifica o microcontrolador que esta sendo utilizado
GOBACK          Retorna de uma subrotina chamada pela macro PERFORM
HEX2ASCII          Tabela de conversão de Hexadecimal/ASCII para subrotina HEXAG
LCD_LINES          Monta a tabela de endereços de linhas e colunas para LCDs
MVC_DM2DM          Move dados dentro da memória RAM
MVC_DM2EP          Move dados da memória RAM para a EEPROM
MVC_EP2DM          Move dados da memória EEPROM para a memória RAM
MVC_PM2DM          Move dados da memória programa para a memória RAM
OSC18F_SET          Configuração do oscilador interno na família 18F
PERFORM          Chama uma subrotina em qualquer página da memória
popR          Retira um valor do topo do stack de software
PULLUPS          Habilita os resistores Pullup do registrador PORTB da família 18F.
pushR          Insere um valor do topo do stack de software
READ_EEPROM          Lê a EEPROM e retorna o byte lido em W
RESTORE          Restaura os registradores W e STATUS
SAVE          Salva os registradores W e STATUS
SET_CURSOR          Posicionar o cursor do LCD
SETFOSC          Configuração do oscilador interno na família 18F
SR_4MVC          Move uma string para o LCD
SR_USERCHAR          Criação de caracteres do usuário no LCD
TESTNGO          Teste com desvio condicional
TM0_INTERRUPT          Configura interrupção de TMR0
TM0_OFF          Desliga o TMR0
TM0_ON          Liga o TMR0
TM0_POLLING          Polling do TMR0
TM0_RETFIE          Restaura estado de TMR0 ao sair da interrupção
TM0_SET          Configura o TMR0
TM          Teste de máscara
TM1_INTERRUPT          Configura interrupção de TMR1
TM1_OFF          Desliga o TMR1
TM1_ON          Liga o TMR1
TM1_POLLING          Polling do TMR1
TM1_RETFIE          Restaura estado de TMR1 ao sair da interrupção
TM1_SET          Configura o TMR1
TM2_INTERRUPT          Configura interrupção de TMR2
TM2_OFF          Desliga o TMR2
TM2_ON          Liga o TMR2
TM2_POLLING          Polling do TMR2
TM2_RETFIE          Restaura estado de TMR2 ao sair da interrupção
TM2_SET          Configura o TMR2
USART_CONFIG          Configura a porta serial USART
USART_RX          Recepção pela porta serial USART
USART_SET          Modifica a configuração da porta serial USART
USART_TX          Transmissão pela porta serial USART
WRITE_EEPROM          Grava um byte na memória EEPROM
XMIT          Transmite uma string pela porta serial


H P S P I N

Desde 04 de Março de 2010

Atualização: 24 de Apr de 2024