реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Z регистр в ATtiny15, как правильно с ним работать на асм.
Pyku_He_oTTyda
сообщение Mar 14 2006, 07:36
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



Как правильно работать с шестнадцатиразрядным Z регистром в ATtiny15 на асм? В принципе интересует несколько команд:
приращение на 1, вычитание 1, сравнить с заданным значением.

Не приходилось работать с 16, кроме как вычитание в S2313, но здесь команда sbiw не поддерживается камнем, а dec работает с регистром, как с 8 разрядным (по крайней мере у меня). help.gif

Сообщение отредактировал Pyku_He_oTTyda - Mar 14 2006, 10:14


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Mar 14 2006, 07:53
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Здесь видимо все придется делать вручную - например для уменьшения на единицу несколько байтного числа надо уменьшить на единицу младший байт, затем проверить флаг N, и если он установлен (младший байт в результате вычитания "перешел" через ноль и стал отрицательным), то уменьшить на единицу следующий байт и т.д.
Сравнение тоже просто - сначала сравниваем, например, старшие байты и если они равны, то младшие.
Go to the top of the page
 
+Quote Post
add
сообщение Mar 14 2006, 08:11
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



А если так:

;приращение на единицу
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 ?!
; если из регистров то непонятен вопрос..

;Удачи

Сообщение отредактировал add - Mar 14 2006, 08:12


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Mar 14 2006, 08:15
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



не, имхо brne не катит - при увеличении надо проверять флаг V, а при уменьшении N.
Go to the top of the page
 
+Quote Post
add
сообщение Mar 14 2006, 08:24
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



"не, имхо brne не катит - при увеличении надо проверять флаг V, а при уменьшении N"
..?! :-)
Команды dec, inc, влияют на флаг нуля! если результат операции равен нулю(а в этом примере это так!), то brne "отреогирует" правильно!!! ( для понятности вставте между inc и brne команду cpi zl,0 и все встанет на свои места, в смысле станет понятно!).
зы: это рабочий код... можете проверить...


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Mar 14 2006, 08:51
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



так нам же нужен не 0, а именно переход через ноль
т.е. если zl = 1, вычитаем 1 и при zl = 0 происходит уменьшение старшего байта. Но это же неправильно, т.к. это уменьшение должно происходить когда zl = 0xff.
Go to the top of the page
 
+Quote Post
viakon
сообщение Mar 14 2006, 09:15
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



декремент
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
далее условие какое нужно
Go to the top of the page
 
+Quote Post
add
сообщение Mar 14 2006, 09:23
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



"
так нам же нужен не 0, а именно переход через ноль
т.е. если zl = 1, вычитаем 1 и при zl = 0 происходит уменьшение старшего байта. Но это же неправильно, т.к. это уменьшение должно происходить когда zl = 0xff
"
ПАСИБА за замечание недоглядел! ohmy.gif (просто при копировании из своей проги редактировал..невнимательно) Абсолютно справедливо..исправляю rolleyes.gif :

;вычитание единицы
dec zl
cpi zl,0xff
brne b
dec zh
b:


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Mar 14 2006, 09:30
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Если не принимать во внимание наиболее правильный вариант viakon'a и то, что правильнее будет не 0xff, a 0xfe, то лучше использовать команду brvc.
Go to the top of the page
 
+Quote Post
add
сообщение Mar 14 2006, 09:37
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



viakon - biggrin.gif a14.gif согласен.

" то лучше использовать команду brvc". Поясните пож-та чем "лучше" и чем "правильнее"?

Сообщение отредактировал add - Mar 14 2006, 09:39


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Rst7
сообщение Mar 14 2006, 09:46
Сообщение #11


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Э, позвольте, а нафига на T15 работать с Z, как с 16-бит? Разве что для LPM, потому как озу там одни регистры wink.gif, но для LPM как-то круто: +, - и т.д.???

Кстати, не забывайте, что комманда LD Rx,Z и подобные запарывают ZH - так написано в пдф.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Mar 14 2006, 10:16
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



Спасибо за ответы!
Вечером буду смотреть, что более удобным покажется.
Цитата
считать полученное значение.

по инерции чушь написал, счас сотру

Регистр нужен мне для длинной задержки по времени


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post
SpyBot
сообщение Mar 14 2006, 10:34
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491



Цитата(add @ Mar 14 2006, 12:37) *
viakon - biggrin.gif a14.gif согласен.

" то лучше использовать команду brvc". Поясните пож-та чем "лучше" и чем "правильнее"?

Прошу прощения за ошибку.
Go to the top of the page
 
+Quote Post
viakon
сообщение Mar 14 2006, 11:09
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 290
Регистрация: 9-12-05
Из: г. Пермь
Пользователь №: 12 002



Цитата(Pyku_He_oTTyda @ Mar 14 2006, 15:16) *
Регистр нужен мне для длинной задержки по времени


используй таймер

У атмела чтото в апнотах было типа long time delay.
Go to the top of the page
 
+Quote Post
Pyku_He_oTTyda
сообщение Mar 14 2006, 11:16
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 751
Регистрация: 4-08-05
Из: Великие Луки
Пользователь №: 7 360



вот и хочу: время от таймера максимум 0,4 сек*65535 около 7 часов, так много мне не надо, но и 8 разрядов не хватает...
апноты обязательно посмотрю, спасибо за наводку


--------------------
Андрей Смирнов
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th July 2025 - 20:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01484 секунд с 7
ELECTRONIX ©2004-2016