代码之家  ›  专栏  ›  技术社区  ›  Embid123

ATmega128A-程序集RET不返回但重新启动

  •  1
  • Embid123  · 技术社区  · 7 年前

    我对RET有问题。它没有回到重点,在哪里 delay 被叫来了。堆栈指针的值在 延迟 并设置为 0x0000FFFE .

    .include "m128adef.inc"
    
    //f = 7,3728*10^6 Hz ~ 135 ns
    
    .def oneDiod = r16
    .def secondDiod = r17
    .def ones = r18
    .def i1 = r19
    .def i2 = r20
    .def i3 = r21
    .def i4 = r22
    .def i5 = r23
    
    ldi ones, 0xff
    ldi oneDiod, 0b01111111
    ldi secondDiod, 0b10111111
    
    out ddrc, ones
    
    
    loop:
    
    out portc, oneDiod
    
    call delay
    
    out portc, secondDiod
    
    call delay
    rjmp loop
    
    delay:
    
    ldi i3, 37
    p3: ldi i2, 0xff
    p2: ldi i1, 0xff
    p1: dec i1
    brne p1 
    nop
    
    dec i2
    brne p2
    nop
    
    dec i3
    brne p3
    nop
    
    ldi i5, 152
    p5: ldi i4, 0xff
    p4: dec i4
    brne p4
    nop
    
    dec i5
    brne p5
    nop
    
    ret
    

    延迟 主要是浪费时间,这为uC提供了大约一秒钟的工作。我可以把它调试到最后一条NOP指令,当我跨2步时,RET转到第1行。

    0 回复  |  直到 7 年前