Pyku_He_oTTyda 0 14 марта, 2006 Опубликовано 14 марта, 2006 (изменено) · Жалоба Как правильно работать с шестнадцатиразрядным Z регистром в ATtiny15 на асм? В принципе интересует несколько команд: приращение на 1, вычитание 1, сравнить с заданным значением. Не приходилось работать с 16, кроме как вычитание в S2313, но здесь команда sbiw не поддерживается камнем, а dec работает с регистром, как с 8 разрядным (по крайней мере у меня). Изменено 14 марта, 2006 пользователем Pyku_He_oTTyda Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpyBot 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Здесь видимо все придется делать вручную - например для уменьшения на единицу несколько байтного числа надо уменьшить на единицу младший байт, затем проверить флаг N, и если он установлен (младший байт в результате вычитания "перешел" через ноль и стал отрицательным), то уменьшить на единицу следующий байт и т.д. Сравнение тоже просто - сначала сравниваем, например, старшие байты и если они равны, то младшие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
add 0 14 марта, 2006 Опубликовано 14 марта, 2006 (изменено) · Жалоба А если так: ;приращение на единицу inc zl brne a inc zh a: ;вычитание единицы dec zl brne b dec zh b: ;сравнение c 0x4536 inc zl brne в inc zh в: cpi zh,0x45 brne no_equ cpi zl,0x36 brne no_equ equ: ..... no_equ: ...... ;считать?! ; если из памяти то lpm ?! ; если из регистров то непонятен вопрос.. ;Удачи Изменено 14 марта, 2006 пользователем add Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpyBot 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба не, имхо brne не катит - при увеличении надо проверять флаг V, а при уменьшении N. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
add 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба "не, имхо brne не катит - при увеличении надо проверять флаг V, а при уменьшении N" ..?! :-) Команды dec, inc, влияют на флаг нуля! если результат операции равен нулю(а в этом примере это так!), то brne "отреогирует" правильно!!! ( для понятности вставте между inc и brne команду cpi zl,0 и все встанет на свои места, в смысле станет понятно!). зы: это рабочий код... можете проверить... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpyBot 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба так нам же нужен не 0, а именно переход через ноль т.е. если zl = 1, вычитаем 1 и при zl = 0 происходит уменьшение старшего байта. Но это же неправильно, т.к. это уменьшение должно происходить когда zl = 0xff. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
viakon 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба декремент subi zl,1 sbci zh,0 инкремент subi zl,255 sbci zh,255 сравнение c const ldi r16, high(const) cpi zl, low(const) cpc zh,r16 далее условие какое нужно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
add 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба " так нам же нужен не 0, а именно переход через ноль т.е. если zl = 1, вычитаем 1 и при zl = 0 происходит уменьшение старшего байта. Но это же неправильно, т.к. это уменьшение должно происходить когда zl = 0xff " ПАСИБА за замечание недоглядел! :ohmy: (просто при копировании из своей проги редактировал..невнимательно) Абсолютно справедливо..исправляю :rolleyes: : ;вычитание единицы dec zl cpi zl,0xff brne b dec zh b: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpyBot 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Если не принимать во внимание наиболее правильный вариант viakon'a и то, что правильнее будет не 0xff, a 0xfe, то лучше использовать команду brvc. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
add 0 14 марта, 2006 Опубликовано 14 марта, 2006 (изменено) · Жалоба viakon - :a14: согласен. " то лучше использовать команду brvc". Поясните пож-та чем "лучше" и чем "правильнее"? Изменено 14 марта, 2006 пользователем add Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Э, позвольте, а нафига на T15 работать с Z, как с 16-бит? Разве что для LPM, потому как озу там одни регистры ;), но для LPM как-то круто: +, - и т.д.??? Кстати, не забывайте, что комманда LD Rx,Z и подобные запарывают ZH - так написано в пдф. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pyku_He_oTTyda 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Спасибо за ответы! Вечером буду смотреть, что более удобным покажется. считать полученное значение. по инерции чушь написал, счас сотру Регистр нужен мне для длинной задержки по времени Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SpyBot 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба viakon - :a14: согласен. " то лучше использовать команду brvc". Поясните пож-та чем "лучше" и чем "правильнее"? Прошу прощения за ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
viakon 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Регистр нужен мне для длинной задержки по времени используй таймер У атмела чтото в апнотах было типа long time delay. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pyku_He_oTTyda 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба вот и хочу: время от таймера максимум 0,4 сек*65535 около 7 часов, так много мне не надо, но и 8 разрядов не хватает... апноты обязательно посмотрю, спасибо за наводку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться