HOME PROJETOS PROGRAMAÇÃO |
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:
|
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.
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 |