Сколько ни сижу на форумах, сколько ни роюсь в даташитах и книжках, а спящий режим реализовать не могу. Обращаюсь к вам за помощью.
Нужно чтобы микросхема при включении как можно раньше входила в спящий режим. И при внешнем прерывании INT0 программа начинала свою работу.
Набросайте пожалуйста примерчик.
Вот мой неработающий код:
Код: Выделить всё
cseg
.org 0
.org 0x0000 jmp init // Вектор сброса
.org 0x0002 jmp INT_0 // Внешнее прерывание INT0
init:
.def temp = R16
;---Инициализация стека
Lds temp, RAMEND // Записать в регистр temp адрес последней ячейки ОЗУ
sts SPL, temp // записать в младший бит стека значение регистра temp
Lds temp, RAMEND // Записать в регистр temp адрес последней ячейки ОЗУ
sts SPH, temp // записать в старший бит стека значение регистра temp
;--- Инициализация прерываний
ldi temp, (1<<INT0) ; разрешение внешних прерываний INT0(PD2)
out EIMSK, temp
ldi temp, (0<<ISC01)|(0<<ISC00) ; прерывание INT0 уровню
sts EICRA, temp
sei // Глобальное разрешение прерываний
// спящий режим
ldi temp, (1<<SE) // Разрешение спящего режима. Режим Idle
sts MCUCR, temp
sleep // тут надо заснуть
main:
// тут цикл программы
rjmp main
INT_0:
// здесь надо проснуться
sei
ret


