Спасибо всем за ответы!
Alexeyslav, а где в AVR Studio задаются параметры компиляции (скомпилированный с/без отладочными данными)
Код: Выделить всё
ldi r_temp, (0<<COM1A1)|(1<<COM1A0)|(0<<WGM11)|(0<<WGM10)
out TCCR1A, r_temp
ldi r_temp, 0x0F
out OCR1AL, r_temp
ldi r_temp, 0x0E
out OCR1AH, r_temp
ldi r_temp, (0<<WGM13)|(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10)
out TCCR1B, r_tempКод: Выделить всё
ldi r_temp, 0x0E
out OCR1AH, r_temp
ldi r_temp, 0x0F
out OCR1AL, r_temp
ldi r_temp, (0<<COM1A1)|(1<<COM1A0)|(0<<WGM11)|(0<<WGM10)
out TCCR1A, r_temp
; ldi r_temp, 0x0F
; out OCR1AL, r_temp
; ldi r_temp, 0x0E
;out OCR1AH, r_temp
ldi r_temp, (0<<WGM13)|(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10)
out TCCR1B, r_temp
Не понял, что ты хочешь донести.Demiurg писал(а):1 - никакого сравнения регистров авр с другими мк. Аккумуляторы на других мк.
Я разве писал, что их нельзя использовать?Demiurg писал(а):2 - любые регистры можно испрользовать где хочешь, как хочешь. Главное, что ты понимаешь, что делаешь. И учитываем, что у младших регистров ограничения по командам.
Вот тут ты не прав… главное правило как я уже писал: всегда первым в стек сохраняется регистр r16, а вот все последующие уже не имеют упорядоченного значения. Так как если не использовать это правило, то данные регистра r16 будут утеряны.Demiurg писал(а):3 - Порядок сохранения регистров в прерываний произвольный, вот как тебе на душу ляжет. Главное правило, как правильно сохранять SREG и порядок восстановления регистров.
Я об этом и писал... читай внимательней.Demiurg писал(а):4 - Сохранять и восстанавливать нужно только те регистры, которые используются в обработчике прерывания.
Он не особенный… дело в компиляторах.Чем R16 такой особенный?
Где я писал, что он у AVR есть!?Имел он ввиду, что нет аккумулятора в AVR,это ж не Z80
Все написанное вами раскрывает следующее: вы натягиваете сову на авр. У вас какие-то свои представления об этих МК, притом сопоставляющие с теми, с какими работали до авр. Также ваше недопонимание родило неверные правила работы с регистрами авр. Поясняю: у авр есть младшие регистры, r0-r15; старшие r16-r31. Их разница только в том, что с младшими регистрами не все инструкции действуют. Порядок сохранения и восстановления может быть абсолютно произвольный. Вообще покуй. Главное - последовательность действий.АСУ писал(а):...
Код: Выделить всё
//========
push r2 // Если этот регистр участвует в программе.
in r2, SREG
push r2
//bla-bla
pop r2
out SREG, r2
pop r2
reti // или ret, если не нужны прерывания.
//========
//========
push r16 // Если этот регистр участвует в программе.
in r16, SREG
push r16
// bla-bla
pop r16
out SREG, r16
pop r16
reti // или ret, если не нужны прерывания.
//========
//========
// Можно вообще так:
.def RSREG = r5 // И использовать этот регистр для сохранения восстановления SREG
in RSREG, SREG
//bla-bla
out SREG, RSREG
reti // или ret, если не нужны прерывания.
//========
//========
push r31
push r17
push r16
push r19
in r19, SREG
push r19
// bla-bla
pop r19
out SREG, r19
pop r19
pop r16
pop r17
pop r31
reti // или ret, если не нужны прерывания.
//========
Тоже верно.akl писал(а):Можно вообще не сохранять SREG, если использовать в обработчике команды, не трогающие оный.