.
;********************************************************************************
.MESSAGE "rotinas do re_mensageiro ativadas."
;*******************************************************************************
;* MSG_opcao,L1C1,16,"OPCAO: ",f_SOH,f_EOT *
;* ^ ^ ^ ^ ^ ^ *
;* | | | | | | *
;* id ------+ | | | | | *
;* pos -------------+ | | | | *
;* tan -----------------+ | | | *
;* cadeia --------------------------+ | | *
;* final linha -------------------------------+ | *
;* final cadeia ----------------------------------+ *
;*--------------------------------------------------------------------*
;uso: ...
; ldi r18,MSG_bemvindo ; id
; rcall ri_mensageiro
; ...
; destroi: r30,r31,r16,r17
; entrada: r18 = id, r30,r31 = tabela
; saída: mensagem no LCD
;********************************************************************************
ri_mensageiro: push r16
push r17
push r18
;
mensag0: lpm r16,Z+ ; id atual
cpse r16,r18 ; id desejado
rjmp varre_cad ; próxima linha da cadeia
lpm r16,Z+ ; posição no lcd
rcall re_lcd_cmd
lpm r17,Z+ ; tam, contador
;
mnsg_laco: lpm r16,Z+ ; cadeia ou final
cpi r16,f_SOH
breq mnsg_fim
cpi r16,f_EOT
breq mnsg_fim
rcall re_lcd_dado ; exibe
dec r17 ; final do tam
breq mnsg_fim
rjmp mnsg_laco ; vai até o final da cadeia
;clc ; sem erro
;ret
mnsg_fim: ;sec ; com erro
pop r18
pop r17
pop r16
ret
; próxima cadeia dentro da tabela
varre_cad: lpm r16,Z+ ; perde pos
lpm r16,Z+ ; perde tam
varre_cad1: wdr
lpm r16,Z+ ; cad
cpi r16,f_SOH ; final da cadeia
brne varre_cad3
cpi r16,f_EOT ; final da tabela
breq varre_cad2 ; sai sem achar
;clc ; sem erro
rjmp mensag0 ; volta em cima do id
varre_cad3: cpi r16,f_EOT ; final da tabela
brne varre_cad1 ; laço
varre_cad2: ;sec ; com erro
rjmp mnsg_fim
;********************************************************************************
;
;
;
;
;********************************************************************************
.MESSAGE "Rotinas das mensagens ativadas."
;********************************************************************************
.IFDEF __tab_inicial__
.MESSAGE "A rotinas externas das mensagens da tabela TAB_INI."
re_msg_amb: ldi r18,MSG_ambie
rcall ri_pre_ini
ret
;
re_msg_aut: ldi r18,MSG_autor
rcall ri_pre_ini
ret
;
re_msg_cur: ldi r18,MSG_curso
rcall ri_pre_ini
ret
;
re_msg_emp: ldi r18,MSG_empre
rcall ri_pre_ini
ret
.ENDIF
;--------------------------------------------------------------------------------
.IFDEF __tab_opcao__
.MESSAGE "A rotinas externas das mensagens da tabela TAB_OPC."
re_opc_opco: ldi r18, MSG_opcopco
rcall ri_pre_opc
ret
;
re_opc_cada: ldi r18, MSG_opccada
rcall ri_pre_opc
ret
;
re_opc_loga: ldi r18, MSG_opcloga
rcall ri_pre_opc
ret
;
re_opc_conf: ldi r18, MSG_opcconf
rcall ri_pre_opc
ret
;
re_opc_roti: ldi r18,MSG_opcroti
rcall ri_pre_opc
ret
;----------------------------------------------------------------------------------------------------------------------
re_opc_sobr: ldi r18,MSG_opcsobr
rcall ri_pre_opc
ret
;
re_opc_ajud: ldi r18,MSG_opcajud
rcall ri_pre_opc
ret
;
re_opc_sair: ldi r18,MSG_opcsair
rcall ri_pre_opc
ret
.ENDIF
;******************************************************************************
;
;
;
;********************************************************************************
;* prepara o ponteiro indexador "Z" com a posição inícial da tableas que *
;* contém as cadeias de caracteres das mensagens *
;* uso: ... *
;* ldi r18,MSG_bemvindo ; id *
;* rcall re_pre_msg, rcall re_pre_nav, re_pre_tst, re_pre_sis *
;* ... *
;********************************************************************************
.IFDEF __tab_inicial__
.MESSAGE "A rotina externa de acesso a tabela TAB_INI."
ri_pre_ini: ldi Zh,high(TAB_INI<<1) ; tabela
ldi Zl,low(TAB_INI<<1)
rcall ri_mensageiro
ret
.ENDIF
;******************************************************************************
;* prepara o ponteiro indexador "Z" com a posição inicial da tabelas que *
;* contém as cadeias de caracteres das mensagens *
;* uso: ... *
;* ldi r18,MSG_bemvindo ; id *
;* rcall re_pre_msg, rcall re_pre_nav, re_pre_tst, re_pre_sis *
;* ... *
;******************************************************************************
.IFDEF __tab_opcao__
.MESSAGE "A rotina externa de acesso a tabela TAB_OPC."
ri_pre_opc: ldi Zh,high(TAB_OPCAO<<1) ; tabela
ldi Zl,low(TAB_OPCAO<<1)
rcall ri_mensageiro
ret
.ENDIF
;******************************************************************************
.
Nenhum comentário:
Postar um comentário