|
H P S P I N E l e t r ô n i c a D i g i t a l e P r o g r a m a ç ã o d e M i c r o c o n t r o l a d o r e s P I C |
| 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: 13 de Dec de 2025 |
|