我对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行。