Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 14, 2012 11:56:43
Друг Кота
Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19986 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Челюскин писал(а):
что такое м.б.?
"может быть"
Челюскин писал(а):
а в даташите есть абсоютный адрес?
в даташите ВСЁ есть.
Ебааать...
Код:
.equ kdel = 200 ; ... out OCR1AH, high(kdel) ; Записать ст. байт коэфф.деления out OCR1AL, low(kdel) ; Записать мл. байт коэфф.деления
Что это???
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
.equ kdel = 200 ; ... out OCR1AH, high(kdel) ; Записать ст. байт коэфф.деления out OCR1AL, low(kdel) ; Записать мл. байт коэфф.деления
Что это???
и.... как нужно? (я пытался даже для самого себя их просто очистить "clr" вообще в исходной проге было косвенное чтение из таблицы типа: Table: .dw 1000, 1100, 1200; ну и так далее с вычислением адреса...... э..э в них я так понял нельзя непосредственно писать значения?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 14, 2012 12:20:37
Друг Кота
Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19986 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Если ещё не скачали, то обязательно скачайте себе книгу "Микроконтроллеры AVR семейства Tiny Mega фирмы Atmel" А.В.Евстифеев , там подробно описаны команды, в т.ч. ограничение их действия.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вт авг 14, 2012 13:02:35
Друг Кота
Карма: 67
Рейтинг сообщений: 1066
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19986 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
akl писал(а):
Неправильно. Можно ввести и вывести в любой/из любого РОН.
Видимо, имелась в виду связка ldi - out.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Подскажите, пожалуйста как организовать такой обмен через USART (оба MK - tiny2313V). 1. ведущее ус-во посылает байт. 2. ждет ответа от ведомого, если он не приходит, то через (ну 1-2 сек) посылает опять..
Написал проги для ведомого и ведущего, вот никак не соображу как сделать эту задержку. Про прерывания по приёму и таймеру пока только мечтаю, уж извините. Можно ли тут организовать простую задержку путем декремента регистров? и еще - в даташите даны примеры для USART - прием байта и передача, они являются жестко связанными, или в них можно что-то изменить, ту же задержку добавить?
Заголовок сообщения: Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт авг 17, 2012 23:02:20
Держит паяльник хвостом
Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24 Сообщений: 906 Откуда: ВО
Рейтинг сообщения:0
Челюскин писал(а):
2. ждет ответа от ведомого, если он не приходит, то через (ну 1-2 сек) посылает опять..
Код:
Priem: sbis UCSRA, RXC; rjmp Priem; in temp, UDR; ret;
все по даташиту... куда можно вставит задержку?
Этот кусок кода Вам надо вставить в подпрограмму задержки. Почему. У Вас процессор выполняет одновремено две задачи. Ждёт ответ slave и считает секунды. В Вашем случае , без прерываний, нужно чтобы проверку на прием и проверку на истечение времени процессор обрабатывал вместе.
Ну типа так
Код:
ldi теmp, 0xff ;Величина задержки для примера , сами напишите сколько Вам надо и сколько регистров потребуется для задержки 1 сек Лень - двигатель прогресса! DELAY: sbic UCSRA, RXC rjmp END subi temp,1 ;В отличие от dec команды sub и subi выставляют + ещё флаг С - привыкайте лучше к ним brcc DELAY out UDR,temp ;Согласно Вашему- то через (ну 1-2 сек) посылает опять.. rjmp DELAY END: To куда-то
Тут надо определится. Ведь подпрограмма у тебя одна, как при выходе из подпрограммы основная программа узнает что выход был по таймауту а не по считыванию данных? Надо заводить где-то признак или отводить под это целый регистр.
Ну а сама реализация... проще некуда - собственно прием данных осуществляется как? сначала проверяется приняты ли данные(один бит спецрегистра) если данные приняты - происходит считывание и выход, если нет - переход на проверку приняты ли данные. У тебя вместо этого перехода надо осуществить переход на подпрограмму формирования задержки скажем в 1мс и отсчет количества этих задержек - если этот алгоритм насчитал 2000 раз значит выставить признак таймаута и выйти с подпрограммы. Перед тем как зацикливаться конечно надо обнулить счетчик и сбросить признак таймаута.
Можно ли тут организовать простую задержку путем декремента регистров?
Можно, но не нужно. Тупо считать задержку вычитанием, при этом остальной процесс останавливается - это очень уж по школярски. Попробуй прерывания, это не так и сложно. Один раз сделаешь - пот`ом от них за уши не оттащишь
Сообразил тут декодер радиоканала на тиньке 13-й, в двух вариантах, на С и на асме, так вот мож кому интересно будет узнать, разница в весе кода - больше чем в 2 раза, на С - 870 байт, а на асме тоже самое - 420 байт..... Помоему асма остается актуальной для таких мелкашек как tiny13
Я даже больше скажу -- если написать на асме программу размером байт десять, то С-шный вариант проиграет раз в пять-восемь, так как С (по крайней мере WinAVR) и всю таблицу прерываний заполняет переходом на ловушку необработанных прерываний, и прочие «общеподготовительные» вещи могут место занять. Т.е. у С-шной программы даже без желания автора обычно несколько другой функционал.
И на малых программах асм позволяет почти все переменные в регистрах разместить.
На больших программах недостаток С в виде некоторых начальных затрат и преимущество асма по размещению части переменных в оптимальных для этого регистрах пропадают и разница уже не такая большая.
Никаких противоречий со сказанным ранее про асм и С Для tiny13, tiny26, tiny24 я и сам на асме пишу -- когда нужно вылизывать такты/потребление. А когда не нужно — то лишь бы влезло.
Кстати, если оно на С под WinAVR или без особой привязке к компилятору, если можно — в личку оба проекта, я посмотрю, что можно сделать с С-шным вариантом.
Увидел всё по линку, гляну по свободе. На носу куча выходных
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения