Страница 3 из 3
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 09:13:00
Engineer_Keen
wixa писал(а): - он будет выглядеть вот так?
Наверно все-таки CJEQ, а не CJQE, хотя назвать можно хоть COMPJMPIFEQU, главное потом при вызове не опечататься...
wixa писал(а):
А циклы будут такого вида:
или так:
-?
Ну очевидно что RJMP нужен, так? Значит либо вносим его в макрос, либо пишем каждый раз отдельно, после вызова макроса. Макрос, это ведь просто подстановка внутримакросного кода в месте его вызова.
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 09:21:32
wixa

Как раз понял пока ждал ответа что правильный второй вариант
Как я понял из инета, BRNE работает, только там, где между BRNE и вызываемой функцией, не больше 127 машинных тактов.... если больше нужно уже идти через RJMP.... Правильно ?
Правда я пока не понимаю как работают циклы, и не могу посчитать сколько они занимают этих тактов

Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 09:54:03
Engineer_Keen
wixa писал(а):Как я понял из инета, BRNE работает, только там, где между BRNE и вызываемой функцией, не больше 127 машинных тактов....
Только не тактов, а адресов программной памяти.
wixa писал(а):если больше нужно уже идти через RJMP.... Правильно ?
А если и RJMP не хватает (+- 2К), то тогда JMP. Но это в контроллерах с более чем 8К памяти.
wixa писал(а):
Правда я пока не понимаю как работают циклы, и не могу посчитать сколько они занимают этих тактов
Ищите за сколько тактов выполняется каждая команда и умножайте на количество выполнений

Большинство команд выполняются за 1 такт, это RISC архитектура.
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 10:01:49
wixa
А как же тогда считается эта программная память? или сначала пишешь, потом выдаёт ошибку, потом исправляешь ?
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 10:35:39
Engineer_Keen
Считается так же как и такты - по количеству команд. В справке на каждую команду написано, за сколько тактов она выполняется и сколько памяти занимает. Большинство команд занимают одно слово (2 байта). Счетчик команд работает со словами, а адресация в командах BRxx - 7 разрядная (по опкоду с той-же справке видно), вот и получается что больше чем на 63 шага (слова) назад и больше чем на 64 вперед она перепрыгнуть не может.
Обычно так и получается, пишется программа, отлаживается, что-то добавляется и в какой-то момент может возникнуть ситуация когда приходится BRNE заменять на противоположную команду+RJMP, или наоборот.
Адреса можно посмотреть, если включить в настройках project-assembler oprions -create list file. В файле lst в первой колонке будет адрес. Если например у метки RES будет адрес 0x2C, то достать до нее можно максимум из строки с адресом 0x2C+0x3F=0x6B. А если поставить BRNE на нее позднее и вылезет та самая ошибка.
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 10:43:37
wixa
Engineer_Keen писал(а): В справке на каждую команду написано
- а где эту справку взять ?:)
Когда последовательно написаны команды, вроде понятно, а вот как считать внутри цикла, считаются все проходки по циклу, или только одна?
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 10:48:41
Engineer_Keen
wixa писал(а):а где эту справку взять ?:)
Да хоть в самой студии курсор на команду поставить и F1 нажать
wixa писал(а):
Когда последовательно написаны команды, вроде понятно, а вот как считать внутри цикла, считаются все проходки по циклу, или только одна?
Если считаем занятую память, то один проход, а если задержку в тактах, тогда конечно все проходы, причем нужно учитывать, что например BRNE в случае невыполнения условия выполняется за 1 такт (просто переход на следующую команду), а в случае выполнения условия - за 2 такта (прыжок на назначенный адрес), это в справке есть.
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 11:01:56
wixa
Engineer_Keen писал(а):
Да хоть в самой студии курсор на команду поставить и F1 нажать
Видимо у меня как то она плохо настроена

Может какую то онлайн посоветуете? или справочник какой то скачать ?
Engineer_Keen писал(а):
Когда последовательно написаны команды, вроде понятно, а вот как считать внутри цикла, считаются все проходки по циклу, или только одна?
Если считаем занятую память, то один проход, а если задержку в тактах, тогда конечно все проходы, причем нужно учитывать, что например BRNE в случае невыполнения условия выполняется за 1 такт (просто переход на следующую команду), а в случае выполнения условия - за 2 такта (прыжок на назначенный адрес), это в справке есть.
С каждым разом становится всё интереснее и интереснее

Да в Си как то скучнее....

Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 13:19:51
Engineer_Keen
wixa писал(а):
Видимо у меня как то она плохо настроена

Может какую то онлайн посоветуете? или справочник какой то скачать ?
А просто help-assembler help не работает?
Я уже
тут дал ссылку.
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 13:35:01
wixa
Engineer_Keen писал(а):wixa писал(а):
Видимо у меня как то она плохо настроена

Может какую то онлайн посоветуете? или справочник какой то скачать ?
А просто help-assembler help не работает?
Че-то как то нет
Вот нашел, помойму неплохая справка
http://dfe3300.karelia.ru/koi/posob/avr ... sm-rus.htm
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 13:50:15
Engineer_Keen
Сойдет. Конечно не такая подробная как по F1, но основные параметры команд написаны.
Re: Attiny13 : 3х канальный ШИМ по внешниму прерыванию
Добавлено: Пт апр 27, 2012 19:29:53
Alexeyslav
Самая полная информация по командам можно найти в даташите на контроллер, там есть сводная таблица и краткое описание каждой команды.