Я новичок в программировании на ассемблере, и я пишу этот код, в котором я хочу сделать мигание светодиода, подключенного к portD.здесь я устанавливаю значение указателя стека равным ramend, но после вызова подпрограммы delay режим отладки останавливается и мигает все время!Я не понимаю почему!спасибо!
.include "m16def.inc"
.ORG 0
start:
ldi r16 , high(ramend)
out sph , r16
ldi r16 , low(ramend)
out spl , r16
ldi r16 , 0b00110000 ; direction
ldi r19 , 0b01001001
out DDRD , r16
out PORTD , r19
rjmp loop
loop:
in r17 , PIND
sbis PIND , 6 // part b
rjmp BLINK
rjmp loop
BLINK:
ldi r24 , 2
ldi r18 , 0b00010000
out PORTD , r18
call delay
ldi r18 , 0b00000000
out PORTD , r18
call delay
dec r24
brne BLINK // if z = 0
rjmp loop
delay: // For CLK(CPU) = 1 MHz
LDI r20 , 16 // One clock cycle
delay1:
LDI r21 , 125 // One clock cycle
delay2:
LDI r22 , 250 // One clock cycle
delay3:
DEC r22 // One clock cycle
NOP // One clock cycle
BRNE delay3 // Two clock cycles when jumping to Delay3, 1 clock when continuing to DEC
DEC r21 // One clock cycle
BRNE delay2 // Two clock cycles when jumping to Delay2, 1 clock when continuing to DEC
DEC r20 // One clock Cycle
BRNE delay1 // Two clock cycles when jumping to Delay1, 1 clock when continuing to RET
RET