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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Там не всякая всячина, а предыдущее состояние. Память тоже не очищается. Этим, кстати, пользуются, когда не хватает ног и reset задействуют для управления (например повесить кнопку). Анализируя состояние регистров/памяти можно отловить нажатие.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

В любом случае нет необходимости очищать ВСЕ регистры. Так или иначе перед использованием они и так инициализируются. Да и еще таким варварским методом... используйте цикл, индексный регистр чтобы очистить их все более красивым методом.
Аватара пользователя
Coldheart
Прорезались зубы
Сообщения: 244
Зарегистрирован: Пт сен 10, 2010 20:39:32
Откуда: Украина Луганская обл.

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

Сообщение Coldheart »

Спасибо, в дальнейшем учту, красота конечно прежде всего! :)
Я конечно думал что в первую очередь меня тапками закидают за то что я аж 4 регистра кинул на 4 разряда индикатора, хотя можно обойтись чисто ОЗУ. И регистры использовал все от 16 до 29, хотя можно было и поэкономней их использовать.

Но вопрос остается... Как сбросить EIFR?
Такая штука - забиваю в него все нули, срабатывает два раза, т.е. что затирал, что нет, проблема остается.
Забиваю все еденицы, внешние прерываения вообще не срабатывают.
Забиваю еденицы, потом нули, контроллер все также равнодушен к внешним прерываниям, странноО..
Последний раз редактировалось Coldheart Вт дек 04, 2012 01:30:56, всего редактировалось 2 раза.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Сначала надо отключить прерывание(запретить для нужного события) а затем сбросить признак прерывания записью "1".
Это все надо делать при глобальном запрете прерываний, чтобы прерывание случайно не возникло посреди действия.
Аватара пользователя
Coldheart
Прорезались зубы
Сообщения: 244
Зарегистрирован: Пт сен 10, 2010 20:39:32
Откуда: Украина Луганская обл.

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

Сообщение Coldheart »

У меня тут щас мысль коварная закралась(подглядел на соседнем ресурсе). :idea:
Ведь EIFR просто так ручками не затереть, по крайней мере так пишут. Это флаг и мы его можем только читать, но не изменять.
Но что если запретить прерывания сразу в обработчике прерывания.
Сделал, проверил, вроде не двоит. Вот и чудно) :)
Все оказалось намного проще.
Буду тестить дальше. За 20 минут клацанья, двойные срабатываения обнаружены не были.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Coldheart писал(а):Ведь EIFR просто так ручками не затереть, по крайней мере так пишут. Это флаг и мы его можем только читать, но не изменять.

Ну не знаю, про каждый из 3-х флагов EIFR написано "Alternatively, the flag can be cleared by writing a logical one to it."
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
liko
Родился
Сообщения: 6
Зарегистрирован: Пн дек 03, 2012 00:20:18

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

Сообщение liko »

Есть проект, к сожалению не могу его выложить в открытый доступ. Есть исходный код, в нем нужно внести простое изменение: Вместо данных с инфра-красного датчика читать и передавать значение 1...10. Помогшему один экземпляр устройства отправляю в подарок. :) Просто нужно срочно, а я в ассемблере ни бум-бум. Я только начинаю светодиодами мигать....
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

Решил немного поработать со встроенным АЦП микроконтроллера ATmega8. Была собрана небольшая схема в протеусе -
светодиод должен был загораться до достижении определенного значения.
Код таков:

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

.def temp=R16
.cseg
.org 0
ldi temp,0b00100000
out ADMUX,temp
ldi temp,0b10100101
out ADCSRA,temp
ldi temp,255
out DDRD,temp
Loop:
in temp,ADCH
cpi temp,153
brne Off
ldi temp,255
out PortD,temp
Off: rjmp Loop


При 3В на АЦП примерное значение 152. Но почему программа не работает? Может быть, неправильно считываю значение?
:idea:
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Раз работаете не по прерываниям, перед считыванием данных с АЦП нужно удостовериться что это самое АЦП закончило преобразование. т.е. нужно проверять бит ADIF регистра ADCSRA и ждать пока он не станет =1, потом считать ADCH, и сбросить этот бит (записью в него "1").
И да, на будущее, стек все-таки лучше инициализировать...
Аватара пользователя
gauss
Держит паяльник хвостом
Сообщения: 920
Зарегистрирован: Сб янв 16, 2010 15:34:57
Откуда: Sevsk/Moscow

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

Сообщение gauss »

Можно ли создать просто "холостую задержку"? (скажем, 100мс?)
:idea:
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Привыкать надо сразу к правильному, задержку-то в любой момент можно вставить...
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Если без прерываний, то хотябы так, зачем "Free Running mode", никогда еще не использовал такой режим:

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

.def temp=R16
.cseg
.org 0
ldi temp,0b00100000
out ADMUX,temp
ldi temp,0b10000101
out ADCSRA,temp
ldi temp,255
out DDRD,temp
Loop:

sbi     ADCSRA, ADSC      ; ADC Start Conversion
adc_conv:
sbic    ADCSRA, ADSC
rjmp    adc_conv

in temp,ADCH
cpi temp,153
brne Off
ldi temp,255
out PortD,temp
Off: rjmp Loop
Челюскин
Прорезались зубы
Сообщения: 209
Зарегистрирован: Ср ноя 03, 2010 14:46:17

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

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

Добрый вечер всем. Подскажите пожалуйста вот в чем: можно ли командой SBRS - пропуск след. команды, если разряд РОН установлен (например SBRS R16, 4;) перепрыгнуть через выполнение макроса? например такое будет работать:
input:
testL 0;
SBRS R16, 4;
testL 1;
SBRS R16, 4;
testL 2;
testL 3;
testH 4;
testH 5;
testH 6;
rjmp input;

(testL и testH - макросы.)
Лень - двигатель прогресса!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

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

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

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

ploop писал(а):Если макросы более, чем из одной команды - нет.

Спасибо, понял :roll:
Лень - двигатель прогресса!
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

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

Сообщение uwrtey »

Привет, потихоньку начинаю изучать МК
возник вопрос
если под оперативку выделено всего два байта, то что прочитается из третьего байта ?


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

.....

key_buff: .byte 2   ; зарезервируем 2 байт в ОЗУ
.....
.....
ldi yl,low(key_buff)      ; зададим адрес начала массива прочитанных кнопок в ргистровую пару "Y"
ldi yh,high(key_buff)
.....
ld temp,y+         ; прочитаем 1 байт
ld temp1,y+      ; прочитаем 2 байт
ld temp2,y+      ; прочитаем 3 байт
.....


что будет в Temp2 ? если например например в оперативке были такие данные :
в первом байте 0b00010001
во втором байте 0b10001000

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

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

Сообщение Alexeyslav »

То что содержится в ячейке памяти по адресу сразу за второй...
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

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

Сообщение uwrtey »

дак, под оперативку выделено всего два байта
или это не имеет значения ?
не зная броду не лезь к вольтмоду
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

А ему пофиг. Тупо будет считывать или тереть байт за байтом, залезая при этом в другие переменные. Если, конечно, программер сам не предусмотрит контроль границ массивов.
ПС. "Под оперативку" выделено столько байт, сколько предусмотрел разработчик МК. А уж какие переменные и массивы располагать в этой памяти - дело программера. Не забывая про стек, есс-но.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

По большому счету вообще не понятно в каком сегменте FLASH, SRAM или EEPROM зарезервированы ячейки, от того что вы зарезервировали ячейки структура памяти не изменилась, это всего лишь директива для компилятора. В temp2 будет скорее 0х00, если при инициализации стираете SRAM и если вы эту третью ячейку не используете, но точно не зациклится.
Ответить

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