Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Тактовую частоту ограничивает тольео техпроцесс изготовления кристалла. AVR выполняет команды за 1-2 такта, PIC - за 4-8 тактов. Если сравнивать контроллеры построенные на одном техпроцессе, потолок производительности AVR гораздо выше. О каких мегагерцах вообще речь? Мегагерцы растут... но контроллер выполняющий команды за большее число тактов всегда работать будет медленней. Хотя конечно напрямую сравнивать нельзя - система команд слишком разная.
Можно легко сравнить только куски кода выполняющие аналогичные функции. и посчитать их по тактам.

Я когда-то делал одно устройство на AVR и такое же на PIC - последний потребовал частоту тактирования в 2 раза больше для аналогичной производительности.
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

Гуру помогите пожалуйста разобраться с USART. Задача вот какая:
1. Ведущее ус-во отправляет байт 01010101.
2. Затем ждет "байта ответа" от ведомого ус-ва (тоже 01010101, типа я на линии включено и все такое.)
3. если от ведомого нет отклика, то через небольшой промежуток времени отправить снова 01010101.(позвать ведомое) и так в цикле
4. По приему ответа - перейти к основной программе.

писал программу - гонял её в протеусе, отправлять отправляет, а вот с приемом что-то никак не получается(причем писал также для ведомого, чтобы отправлял байт, она работала и в протеусе их друг на друга завернул). я хотел использовать прерывание по переполнению таймера(там около 2-х секунд должно пройти). пытался разобраться в АВР по шагам - чето никак мозг не ловит где я просчитался - зацикливается в процедуре приема байта по USART и все тут. Вообще можно использовать прерывание по таймеру при работе USART?
p.s. прилагаю листинг. плиз, сильно не пинать - я начинающий, там все как в книжках пишут :roll:
Вложения
программа USART.txt
(1.73 КБ) 363 скачивания
Лень - двигатель прогресса!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

зацикливается... так ведь ты сам зацикливаешь прием байта пока что-то не поступит? По крайней мере такая подпрограмма приема байта описана в даташите, если ты её не менял - итог очевиден.

Тебе надо просто в основном цикле программы проверять бит приема UART - если он активен, значит считать байт. Или же это все засунуть в прерывание по приему UART.
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

Alexeyslav писал(а):надо просто в основном цикле программы проверять бит приема UART - если он активен, значит считать байт. Или же это все засунуть в прерывание по приему UART.


Спасибо,стало быть USART независимо может работать, как таймер? если может, то как этот процесс запустить... как называется этот бит приема USART?
Лень - двигатель прогресса!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

В даташите это можно найти без труда. Первым делом, ищи в даташите такую информацию и после того только обращайся на форум.

Код: Выделить всё

USART_Receive:
sbis UCSRA, RXC
rjmp USART_Receive
in R17, UDR
ret


Первая строчка - проверка наличия принятого байта, если он есть - следующая команда пропускается.
Вторая строчка - зацикливает на проверке, пока не будет принят байт - дальше не пустит.
третья строчка - собственно прием самого байта...
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

Alexeyslav, я использую именно эту процедуру по приему. мне нужно через интервал времени повторить передачу(2 сек, собственно неважно какой интенрвал) если не принят байт ответа ведомого. а так он циклится и все, как быть?
Лень - двигатель прогресса!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Циклится в основной программе - проверять, если прием есть - сохранить байт, и выполнять дальше программу, иначе - просто выполнять дальше программу. Либо доработать первые две строчки, чтобы они были со счетчиком времени - но тогда программа затормозится на 2 сек, если байт не будет принят.
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

а как заставить USART работать в таком режиме? чтобы он принимал байт, а из осн. цикла просто проверять бит приема. может найдется кусочек кода у Вас?
Лень - двигатель прогресса!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Весь алгоритм обработки данных запихни в прерывание по приему байта с UART. я уже говорил, кажется. А так не получится чтобы в одном месте проверить а в другом принимать - могут быть коллизии и нужна будет синхронизация.

Чтобы не вышло ситуации когда после проверки наличия байта где-то в другом месте байт будет принят, приемник UART пуст и тут очередь доходит до алгоритма который был вызван после проверки приема - он полагает что приемник не пуст, что-то там читает но там оказывается мусор.

Проверять и читать надо в одном месте. Если все это делать в прерывании, нужны какие-то семафоры-признаки чтобы основная программа знала что там что-то принято и сохранено в определенное место, или просто в виде бита-признака "верно-не верно".
Вобщем там уже большой простор реализации алгоритма работы программы, но чаще всего этот алгоритм описывается по теории "конечных автоматов" с фиксированными состояниями.
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ILYAUL »

Сегодня уже суббота и какой никакой а праздник.
Решил разобрать свои закрома и обнаружил микросхемы, которые мне в принципе в ближайшем обозримом будущем не понадобятся.
Продать - смысла нет , подарить тоже , в моём ближайшем окружении они большенству "по барабану".
Поэтому решил объявить конкурс для тех кто этим увлечён. Тому кто первый поймёт , что выполняет ниже приведённый код, мной будут высланы следующие призы
ATMEGA164P -2 шт. ATMEGA48- 2шт Attiny2313-1 шт Atmega1281-2 шт.

Код: Выделить всё

loop3:
      ld      temp1,-Y
loop1:
      ld      temp,-X      
      add      temp,temp1
      cpi      temp,10
      brsh   loop2
      st      X,temp
      rjmp   loop3
loop2:
      subi   temp,10
      st      X,temp
      ld      temp1,-Y
      sec
      adc      temp1,zero
      rjmp   loop1

Он не сложен для понимания и выполняет строго определённую функцию, написал , что бы побыстрее и не заморачиваться с двумя известными Application - это в качестве подсказки.
Отсылка приза за мой счёт.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Kavka »

Сложение двух чисел. Цифры чисел в виде байтов, в диапазоне 0-9 (типа BCD).
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
shads
Опытный кот
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение shads »

ILYAUL писал(а):Мне в принципе в ближайшем обозримом будущем не понадобятся.
Поэтому решил объявить конкурс для тех кто этим увлечён.
Так, если такой уровень знаний, что конкурсы объявляете, то точно могут пригодится железки .....

(аватарчик поменяли, чет сразу не узнал.....)

P.S. у меня тоже ATtiny13A штук 50 есть, и еще ATmega8A штук 30 валяются, какой бы конкурс придумать.....
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Лучше бы применение контроллерам нашли :)
Я на них(TINY13) сделал гирлянду полноцветную, все никак статейку не забодяжу - лень матушка. вот туда как раз и пригодится некоторое количество контроллеров, которое зависит от здравого смысла и фантазии.
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ILYAUL »

Kavka писал(а):Сложение двух чисел. Цифры чисел в виде байтов, в диапазоне 0-9 (типа BCD).

Совершенно верно. Это сложение двух десятичных цифр . Слагаемые могут иметь произвольное количество цифр - объём выделенной памяти для каждого.
Тут потребовалось складывать два BCD числа по 3 (max) знака в каждом и так не хотелось заморачиваться и переводом BCD-HEX-BCD и выводить на дисплей вот и написал.
Уважаемый Kavka, Плиз в личку Ваши почтовые координаты . И ждите обещанный приз.


аватарчик поменяли, чет сразу не узнал

Этот аватар у меня , честно говоря ,помоему больше 10 лет :)))
Я на них(TINY13) сделал гирлянду полноцветную, все никак статейку не забодяжу

Давайте быстрее , скоро уже Новый Год! :))) :beer: И аппокалипсис отменили в очередной раз.
Кстати тоже надо будет отметить. :))
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Alexeyslav »

Давайте быстрее , скоро уже Новый Год!
Это правда... 6 месяцев пролетят очень быстро.
Но и другая правда состоит в том что я даже не знаю как ЗДЕСЬ писать статьи... вроде бы нет такой кнопки как "создать статью" чтобы можно было её дописывать постоянно держа в виде черновика, а потом по окончанию "выложить".
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

Помогите вот с каким вопросом, господа. Решил разобраться с режимом СТС на 2313. скопипастил прогу для генерирования 20000кГц (такт.4МГЦ) на выходе РВ.3 и при компиляции АВР Студия пишет, что регистры OCR1AH и OCR1AL - неизвестные регистры (error: Invalid register). Использую 16-ти разрядный таймер. в чем дело не пойму? эти регистры что - описывать нужно вначале, как какой-нить temp?

(к МК по схеме на порт Д семь кнопок повешены и при нажатии любой должно на выходе РВ.3 сигнал выдавать.)

з.ы. прикладываю прогу, может быть я в ней где-то очень сильно ошибся.
Вложения
режим СТС.txt
(2.85 КБ) 186 скачиваний
Лень - двигатель прогресса!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Gudd-Head »

Посмотрите файл описаний — м.б. они там по-другому объявлены. Или используйте их абсолютный адрес.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

Gudd-Head писал(а): файл описаний — м.б. они там по-другому объявлены. Или используйте их абсолютный адрес.

что такое файл описаний м.б.?
а в даташите есть абсоютный адрес?
Лень - двигатель прогресса!
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение ILYAUL »

Там в студии есть вкладка I/O ,посмотрите Ваши регистры там как написаны
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Сообщение Челюскин »

Спасибо за совет!
нашел вкладку с описанием,вижу следующее:
OCR1AH 0*2B (0*4B)
OCR1AL 0*2A (0*4A)

это то, что нужно? как тогда записать эти адреса вместо имени регистров и какой из них?
описание ведь тоже-самое имею в виду OCR1AH....
Лень - двигатель прогресса!
Ответить

Вернуться в «AVR»