在AVR显示屏上滚动文本(程序集)

时间:2017-04-23 11:57:23

标签: assembly avr

我正在尝试在AVR显示屏上显示滚动文字。

我有方法show_char,它在R16中显示位于R17的显示位置的char(可用位置是2-7)。

这是我到目前为止所得到的:

; ... includes, etc.

text:   .db "SOME INTERESTING TEXT IN UPPER CASE",0 ; string ends with 0

start:
      ; init stack
      ldi r16, 0xFF
      out SPL, r16
      ldi r16, 0x04
      out SPH, r16
      ; init display
      call init_disp

loop:   ldi YL, low(2*text)
        ldi YH, high(2*text)
        rcall scroll
        rjmp loop

scroll: movw Z,Y

        push YL
        push YH

        rcall show
        rcall delay

        pop YH
        pop YL

        adiw YH:YL,1
        movw Z, Y
        adiw Z, 5

        lpm r16, Z
        cpi R16, 0

        brne scroll
        RET

show:   lpm  R16,Z+
        mov  R7,R16

        lpm  R16,Z+
        mov  R6,R16

        lpm  R16,Z+
        mov  R5,R16

        lpm  R16,Z+
        mov  R4,R16

        lpm  R16,Z+
        mov  R3,R16

        lpm  R16,Z+
        mov  R2,R16

        push R16
        rcall disp
        pop R16

        RET

disp: ; display R2-7 on display
    mov  R16,R2
    ldi r17, 2
    call show_char

    mov  R16,R3
    ldi r17, 3
    call show_char

    mov  R16,R4
    ldi r17, 4
    call show_char

    mov  R16,R5
    ldi r17, 5
    call show_char

    mov  R16,R6
    ldi r17, 6
    call show_char

    mov  R16,R7
    ldi r17, 7
    call show_char

    RET

delay:
    ldi r20, 120

delay00:
    dec r20
    brne delay00

我是装配新手,但这就是我想出来的。但是,它不能像预期的那样起作用,我不知道为什么。任何帮助将不胜感激。

0 个答案:

没有答案