Код: Выделить всё
.def temp = r16
ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,HIGH(RAMEND)
out SPH,tempКод: Выделить всё
.def temp = r16
ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,HIGH(RAMEND)
out SPH,tempЭто я для самоконтроля распишу, а вы скажите, пожалуйста, так ли я понял или нет.Gudd-Head писал(а):ldi tmp, high(RAMEND); Set Stack Pointer to top of RAM
out SPH, tmp;
ldi r16, low(RAMEND);
out SPL, tmp;
Код: Выделить всё
SETBIT(DDRD,4);//на выход
SETBIT(DDRD,5);//на выход
TCCR1A=0xA1;//
TCCR1B=0x0A;//MODE 5 - FAST PWM 8 BIT
Код: Выделить всё
ldi Temp1, 0b10000000 ;Глобальное разрешение прерываний
out SREG, Temp1Жжоте, товарищМikа писал(а):чтобы изменение потенциала на RESET вызывало прерывание?
это "прерывание" вызывается автоматически, его не надо настраивать))) PC (Program Counter) устанавливается на адрес = 0 в памяти программ и программа начинается сначала)) по-человечески это называется сброс микроконтроллера)Мikа писал(а):использовать прерывание по RESET, что надо сделать?
можно сделать на ногу INT0? Но что там надо прописать в программе кроме SREGa (а надо ли в нём что-то писать?) и sei. Ну и, естесственно, установки метки int_0: на обработчик прерывания.Там ещё выбирается по фронту/спаду/уровню будет прерывание. А вообще, почитайте ДШ и/или Евстифеева, погоняйте код в Студии прежде чем лезть на форум со своими вопросами.Мikа писал(а):Но что там надо прописать в программе кроме SREGa (а надо ли в нём что-то писать?) и sei.
Код: Выделить всё
ldi Temp, 0b1000000
out SREG, TempДа, достачточно одной команды SEI или CLI.Мikа писал(а):Следовательно, последовательно эти 2 команды использовать не надо, достаточно одной?
"как описано в руководстве по системе команд".Мikа писал(а):as described in the instruction set reference. Я перевёл это на русский, но что это значит я не понял.
Да, не может. Но вы в обработке прерывания можете выставить бит I, и тогда другое прерывание может произойти.Мikа писал(а):1). При вызывании прерывания, бит 7 "чистится" аппаратно. Т.е. во время обработки этого прерывания, другое прерывание уже сработать не сможет?
Код: Выделить всё
ldi Temp, 0b1000000
out SREG, Temp
Код: Выделить всё
in tmp, SREG
ori tmp, 0b10000000
out SREG, tmpДа, верно, достаточно одной SEI/CLIСледовательно, последовательно эти 2 команды использовать не надо, достаточно одной?
Флаг - это 1 в регистре GIFR, правильно? Ещё не дочитал до других прерываний, но смею предположить, что раз в GIFR вписаны только прерывания INT, есть регистры с флагами других прерываний?Gudd-Head писал(а):В любом случае, если во время обработки первого прерывания произошло второе, то от него останется флаг.
Про эквивалентность я очень криво выразился. Написав этот кусочек когда я смотрел только на еденицу, а остальные нули держал в умеibiza11 писал(а):НЕ ЭКВИВАЛЕНТЕН команде SEI.
Да, верно. У каждого периферийного модуля заведен отдельный регистр под флаги прерываний, аббревиатура которого обычно оканчивается на ..FR(Flag Register) или ..SR(Status Register), но бывают и исключения... наверное))))) не помню сейчас.Мikа писал(а):есть регистры с флагами других прерываний?