|
|
  |
Как читать отдельные биты регистров общего назначения -ассемблер., Непонятно. |
|
|
|
Mar 30 2013, 17:24
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 25-01-13
Из: Брянск
Пользователь №: 75 345

|
Здравствуйте.Вот если полностью "закинуть" ну например регистр R19 в регистр данных PORTB-здесь понятно. out PORTB,R19 A как мне переместить ну скажем 2 бит регистра R19 в PORTB на 2 бит. Это новерно будет так: out PD2,R19.2 Спасибо.
|
|
|
|
|
Mar 30 2013, 17:43
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(serj32 @ Mar 30 2013, 21:24)  Здравствуйте.Вот если полностью "закинуть" ну например регистр R19 в регистр данных PORTB-здесь понятно. out PORTB,R19 A как мне переместить ну скажем 2 бит регистра R19 в PORTB на 2 бит. Это новерно будет так: out PD2,R19.2 Спасибо. Имеется ввиду переместить в PORTB состояние бита 2 регистра r19? in r16, PORTB mov r17, r19 andi r16, ~(1<<2) andi r17, (1<<2) or r16, r17 out PORTB, r16 Словами. Копируем состояние порта в r16. Копируем r19 в r17 чтобы не потерять r19 (можно не делать если значение r19 далее не потребуется). Зануляем нужный бит не трогая остальные. В r17 зануляем все биты кроме требуемого. Выполняем or между r16 и r17. состояние бита из r17 будет скопировано в r16. Отправляем состояние в порт. Я уже подзабыл ассемблер AVR. Там есть возможность напрямую работать с битами регистров а также команды проверки-пропуска SBRC/SBRS. sbrs r19, 2 rjump clear sbi PORTB, 2 rjump next clear: cbi PORTB, 2 next: Если бит 2 регистра r19 установлен то пропуск следующей интсрукции и на установка бита в PORTB с прыжком на метку next, иначе прыжок на метку clear http://www.atmel.com/Images/doc1022.pdf
|
|
|
|
|
Mar 30 2013, 17:45
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(serj32 @ Mar 30 2013, 19:24)  Это новерно будет так: out PD2,R19.2 Нет, не будет. Возможны варианты. Например так: Код sbrc R19,2 sbi PORTD,2 sbrs R19,2 cbi PORTD,2
|
|
|
|
|
Mar 31 2013, 10:43
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(Семин @ Mar 31 2013, 10:35)  Может я и ошибаюсь, но вроде такого способа, напрямую "закинуть", куда бы то нибыло, отдельный быт, нет ни у одного процессора. BST/BLD? in r16, PORTB bst r19, 2 bld r16, 2 out PORTB, r16 Правда не знаю насколько правомерно где попало использовать бит T т.к. на ассемблере не пишу.
|
|
|
|
|
Mar 31 2013, 11:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(mempfis_ @ Mar 31 2013, 17:43)  Правда не знаю насколько правомерно где попало использовать бит T т.к. на ассемблере не пишу. Правомерно, бит Т именно для таких манипуляций и сделан, но только с битами в регистрах, с битами портов через него, увы, не поработать. Для работы с I/O портом самое простое - вариант из сообщения #3. Он, кстати, исполняется на один такт быстрее Вашего.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
|
Apr 21 2013, 12:40
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Копирование одновременно нескольких, произвольно расставленных бит из регистра в регистр, биты задаются маской (паттерном) Код EOR R16, R10 CBR R16, 0b00100110; копируем биты 1,2,5 из регистра R10 в R16 EOR R16, R10 Для работы с портом в/в добавляем in в начале и out в конце: Код IN R16, PORTN EOR R16, R10 CBR R16, 0b01001101; копируем биты 0,2,3,6 из регистра R10 в PORTN EOR R16, R10 OUT PORTN, R16
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|