Научите писать под AVR

Обсуждаем контроллеры компании Atmel.
Ответить
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Вс мар 31, 2013 17:22:21
Откуда: Бурятия

Сообщение Масяня »

То что кот писал http://radiokot.ru/start/mcu_fpga/avr/ прочитал, попробовал повторить, но вот проблема, нету у меня этого мк есть только мега8 аж 4 штуки пробовал переписать под них не вышло. Помогите разобраться что к чему. На тыкал я чего то не того.
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20

.cseg
.org 0

ldi Temp,0с11111111 ;настройка порта C
out DDRС,Temp

Begin: ldi Temp,0с00000001 ;зажигаем 1-й светодиод
out PortС,Temp

ldi Temp1,0 ;задержка
ldi Temp2,0
ldi Temp3,10

Loop1: dec Temp1
brne Loop1

dec Temp2
brne Loop1

dec Temp3
brne Loop1



ldi Temp,0с00000010 ;зажигаем 2-й светодиод
out PortС,Temp

ldi Temp1,0 ;задержка
ldi Temp2,0
ldi Temp3,10

Loop2: dec Temp1
brne Loop2

dec Temp2
brne Loop2

dec Temp3
brne Loop2



ldi Temp,0с00000100 ;зажигаем 3-й светодиод
out PortС,Temp

ldi Temp1,0 ;задержка
ldi Temp2,0
ldi Temp3,10


Loop3: dec Temp1
brne Loop3

dec Temp2
brne Loop3

dec Temp3
brne Loop3



ldi Temp,0с00001000 ;зажигаем 4-й светодиод
out PortС,Temp

ldi Temp1,0 ;задержка
ldi Temp2,0
ldi Temp3,10

Loop4: dec Temp1
brne Loop4

dec Temp2
brne Loop4

dec Temp3
brne Loop4


ldi Temp,0с00000001 ;зажигаем 5-й светодиод
out PortС,Temp

ldi Temp1,0 ;задержка
ldi Temp2,0
ldi Temp3,10

Loop5: dec Temp1
brne Loop5

dec Temp2
brne Loop5

dec Temp3
brne Loop5


rjmp Begin
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Реклама
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Масяня писал(а):Помогите разобраться что к чему.
Начать с того, что программа оформлена безобразно. Учитесь правильному стилю написания. Где таблица векторов прерываний? Где инициализация вершины стека?

Но проблема именно этой программы, думается мне, вот в чем:

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

ldi Temp,0с00000001
Если вы хотите занести в регистр двоичное число, то писать надо так:

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

 ldi Temp,0b00000001
Но правильнее сразу отвыкать от написания "магических чисел". В файле описания любого выбранного Вами контроллера есть определения наподобие:

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

.equ PORTC0 = 0
.equ PORTC1 = 1
.equ PORTC2 = 2
и так далее. Вот и пишите:

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

ldi Temp,(1<<PORTC2)|(1<<PORTC1)|(1<<PORTC0)
Данная запись эквивалентна установке битов PORTC2, PORTC1, PORTC0 в регистре Temp. Остальные биты будут сброшены.
А если учесть данное выше определение имен битов PORTC0... PORTC2, в регистре Temp будут установлены биты 0, 1, 2

Далее. Если Вы решили писать на ассемблере, то рекомендую установить среду разработки AVR Studio версии 4.19 ("пятерку" и шестерку" не ставьте, намучаетесь, если опыта нет).
А в AVR Studio есть встроенный симулятор. В нем можно отлаживать программу и видеть, устанавливаются ли нужные биты в нужных регистрах. И сразу будет понятно, какая команда работает "не так". Вернее, будет видно, что Вы что-то не то написали.

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

Удачи.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

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

ldi Temp,(1<<PORTC2)|(1<<PORTC1)|(1<<PORTC0)
Пишите правильно -

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

ldi Temp,0x07
Docendo discimus
Контактная информация:
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

pyzhman писал(а):
Alkul писал(а):

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

ldi Temp,(1<<PORTC2)|(1<<PORTC1)|(1<<PORTC0)
Пишите правильно -

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

ldi Temp,0x07
Это как раз неправильно.
Так нужно писать, если в регистр заносится числовая константа. Например, инициализация регистра TCNT таймер-счетчика. А если речь идет об установке каких-либо бит в регистре, то я бе не рекомендовал пользоваться такой записью.
Если Вам нужно будет установить, допустим, бит разрешения прерываний по переполнению таймера 0, достаточно написать
ldi Temp,(1<<TOIE0)
и подключить соответствующий применяемому контроллеру файл-описатель. А использование магических чисел - это возможность внести в программу дополнительные ошибки.

Ничего-ничего, "подрастете" - поймете. Я поначалу тоже числами все писал.
Последний раз редактировалось Alkul Сб фев 22, 2014 19:44:25, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Если Вам нужно будет установить, допустим, бит разрешения прерываний таймера 0, достаточно написать
ldi Temp,1
и не надо подключать соответствующий файл-описатель. А с машиной надо разговаривать на её языке, а не на тарабарском. Впрочем, я не переубеждаю вас, вы вольны писать так, как считаете нужным.
Docendo discimus
Контактная информация:
Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Вс мар 31, 2013 17:22:21
Откуда: Бурятия

Сообщение Масяня »

:shock: :shock: :shock: Я только начал учится, это так сказать мои первые строки, а вы меня уже загрузили. Мой цп не способен обработать столько и зараз, без алгоритмов и прочих последовательностей действия. Может есть какой нибудь список команд для начала.
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Сначала просто спаяйте схему с кнопкой и светодиодом. И пишите - выход на светодиод повторяет состояние кнопки, т.е. нажал - горит, отпустил - гаснет.
Docendo discimus
Контактная информация:
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

pyzhman писал(а):Если Вам нужно будет установить, допустим, бит разрешения прерываний таймера 0, достаточно написать
ldi Temp,1
А ничего, что у разных моделей контроллеров эти биты могут быть на разных местах? В "старших" моделях ATmega у каждого таймера собственный регистр TIMSK. И все биты разрешения прерываний там находятся , если не ошибаюсь, в одной и той же позиции.
А в "младших" AVR-ах один TIMSK на все таймеры. И биты разрешения прерываний у каждого таймера находятся на разных позициях.

Каждый раз будете проверять? А если есть наработанная библиотека подпрограмм, которую начинали разрабатывать давно? При использовании Вашего стиля написания придется перелопачивать все подпрограммы и исправлять адресацию бит под каждый конкретный контроллер.
pyzhman писал(а):А с машиной надо разговаривать на её языке, а не на тарабарском.
Язык машины - двоичные коды. Зачем Вы используете тарабарский ассемблер? Пишите сразу HEX-файл.

Впрочем, чего я Вас переубеждаю. Пишите, как хотите, дело Ваше. Вам "блох" отлавливать, не мне.
Я, в общем-то, писал для человека, который только начал осваивать ассемблер. И логичней сразу учиться правильному стилю написания, чтобы в дальнейшем не переучиваться.
Масяня писал(а):Может есть какой нибудь список команд для начала.
Имеете в виду список команд ассемблера?
Рекомендую скачать, поищите в инете, там куча таких файлов, как на английском, так и на русском.
Масяня писал(а):Я только начал учится, это так сказать мои первые строки
Задавайте конкретные вопросы, что не получается, что не знаете, как сделать. Никогда Вам не откажут в помощи.
Последний раз редактировалось Alkul Сб фев 22, 2014 19:54:16, всего редактировалось 1 раз.
Собутыльник Кота
Аватара пользователя
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев

Сообщение BCluster »

pyzhman писал(а):А с машиной надо разговаривать на её языке, а не на тарабарском.
Машине то как раз совершенно пофиг. А вот читать код с цифрами неудобно :)
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Вс мар 31, 2013 17:22:21
Откуда: Бурятия

Сообщение Масяня »

я не спорю, но я просто почти не одной команды не понял, мене надо на пальцах объяснить че и к чему тут, как луче сделать то или другое. Я дуб дубом в этом, могу только чужое залить, а хочу научиться сам делать.
Что касается схемы припаял светодиоды 6 штук с 23-28 ногу что дальше. общий +
Последний раз редактировалось Масяня Сб фев 22, 2014 20:01:52, всего редактировалось 1 раз.
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Alkul писал(а):
pyzhman писал(а):Пишите, как хотите, дело Ваше. Вам "блох" отлавливать, не мне.
Чем я и занимаюсь. И вас о помощи не прошу. Ну а если вы считаете свое мнение единственно правильным - .
Docendo discimus
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Вс мар 31, 2013 17:22:21
Откуда: Бурятия

Сообщение Масяня »

Нету у меня пока по этому поводу своего мнения. Есть только желание научиться
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Вс мар 31, 2013 17:22:21
Откуда: Бурятия

Сообщение Масяня »

Может попробовать хотя бы зажечь хоть один из светодиодов с 23-28 вывод
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

Конечно же, так и сделайте. Один, два, через один.
Docendo discimus
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Вс мар 31, 2013 17:22:21
Откуда: Бурятия

Сообщение Масяня »

Но как, объясните что мене писать, я даже команд не знаю, скачал AVR Studio 4.12
Изображение
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Друг Кота
Аватара пользователя
Сообщения: 15753
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Рекомендую использовать или AVRStudio 4.19 ( http://www.atmel.com/System/BaseForm.as ... m:26-17924 )
для "слабеньких" ПК или 6.2 ( http://www.atmel.com/System/BaseForm.as ... m:26-49769 ) для оччень навороченных (там добавки под АВР32 и армы). В обеих случаях для скачивания потребуется формальная регистрация на сайте производителя.
:beer:
ATmega8... прийдется таки шаблончик соорудить... :cry:
Последний раз редактировалось BOB51 Сб фев 22, 2014 21:03:10, всего редактировалось 1 раз.
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Масяня писал(а):я даже команд не знаю
В приложении я прицепил 2 файла с списанием команд. Один файл - на русском, но там только описание "классических" авр-овских команд. Там нет нескольких команд, которые появились, начиная с семейства ATmega.
В другом файле - все авр-овские команды, но он на английском.
Изучайте. Еще крайне рекомендую скачать и изучить описание того контроллера, с которым будете работать. Без знания архитектуры контроллера нельзя полноценно программировать на ассемблере.

Скорее соглашусь вот с этим:
BOB51 писал(а):Рекомендую использовать или AVRStudio 4.19
Тем более, я об этом уже писал.
"Шестерка" для новичка слишком сложна, думаю.
Вложения
AVR Instruction Set.pdf
(1.04 МБ) 349 скачиваний
Assembler AVR (rus).pdf
(687.46 КБ) 396 скачиваний
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Вс мар 31, 2013 17:22:21
Откуда: Бурятия

Сообщение Масяня »

не получается скачать AVRStudio 4.19 только AVRStudio 4.12 но там тоже есть мега8
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

Масяня писал(а):не получается скачать AVRStudio 4.19
Почему?
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Вс мар 31, 2013 17:22:21
Откуда: Бурятия

Сообщение Масяня »

дайте тогда работающею ссылку на скачивание
Когда кажется что ты все понял, оказывается что ты и половины не знаешь!
Ответить

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