Я не настаиваю… вам профессионалам виднее…
Он не особенный… дело в компиляторах.Чем R16 такой особенный?
Где я писал, что он у AVR есть!?Имел он ввиду, что нет аккумулятора в AVR,это ж не Z80
Он не особенный… дело в компиляторах.Чем 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, если использовать в обработчике команды, не трогающие оный.
Код: Выделить всё
LookUp:
.DB $DE, \
$AD, \
$BE, \
$EF
Код: Выделить всё
LookUp:
.DB $DE, \ //comment
$AD, \ //comment
$BE, \ //comment
$EF //comment
Код: Выделить всё
LookUp:
00009a adde .DB $DE,$AD //comment
00009b efbe .DB $BE,$EF //comment
;LookUp:
.DB $DE, \
$AD, \
00009c adde $BE, \
00009d efbe $EF
;*************************************************
Код: Выделить всё
LookUp:
.DB $DE, /*comment*/\
$AD, /*comment*/\
$BE, /*comment*/\
$EF
Код: Выделить всё
LookUp:
.DB $DE, /*comment*/\
$AD, /*comment*/\
000090 adde $BE, /*comment*/\
$EF, \
000091 efbe
warning: .cseg .db misalignment - padding zero byte
000092 004d 77Код: Выделить всё
;//вкл передатчик
ldi R16,(1<<TXEN)
out UCSRB,R16
;//зададим скорость 9600 бод
ldi R16,0x00
out UBRRH,R16
ldi R16,0x34
out UBRRL,R16
;//выберем 8 битный режим и вкл проверку на четность
ldi R16,(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)|(1<<UPM1)
out UCSRC,R16Код: Выделить всё
;//вкл приемник выберем 9 битный режим
ldi R16,(1<<RXEN)|(1<<UCSZ2)
out UCSRB,R16
;//зададим скорость 9600 бод
ldi R16,0x00
out UBRRH,R16
ldi R16,0x34
out UBRRL,R16
;//выберем 9 битный режим и вкл проверку на четность
ldi R16,(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)|(1<<UPM1)
out UCSRC,R16Код: Выделить всё
MAIN:
;//ждем окончания приема
sbis UCSRA,RXC
rjmp MAIN
in R16,UDR
out PORTB,R16Код: Выделить всё
MAIN:
sbis UCSRA,RXC
rjmp MAIN
in R16,UCSRA
out PORTB,R16
wait:
rjmp waitКод: Выделить всё
MAIN:
sbis UCSRA,RXC
rjmp MAIN
in R16,UDR
in R16,UCSRA
out PORTB,R16
wait:
rjmp wait