Ассемблер (ASM) для AVR в вопросах и ответах
-
chezetmobile
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Ср сен 22, 2010 23:17:40
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Здравствуйте, Ув. Коты и Кошечки.
Новоиспеченный пользователь АVR (то есть я) пытается настроить на вывод два порта D и В, на одновременную работу, на тини2313. но ни че не получается, поиск результатом не увенчался(((
цель: "дергание" лапками тини на двух портах.
Если кому не жалко кода кусочек, или подправте мой))) поделитесь опытом, плз.
Новоиспеченный пользователь АVR (то есть я) пытается настроить на вывод два порта D и В, на одновременную работу, на тини2313. но ни че не получается, поиск результатом не увенчался(((
цель: "дергание" лапками тини на двух портах.
Если кому не жалко кода кусочек, или подправте мой))) поделитесь опытом, плз.
- Вложения
-
- code.asm
- (3.85 КБ) 418 скачиваний
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну порт B настроили на выход, ну посылаете на него какие-то данные, ничего что индусский код, вроде должен работать. Но что мешает точно так-же настроить порт D (один раз при инициализации, а не в цикле) и выводить на него тот же самый temp в той-же процедуре delay?
-
chezetmobile
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Ср сен 22, 2010 23:17:40
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
пробовал, чаво-то не получается... ручонки кривые похоже... направьте струю, пожалуйста, в нужное русло...
- nibiluk
- Потрогал лапой паяльник
- Сообщения: 383
- Зарегистрирован: Пн мар 16, 2009 23:35:42
- Откуда: Украина Новоднестровск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
chezetmobile писал(а):Здравствуйте, Ув. Коты и Кошечки.
Новоиспеченный пользователь АVR (то есть я) пытается настроить на вывод два порта D и В, на одновременную работу, на тини2313. но ни че не получается, поиск результатом не увенчался(((
цель: "дергание" лапками тини на двух портах.
Если кому не жалко кода кусочек, или подправте мой))) поделитесь опытом, плз.
Я конечно тоже новичек, но мне кажется что содержимое temp нужно переносить в PORTB вроде типа того
ldi Temp,0b00010010 ; запись константы
out PORTB,temp ;вывод на индикацию
rcall Delay ;вызов подпрограммы задержки
а вобще тут почитайте
Всем известно что любая микросхема работает на дыме, и если волшебный дым из неё вышел то она перестает работать.
-
chezetmobile
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Ср сен 22, 2010 23:17:40
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
спасибо, руки выровнял, все получилось.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Здравствуйте. Переписал пример с таймерами с обучалки на свою мегу32, не работает. Компилируется, но не работает, код который идет в начале загрузке трассируется нормально, а вот в протеусе модель ничего не выводит. Поделитесь опытом, где я мог ошибиться?
- Вложения
-
- TimerTest.zip
- код и моделька от протеуса
- (16.72 КБ) 155 скачиваний
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Skyer писал(а):Поделитесь опытом, где я мог ошибиться?
Ну в TIMSK ошибка, там установлен бит TOIE2, а должен быть по идее OCIE1A.
Светодиоды в протеусе побежали...
-
chezetmobile
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Ср сен 22, 2010 23:17:40
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
здравствуйте, попытки переписать код из обучалки на одновременную работу портов В и D не дали нужного результата. подскажите, пожалуйста, где накосячил.
- Вложения
-
- code.asm
- (2.36 КБ) 366 скачиваний
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
chezetmobile писал(а):здравствуйте, попытки переписать код из обучалки на одновременную работу портов В и D не дали нужного результата. подскажите, пожалуйста, где накосячил.
Вместо
Код: Выделить всё
ldi Temp,RamEnd ;инициализация стека
out SPL,TempПопробуйте
Код: Выделить всё
ldi Temp,low(RamEnd) ;инициализация стека
out SPL,TempИ ещё, приглядитесь внимательно:
;Задержка
Delay: out PortB,Temp
ldi Temp1,50
ldi Temp2,50
ldi Temp2,5
Loop: dec Temp1
brne Loop1
dec Temp2
brne Loop
dec Temp3
brne Loop
ret
Спрашивается, нахера дефайнить регистры чтобы потом давать им однотипные ничего не значащие имена???
Последний раз редактировалось Gudd-Head Ср мар 02, 2011 16:14:34, всего редактировалось 1 раз.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
chezetmobile писал(а):здравствуйте, попытки переписать код из обучалки на одновременную работу портов В и D не дали нужного результата. подскажите, пожалуйста, где накосячил.
Вы хотя бы пробовали вашу программу в уме прогнать? Как по-вашему в каком случае контроллер должен перейти к метке Label2?
Вот что получается:
Код: Выделить всё
1) инициализация стека, порты на выход
2) label
3) вывод в B ;зачем, если сразу за этим все равно вывод другого значения в процедуре задержки?
4) загрузка temp, задержка (повтор 3 раза)
5) переход к п.2
---подпрограмма задержки---
-вывод temp в B
-непосредственно задержка
-возврат
----------
6) label2 ; как и откуда сюда попадет контроллер?
7) вывод в D ;опять же, зачем, если сразу новый вывод?
8) загрузка temp5, задержка2 (повтор 4 раза)
9) переход к п.6
---задержка 2----
...
...
возвратОпределитесь, в какой последовательности вам нужно выводить данные в порты и составьте хотя бы алгоритм...
Насчет дефайнов регистров - вопрос далеко не в этом, тут с алгоритмом беда...
-
chezetmobile
- Первый раз сказал Мяу!
- Сообщения: 26
- Зарегистрирован: Ср сен 22, 2010 23:17:40
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Engineer_Keen писал(а):
Определитесь, в какой последовательности вам нужно выводить данные в порты и составьте хотя бы алгоритм...
вывод в В и D единовременно. что то вроде следующего
порты В D
10110101 10110010
01101101 11001110
00010100 01101101
на каждый порт в отдельности у меня получается делать, а на два сразу ни как. они как то друг друга цепляли, независимая работа отсутствовала
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Что мешает выводить в порты сразу в одной процедуре delay?
Код: Выделить всё
LOOP:
...
...
ldi Temp,0b10110111 ;загрузка для B
ldi Temp5,0b10110111 ;загрузка для D
rcall Delay ;вызов подпрограммы задержки
...
...
...
RJMP LOOP
Delay:
out PortB,Temp ;вывод B
out PortD,Temp5 ;вывод D
...
...
;задержка
...
RET
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Engineer_Keen, спасибо, заработало
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Недокументированная возможность большинства AVR контроллеров:
Отправим значение 0x12 в регистр PORTB
Отправим значение 0x12 в регистр PORTB
Код: Выделить всё
ldi temp0, 0x12
ldi ZL, Low(PORTB)
ldi ZH, High(PORTB)
st Z, temp0
I am DX168B and this is my favourite forum on internet!
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
DX168B писал(а):Недокументированная возможность большинства AVR контроллеров
Обращение к РВВ как к ячейке памяти данных, коей она и является. Ну и что?
- Вложения
-
- Безымянный.GIF
- (12.66 КБ) 1476 скачиваний
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кстати, у более продвинутых контроллеров, у которых регистров периферии >32, эти регистры попадают совсем в другую страницу памяти, и LDS/STS - единственный способ к ним достучаться, например, ADC в Атмега88. И этот способ очень даже документирован, а указатель Z здесь лишний, простой STS рулит.
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А почему лишний? В некоторых случаях совсем не лишний. Если вдруг надумается сделать какой-нибудь сложный алгоритм. Типа автонастройки таймера или UART. Или выбор порта для вывода данных. Или как метод защиты программы от декомпилирования и разбора программы.
Так-же можно применить в полиморфных алгоритмах. Или, как вариант - в случае нехватки памяти флэша, при условии, что ЕЕPROM имеет много свободного места, можно организовать настройку периферии при старте одним-двумя циклами, вытащив данные из EEPROM и раскидав их по соответствующим регистрам.
На счёт того, что в более продвинуты МК, некоторые регистры числятся как Memory mapped, я в курсе.
Тут именно обычный регистр, к которому обращаются только через команды in и out, адресуется парой Z.
Этого-то точно нет в мануалах.
Приведённый выше код работает в простой тиньке 26L. 
Так-же можно применить в полиморфных алгоритмах. Или, как вариант - в случае нехватки памяти флэша, при условии, что ЕЕPROM имеет много свободного места, можно организовать настройку периферии при старте одним-двумя циклами, вытащив данные из EEPROM и раскидав их по соответствующим регистрам.
На счёт того, что в более продвинуты МК, некоторые регистры числятся как Memory mapped, я в курсе.
Тут именно обычный регистр, к которому обращаются только через команды in и out, адресуется парой Z.
Последний раз редактировалось DX168B Чт мар 03, 2011 14:40:56, всего редактировалось 1 раз.
I am DX168B and this is my favourite forum on internet!
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
это есть в мануалах, это основы основ.DX168B писал(а):Этого-то точно нет в мануалах.Приведённый выше код работает в простой тиньке 26L.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- DX168B
- Друг Кота
- Сообщения: 4468
- Зарегистрирован: Вс янв 24, 2010 19:19:52
- Откуда: Главный Улей России (Moscow)
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну не знал, просто такого нигде не видел. 
I am DX168B and this is my favourite forum on internet!
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Ассемблер (ASM) для AVR в вопросах и ответа
... ну вообще-то полиморфные алгоритмы меняют "на лету" свой код, а для Flash такое ....DX168B писал(а):Так-же можно применить в полиморфных алгоритмах