Код: Выделить всё
MainLoop:
; вызываем программы
; обработка кнопки старт-меню
menu:
sbic PIND, 0
rjmp start_auto
nop
nop
nop
rjmp menu
start_auto:
sbic PIND, 0
rjmp menu
nop
nop
nop
nop
rjmp start_auto
rjmp MainLoopКод: Выделить всё
MainLoop:
; вызываем программы
; обработка кнопки старт-меню
menu:
sbic PIND, 0
rjmp start_auto
nop
nop
nop
rjmp menu
start_auto:
sbic PIND, 0
rjmp menu
nop
nop
nop
nop
rjmp start_auto
rjmp MainLoopКод: Выделить всё
menu:
sbic PIND, 0
rjmp menu
nop
nop
nop
rjmp menu
;start_auto:
; sbic PIND, 0
; rjmp menu
; nop
; nop
; nop
; nop
; rjmp start_auto
; rjmp MainLoop
Почитай, это про тебя. http://easyelectronics.ru/avr-uchebnyj- ... porty.htmlМурик писал(а):Есть на первый взгляд простая задача - вывести данные в часть выводов порта. Но при этом необходимо не изменить состояние и конфигурацию незадействованых выводов.
Как это не важно?Kavka писал(а):И не важно что считывать PIN или PORT - маской выделить только нужное.
Код: Выделить всё
in R16,PORTx
andi R16,0b11111000
ori R16,0b000000101
out PORTx,R16Скорее с битовыми операциями.Z_h_e писал(а):Вам советую сначала разобраться с PORTx, DDRx, PINx.
Часть порта используется в другом коде и можно сказать что о состоянии неиспользуемых выводов ничего не известно. Потому что если побитово анализировать DDR и брать биты с PIN или PORT, то код сильно усложнится.Kavka писал(а):Как трактовать эти биты (подтяжка или выход пина) зависит от того, что записано в соответствующий биты DDR.
Как раз такой случай. Но видимо проще всего будет побитово изменить состояние выводов о чем писал выше. Думал есть более правильный способ.Kavka писал(а):А если, например 5-7
Второе утверждение - чистая ложь. Состояние PORT никак не зависит от внешних сигналов, подтяжек или чего-то ещё. Что туда записали, то там и лежит всегда.Мурик писал(а):PIN выдаст то что сейчас реально на порту, а PORT - состояние подтягивающих резисторов.
Я ж Вам код готовый дал одновременного изменения битов порта.Мурик писал(а):Но видимо проще всего будет побитово изменить состояние выводов о чем писал выше.
Второе. Если надо что-то записать только в определённые биты порта - обнуляете их по маске, а потом пишете по маске. Остальные биты не затронутся. Поэтому,Мурик писал(а):В документации этого не нашел (или неправильно понял).
- задача простая не только на первый взгляд. Она простая на любой взгляд и крайне типична, встречаясь почти в любом проекте.Мурик писал(а):Есть на первый взгляд простая задача - вывести данные в часть выводов порта.
На самом деле это очень удобно, и легко позволяет реализовать работу в режиме открытого стока:Мурик писал(а):По моему, инженеры Atmel совершили глупость когда совместили в одном регистре вывод в порт и установку подтягивающих резисторов.
Я ничего не писал про анализ/обработку битов DDR. Повторю, трактовать биты PORT можно в зависимости от DDR. А если не надо менять значение бита в PORT, то его просто не надо менять, что бы он не обозначал (как бы он не трактовался).Мурик писал(а):Потому что если побитово анализировать DDR