Ассемблер (ASM) для AVR в вопросах и ответах
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Тактовую частоту ограничивает тольео техпроцесс изготовления кристалла. AVR выполняет команды за 1-2 такта, PIC - за 4-8 тактов. Если сравнивать контроллеры построенные на одном техпроцессе, потолок производительности AVR гораздо выше. О каких мегагерцах вообще речь? Мегагерцы растут... но контроллер выполняющий команды за большее число тактов всегда работать будет медленней. Хотя конечно напрямую сравнивать нельзя - система команд слишком разная.
Можно легко сравнить только куски кода выполняющие аналогичные функции. и посчитать их по тактам.
Я когда-то делал одно устройство на AVR и такое же на PIC - последний потребовал частоту тактирования в 2 раза больше для аналогичной производительности.
Можно легко сравнить только куски кода выполняющие аналогичные функции. и посчитать их по тактам.
Я когда-то делал одно устройство на AVR и такое же на PIC - последний потребовал частоту тактирования в 2 раза больше для аналогичной производительности.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Гуру помогите пожалуйста разобраться с USART. Задача вот какая:
1. Ведущее ус-во отправляет байт 01010101.
2. Затем ждет "байта ответа" от ведомого ус-ва (тоже 01010101, типа я на линии включено и все такое.)
3. если от ведомого нет отклика, то через небольшой промежуток времени отправить снова 01010101.(позвать ведомое) и так в цикле
4. По приему ответа - перейти к основной программе.
писал программу - гонял её в протеусе, отправлять отправляет, а вот с приемом что-то никак не получается(причем писал также для ведомого, чтобы отправлял байт, она работала и в протеусе их друг на друга завернул). я хотел использовать прерывание по переполнению таймера(там около 2-х секунд должно пройти). пытался разобраться в АВР по шагам - чето никак мозг не ловит где я просчитался - зацикливается в процедуре приема байта по USART и все тут. Вообще можно использовать прерывание по таймеру при работе USART?
p.s. прилагаю листинг. плиз, сильно не пинать - я начинающий, там все как в книжках пишут
1. Ведущее ус-во отправляет байт 01010101.
2. Затем ждет "байта ответа" от ведомого ус-ва (тоже 01010101, типа я на линии включено и все такое.)
3. если от ведомого нет отклика, то через небольшой промежуток времени отправить снова 01010101.(позвать ведомое) и так в цикле
4. По приему ответа - перейти к основной программе.
писал программу - гонял её в протеусе, отправлять отправляет, а вот с приемом что-то никак не получается(причем писал также для ведомого, чтобы отправлял байт, она работала и в протеусе их друг на друга завернул). я хотел использовать прерывание по переполнению таймера(там около 2-х секунд должно пройти). пытался разобраться в АВР по шагам - чето никак мозг не ловит где я просчитался - зацикливается в процедуре приема байта по USART и все тут. Вообще можно использовать прерывание по таймеру при работе USART?
p.s. прилагаю листинг. плиз, сильно не пинать - я начинающий, там все как в книжках пишут
- Вложения
-
- программа USART.txt
- (1.73 КБ) 363 скачивания
Лень - двигатель прогресса!
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
зацикливается... так ведь ты сам зацикливаешь прием байта пока что-то не поступит? По крайней мере такая подпрограмма приема байта описана в даташите, если ты её не менял - итог очевиден.
Тебе надо просто в основном цикле программы проверять бит приема UART - если он активен, значит считать байт. Или же это все засунуть в прерывание по приему UART.
Тебе надо просто в основном цикле программы проверять бит приема UART - если он активен, значит считать байт. Или же это все засунуть в прерывание по приему UART.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Alexeyslav писал(а):надо просто в основном цикле программы проверять бит приема UART - если он активен, значит считать байт. Или же это все засунуть в прерывание по приему UART.
Спасибо,стало быть USART независимо может работать, как таймер? если может, то как этот процесс запустить... как называется этот бит приема USART?
Лень - двигатель прогресса!
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
В даташите это можно найти без труда. Первым делом, ищи в даташите такую информацию и после того только обращайся на форум.
Первая строчка - проверка наличия принятого байта, если он есть - следующая команда пропускается.
Вторая строчка - зацикливает на проверке, пока не будет принят байт - дальше не пустит.
третья строчка - собственно прием самого байта...
Код: Выделить всё
USART_Receive:
sbis UCSRA, RXC
rjmp USART_Receive
in R17, UDR
retПервая строчка - проверка наличия принятого байта, если он есть - следующая команда пропускается.
Вторая строчка - зацикливает на проверке, пока не будет принят байт - дальше не пустит.
третья строчка - собственно прием самого байта...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Alexeyslav, я использую именно эту процедуру по приему. мне нужно через интервал времени повторить передачу(2 сек, собственно неважно какой интенрвал) если не принят байт ответа ведомого. а так он циклится и все, как быть?
Лень - двигатель прогресса!
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Циклится в основной программе - проверять, если прием есть - сохранить байт, и выполнять дальше программу, иначе - просто выполнять дальше программу. Либо доработать первые две строчки, чтобы они были со счетчиком времени - но тогда программа затормозится на 2 сек, если байт не будет принят.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
а как заставить USART работать в таком режиме? чтобы он принимал байт, а из осн. цикла просто проверять бит приема. может найдется кусочек кода у Вас?
Лень - двигатель прогресса!
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Весь алгоритм обработки данных запихни в прерывание по приему байта с UART. я уже говорил, кажется. А так не получится чтобы в одном месте проверить а в другом принимать - могут быть коллизии и нужна будет синхронизация.
Чтобы не вышло ситуации когда после проверки наличия байта где-то в другом месте байт будет принят, приемник UART пуст и тут очередь доходит до алгоритма который был вызван после проверки приема - он полагает что приемник не пуст, что-то там читает но там оказывается мусор.
Проверять и читать надо в одном месте. Если все это делать в прерывании, нужны какие-то семафоры-признаки чтобы основная программа знала что там что-то принято и сохранено в определенное место, или просто в виде бита-признака "верно-не верно".
Вобщем там уже большой простор реализации алгоритма работы программы, но чаще всего этот алгоритм описывается по теории "конечных автоматов" с фиксированными состояниями.
Чтобы не вышло ситуации когда после проверки наличия байта где-то в другом месте байт будет принят, приемник UART пуст и тут очередь доходит до алгоритма который был вызван после проверки приема - он полагает что приемник не пуст, что-то там читает но там оказывается мусор.
Проверять и читать надо в одном месте. Если все это делать в прерывании, нужны какие-то семафоры-признаки чтобы основная программа знала что там что-то принято и сохранено в определенное место, или просто в виде бита-признака "верно-не верно".
Вобщем там уже большой простор реализации алгоритма работы программы, но чаще всего этот алгоритм описывается по теории "конечных автоматов" с фиксированными состояниями.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сегодня уже суббота и какой никакой а праздник.
Решил разобрать свои закрома и обнаружил микросхемы, которые мне в принципе в ближайшем обозримом будущем не понадобятся.
Продать - смысла нет , подарить тоже , в моём ближайшем окружении они большенству "по барабану".
Поэтому решил объявить конкурс для тех кто этим увлечён. Тому кто первый поймёт , что выполняет ниже приведённый код, мной будут высланы следующие призы
ATMEGA164P -2 шт. ATMEGA48- 2шт Attiny2313-1 шт Atmega1281-2 шт.
Он не сложен для понимания и выполняет строго определённую функцию, написал , что бы побыстрее и не заморачиваться с двумя известными Application - это в качестве подсказки.
Отсылка приза за мой счёт.
Решил разобрать свои закрома и обнаружил микросхемы, которые мне в принципе в ближайшем обозримом будущем не понадобятся.
Продать - смысла нет , подарить тоже , в моём ближайшем окружении они большенству "по барабану".
Поэтому решил объявить конкурс для тех кто этим увлечён. Тому кто первый поймёт , что выполняет ниже приведённый код, мной будут высланы следующие призы
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 - это в качестве подсказки.
Отсылка приза за мой счёт.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сложение двух чисел. Цифры чисел в виде байтов, в диапазоне 0-9 (типа BCD).
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Так, если такой уровень знаний, что конкурсы объявляете, то точно могут пригодится железки .....ILYAUL писал(а):Мне в принципе в ближайшем обозримом будущем не понадобятся.
Поэтому решил объявить конкурс для тех кто этим увлечён.
(аватарчик поменяли, чет сразу не узнал.....)
P.S. у меня тоже ATtiny13A штук 50 есть, и еще ATmega8A штук 30 валяются, какой бы конкурс придумать.....
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Лучше бы применение контроллерам нашли 
Я на них(TINY13) сделал гирлянду полноцветную, все никак статейку не забодяжу - лень матушка. вот туда как раз и пригодится некоторое количество контроллеров, которое зависит от здравого смысла и фантазии.
Я на них(TINY13) сделал гирлянду полноцветную, все никак статейку не забодяжу - лень матушка. вот туда как раз и пригодится некоторое количество контроллеров, которое зависит от здравого смысла и фантазии.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Kavka писал(а):Сложение двух чисел. Цифры чисел в виде байтов, в диапазоне 0-9 (типа BCD).
Совершенно верно. Это сложение двух десятичных цифр . Слагаемые могут иметь произвольное количество цифр - объём выделенной памяти для каждого.
Тут потребовалось складывать два BCD числа по 3 (max) знака в каждом и так не хотелось заморачиваться и переводом BCD-HEX-BCD и выводить на дисплей вот и написал.
Уважаемый Kavka, Плиз в личку Ваши почтовые координаты . И ждите обещанный приз.
аватарчик поменяли, чет сразу не узнал
Этот аватар у меня , честно говоря ,помоему больше 10 лет
Я на них(TINY13) сделал гирлянду полноцветную, все никак статейку не забодяжу
Давайте быстрее , скоро уже Новый Год!
И аппокалипсис отменили в очередной раз.Кстати тоже надо будет отметить.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Это правда... 6 месяцев пролетят очень быстро.Давайте быстрее , скоро уже Новый Год!
Но и другая правда состоит в том что я даже не знаю как ЗДЕСЬ писать статьи... вроде бы нет такой кнопки как "создать статью" чтобы можно было её дописывать постоянно держа в виде черновика, а потом по окончанию "выложить".
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Помогите вот с каким вопросом, господа. Решил разобраться с режимом СТС на 2313. скопипастил прогу для генерирования 20000кГц (такт.4МГЦ) на выходе РВ.3 и при компиляции АВР Студия пишет, что регистры OCR1AH и OCR1AL - неизвестные регистры (error: Invalid register). Использую 16-ти разрядный таймер. в чем дело не пойму? эти регистры что - описывать нужно вначале, как какой-нить temp?
(к МК по схеме на порт Д семь кнопок повешены и при нажатии любой должно на выходе РВ.3 сигнал выдавать.)
з.ы. прикладываю прогу, может быть я в ней где-то очень сильно ошибся.
(к МК по схеме на порт Д семь кнопок повешены и при нажатии любой должно на выходе РВ.3 сигнал выдавать.)
з.ы. прикладываю прогу, может быть я в ней где-то очень сильно ошибся.
- Вложения
-
- режим СТС.txt
- (2.85 КБ) 186 скачиваний
Лень - двигатель прогресса!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Посмотрите файл описаний — м.б. они там по-другому объявлены. Или используйте их абсолютный адрес.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head писал(а): файл описаний — м.б. они там по-другому объявлены. Или используйте их абсолютный адрес.
что такое файл описаний м.б.?
а в даташите есть абсоютный адрес?
Лень - двигатель прогресса!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Там в студии есть вкладка I/O ,посмотрите Ваши регистры там как написаны
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо за совет!
нашел вкладку с описанием,вижу следующее:
OCR1AH 0*2B (0*4B)
OCR1AL 0*2A (0*4A)
это то, что нужно? как тогда записать эти адреса вместо имени регистров и какой из них?
описание ведь тоже-самое имею в виду OCR1AH....
нашел вкладку с описанием,вижу следующее:
OCR1AH 0*2B (0*4B)
OCR1AL 0*2A (0*4A)
это то, что нужно? как тогда записать эти адреса вместо имени регистров и какой из них?
описание ведь тоже-самое имею в виду OCR1AH....
Лень - двигатель прогресса!