Код: Выделить всё
;--- Таймер1 ---
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, low(main)
push R16
ldi R16, high(main)
push R16
reti
Постепенно осознаю полезность приёма.
В прерываниях конечно не везде зайдёт, а вот для использования какого-нибудь общего сценария без последующей проверки флагов самый раз.
Накидал дэмку для примера:
Спойлер
Код: Выделить всё
label_0:
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, low(label_2)
push R16
ldi R16, high(label_2)
push R16
rjmp procedure
label_1:
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, low(label_0)
push R16
ldi R16, high(label_0)
push R16
rjmp procedure
label_2:
ldi R16, low(RAMEND)
out SPL, R16
ldi R16, low(label_1)
push R16
ldi R16, high(label_1)
push R16
rjmp procedure
procedure:
nop
retДобавлено after 7 minutes:
Ну или так:
Спойлер
Код: Выделить всё
label_0:
tst R0
breq pc+6
ldi R16, low(label_1)
push R16
ldi R16, high(label_1)
push R16
rjmp procedure
ldi R16, low(label_2)
push R16
ldi R16, high(label_2)
push R16
rjmp procedure
label_1:
rjmp pc
label_2:
rjmp pc
procedure:
nop
retА для тех, кто говорит, что на асм-е то ли много, то ли сложно писать
Спойлер
Код: Выделить всё
.equ after =0
.MACRO first
ldi R16, low(@2)
push R16
ldi R16, high(@2)
push R16
rjmp @0
.ENDMACROКод: Выделить всё
; сначала в процедуру, потом на метку:
first PROCEDURE, after, LABEL_2Добавлено after 3 minutes 5 seconds:
потому что нельзя совсем абстрагироваться от кода))shonty писал(а):я так не делаю))


