Mensageiro

.
;********************************************************************************
.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."
;********************************************************************************
re_msg_amb:            ldi r18,MSG_ambie
                    rcall re_pre_ini
                    ret
                    ;
re_msg_aut:            ldi r18,MSG_autor
                    rcall re_pre_ini
                    ret
                    ;
re_msg_cur:            ldi r18,MSG_curso
                    rcall re_pre_ini
                    ret
                    ;
re_msg_emp:            ldi r18,MSG_empre
                    rcall re_pre_ini
                    ret               
;********************************************************************************
;
;
;
;********************************************************************************
;* 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              *
;*        ...                                                                   *
;********************************************************************************
re_pre_ini:            ldi Zh,high(TAB_INI<<1)                ; tabela
                    ldi Zl,low(TAB_INI<<1)
                    rcall ri_mensageiro
                    ret
;********************************************************************************
.

Nenhum comentário:

Postar um comentário