С SBI "ляпсус" одначе... (поставил "по аналогии с sbr" по недосмотру)
А "помечтать" было б неплохо...

. Наверное, как всегда, испытал в железе.Я не знаю что за МК проходил тестирование и какой именно был цикл (точнее реализация условия выхода), но регистр SP и регистр флагов находятся ближе всего к оперативке, так что не удивительно, что первый занулялся раньше, чем остальные регистры ввода-вывода.Z_h_e писал(а):Условие окончания цикла было равенство SP нулю. Цикл отрабатывался нормально...
У этого микроконтроллера есть две штуки General purpose I/O register. Так что если вам нужен стек на один или два байта, то его наверное (надо проверять!) можно расположить в этих регистрах. С остальными регистрами будут следующие проблемы:trofim2 писал(а):Уважаемые коллеги.
Можно-ли расположить стек в регистрах АТмега48?
Памяти не хватает.
Замечу, что адрес R15=0x0F, ну или просто 15.BOB51 писал(а):ldi yl,0х1f ; подготовим адреса ячеек X=0х0002(r2) и Y=0х001f(r15)
st x,yl ; а теперь аналог mov r2,yl = в ячейку 2 (она же r2) загружено 0х1f
st y,r2 ; аналогия mov r15,r2 = в ячейку 0х1f (она же r15) загружено 2
Код: Выделить всё
.include "m48def.inc"
.cseg
.org 0
RJMP RESET
.org INT0addr ; External Interrupt Request 0
PUSH R0
IN R0,SREG
PUSH R0
LDI R16,0xCC
MOV R0,R16
NOP
POP R0
OUT SREG,R0
POP R0
reti
;*********************************************
RESET:
LDI XH,HIGH(15)
LDI XL,LOW(15)
OUT SPH,XH
OUT SPL,XL
SBI DDRD,2
SBI PORTD,2
NOP
CBI DDRD,2
CLR R0
DEC R0
LDI R16,1<<SE
OUT SMCR,R16
LDI R16,1<<ISC01
STS EICRA,R16
LDI R22,1<<INT0
OUT EIMSK,R22
OUT EIFR,R22
SEI
WAIT:
SLEEP
NOP
RJMP WAIT
.EXIT