- , vírgula inicia um comentário na mesma linha.
- .EQU cria um rótulo. Ótimo recurso para criar rótulos inteligíveis.
- .DB aloca os dados na memória de programa.
- .ORG determina o local de início para a inserção do código ou dos dados.
- .DEFINE específica uma variável para uso na compilação.
- .CSEG especifica o segmento de código isto é, memória de programa do uC.
- .DSEG especifica o segmento de dados isto é, memória de dados do uC.
- .ESEG especifica o segmento de memória de dados persistente - EEPROM isto é, memória ñao volátil do uC.
- .MESSAGE exibe o texto entre as áspas durante a compilação.
- .ERROR exibe o texto entre as áspas em caso de erro durante a compilação.
- .WARNING exibe o texto entre as áspas em caso de erro não grave durante a compilação.
- .MACRO e .ENDMACRO criam blocos de código reutilizáveis.
- .INCLUDE insere um arquivo durante a compilação.
- .IFDEF / .ELSE / .ENDIF condicionais de compilação.
- .BYTE define um byte na memória.
Decimal (default): 10, 255
Hexadecimal (two notations): 0x0a, $0a, 0xff, $ff
Binary: 0b00001010, 0b11111111
Octal (leading zero): 010, 077
ASCII: 0-9, a-z, A-Z, sinais, controles
BCD: 0-9
**************** EKZEMPLOJ ****************
Seleção das interrupções:
.IFDEF __INT_RST__
.MESSAGE "Ativando o interrupção de reinicio."
.ORG 0x000
rjmp cefo
.ELSE
.ERROR "RST ne kompetento"
.ENDIF
Seleção dos módulos a serem ativos:
#define __MODULOs_SELECAO__ FIX_TRUE ; por seleção dos módulos
#define __ipa__ FIX_TRUE
#define __pre__ FIX_TRUE
#define __geral__ FIX_TRUE
#define __retardo__ FIX_TRUE
#define __exibe__ FIX_TRUE
Ativação de módulos:
.IFDEF __pre__ ; *
.MESSAGE "Ativando o módulo PRE." ; *
.INCLUDE "/inkluzivo/pre.inc" ; *
.ELSE
.WARNING "RUTINO PRE ne kompetentaj"
.ENDIF
VAR_TECLADO: .BYTE 1
VAR_SITUACAO: .BYTE 1 possibilita a maximização da memória
.EQU i_MODOX_tst = 7
.EQU i_ALTER_tst = 6
.EQU i_ACESSO_tst = 5
.EQU i_ADC_tst = 4
NOME: .DB "UBIRATAN UAATSIM ITZA I"
.ESEG ; de 0x00 a 0x03ff (1024 bytes) EEPROMEND
.ORG 0x00
.DSEG ; de 0x60 a 0xDF (128 bytes)
.ORG SRAM_START
.INCLUDE "m32def.inc" específico de cada microcontrolador ao importar este arquivo adquire-se os rótulos desenvolvidos pela ATMEL. Recomendo estudar integralmente este arquivo.
.CSEG
.ORG 0x000
rjmp cefo ; começo do código
.ORG AREA_PROGR código mínimo de inicialização desta programação.
cefo: cli ; pára as interrupções
ldi r16,high(RAMEND)
out SPH,r16 ; posição inicial, final da SRAM
ldi r16,low(RAMEND)
out SPL,r16 ; define o ponteiro do programa
MSG_INI: .DB MSG_msgbv, fi_L1C1,16, "BEM VINDO a IHM ", SOH
.DB MSG_facii, fi_L2C1,16, " C.C. DA FAC-II ", SOH
.DB MSG_hwvrs, fi_L1C1,16, "HW versao 1.01 ", SOH
.DB MSG_fwvrs, fi_L2C1,16, "FW versao 1.01 ", SOH
.DB MSG_prg, fi_L1C1,16, "PROJETADO por ", SOH
.DB MSG_tan, fi_L2C1,16, "UBIRATAN UAATSIM", SOH
.DB MSG_lnh1, fi_L1C1,16, "PIC-2007 FAC2 CC", SOH
.DB EOT, EOT
;******************************************************************************
.EQU true = 1
#define __TESTES__
true ; comentado = false
#define __T1__
true ; comentado = false
#define __T2__
true ; comentado = false
#define __T3__
true ; comentado = false
;#define
__HORAeDATA__ true ; comentado = false
;#define
__versao__ true ; comentado = false
.IFDEF __HORAeDATA__
.MESSAGE
"*****************************************"
.MESSAGE "* Data:
" __DATE__ "/ Hora: " __TIME__".....*"
.MESSAGE
"*****************************************"
;
.ELIF __versao__
.MESSAGE
"*****************************************"
.MESSAGE "*
Versão: 1.1.1/ Ubiratã Uaatsim Itzá I *"
.MESSAGE
"*****************************************"
;
.ELIF __T1__
.WARNING "T1"
;
.ELIF __T2__
.WARNING "T2"
;
.ELIF __T3__
.WARNING "T3"
;
.ELSE .ELIF
__TESTES__
.WARNING "TESTES"
;
.ENDIF
;******************************************************************************
; tipos de
mensagens: .MESSAGE "Mensagem."
; .ERROR "Erro!"
; .WARNING "Aviso!"
#message "Mensagem"
--> sempre exibe a mensagem
;******************************************************************************
; ekzemplo per modo
trioblo
;
;.IFDEF
__LOGICA__
;.WARNING "Teste
de Lógica!"
;.MESSAGE
"*******************"
;.MESSAGE "* Teste
de Lógica *"
;.MESSAGE
"*******************"
;
;.ELIF
__MOVIMENTO__
;.WARNING "Teste
de Movivemnto!"
;.MESSAGE
"**********************"
;.MESSAGE "* Teste
de Movimento *"
;.MESSAGE
"**********************"
;
;.ELIF
__ARITMETICA__
;.WARNING "Teste
de Aritmética!"
;.MESSAGE
"***********************"
;.MESSAGE "* Teste
de Aritmética *"
;.MESSAGE
"***********************"
;
;.ENDIF
;******************************************************************************
; ekzemplo per modo
individual
;
;.IFDEF
__LOGICA__
;.MESSAGE
"*******************"
;.MESSAGE "* Teste
de Lógica *"
;.MESSAGE
"*******************"
;.ELSE
;.WARNING "Não
habilitado para teste de Lógica!"
;.ENDIF
;------------------------------------------------------------------------------
;.IFDEF
__MOVIMENTO__
;.MESSAGE
"**********************"
;.MESSAGE "* Teste
de Movimento *"
;.MESSAGE
"**********************"
;.ELSE
;.WARNING "Não
habilitado para teste de Movivemnto!"
;.ENDIF
;------------------------------------------------------------------------------
;.IFDEF
__ARITMETICA__
;.MESSAGE
"***********************"
;.MESSAGE "* Teste
de Aritmética *"
;.MESSAGE
"***********************"
;.ELSE
;.WARNING "Não
habilitado para teste de Aritmética!"
;.ENDIF
;******************************************************************************
**************** DOKUMENTAÇÃO ****************
Todos os códigos devem ter um cabeçalho contendo:
- nome da função
- descrição da função
- variáveis usadas
- variáveis que destrói
- autor
- data ínicio
- data última revisão
Nenhum comentário:
Postar um comentário