Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Там не всякая всячина, а предыдущее состояние. Память тоже не очищается. Этим, кстати, пользуются, когда не хватает ног и reset задействуют для управления (например повесить кнопку). Анализируя состояние регистров/памяти можно отловить нажатие.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
В любом случае нет необходимости очищать ВСЕ регистры. Так или иначе перед использованием они и так инициализируются. Да и еще таким варварским методом... используйте цикл, индексный регистр чтобы очистить их все более красивым методом.
- Coldheart
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Пт сен 10, 2010 20:39:32
- Откуда: Украина Луганская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо, в дальнейшем учту, красота конечно прежде всего!
Я конечно думал что в первую очередь меня тапками закидают за то что я аж 4 регистра кинул на 4 разряда индикатора, хотя можно обойтись чисто ОЗУ. И регистры использовал все от 16 до 29, хотя можно было и поэкономней их использовать.
Но вопрос остается... Как сбросить EIFR?
Такая штука - забиваю в него все нули, срабатывает два раза, т.е. что затирал, что нет, проблема остается.
Забиваю все еденицы, внешние прерываения вообще не срабатывают.
Забиваю еденицы, потом нули, контроллер все также равнодушен к внешним прерываниям, странноО..
Я конечно думал что в первую очередь меня тапками закидают за то что я аж 4 регистра кинул на 4 разряда индикатора, хотя можно обойтись чисто ОЗУ. И регистры использовал все от 16 до 29, хотя можно было и поэкономней их использовать.
Но вопрос остается... Как сбросить EIFR?
Такая штука - забиваю в него все нули, срабатывает два раза, т.е. что затирал, что нет, проблема остается.
Забиваю все еденицы, внешние прерываения вообще не срабатывают.
Забиваю еденицы, потом нули, контроллер все также равнодушен к внешним прерываниям, странноО..
Последний раз редактировалось Coldheart Вт дек 04, 2012 01:30:56, всего редактировалось 2 раза.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Сначала надо отключить прерывание(запретить для нужного события) а затем сбросить признак прерывания записью "1".
Это все надо делать при глобальном запрете прерываний, чтобы прерывание случайно не возникло посреди действия.
Это все надо делать при глобальном запрете прерываний, чтобы прерывание случайно не возникло посреди действия.
- Coldheart
- Прорезались зубы
- Сообщения: 244
- Зарегистрирован: Пт сен 10, 2010 20:39:32
- Откуда: Украина Луганская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
У меня тут щас мысль коварная закралась(подглядел на соседнем ресурсе).
Ведь EIFR просто так ручками не затереть, по крайней мере так пишут. Это флаг и мы его можем только читать, но не изменять.
Но что если запретить прерывания сразу в обработчике прерывания.
Сделал, проверил, вроде не двоит. Вот и чудно)
Все оказалось намного проще.
Буду тестить дальше. За 20 минут клацанья, двойные срабатываения обнаружены не были.
Ведь EIFR просто так ручками не затереть, по крайней мере так пишут. Это флаг и мы его можем только читать, но не изменять.
Но что если запретить прерывания сразу в обработчике прерывания.
Сделал, проверил, вроде не двоит. Вот и чудно)
Все оказалось намного проще.
Буду тестить дальше. За 20 минут клацанья, двойные срабатываения обнаружены не были.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Coldheart писал(а):Ведь EIFR просто так ручками не затереть, по крайней мере так пишут. Это флаг и мы его можем только читать, но не изменять.
Ну не знаю, про каждый из 3-х флагов EIFR написано "Alternatively, the flag can be cleared by writing a logical one to it."
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Есть проект, к сожалению не могу его выложить в открытый доступ. Есть исходный код, в нем нужно внести простое изменение: Вместо данных с инфра-красного датчика читать и передавать значение 1...10. Помогшему один экземпляр устройства отправляю в подарок.
Просто нужно срочно, а я в ассемблере ни бум-бум. Я только начинаю светодиодами мигать....
- gauss
- Держит паяльник хвостом
- Сообщения: 920
- Зарегистрирован: Сб янв 16, 2010 15:34:57
- Откуда: Sevsk/Moscow
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Решил немного поработать со встроенным АЦП микроконтроллера ATmega8. Была собрана небольшая схема в протеусе -
светодиод должен был загораться до достижении определенного значения.
Код таков:
При 3В на АЦП примерное значение 152. Но почему программа не работает? Может быть, неправильно считываю значение?
светодиод должен был загораться до достижении определенного значения.
Код таков:
Код: Выделить всё
.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. Но почему программа не работает? Может быть, неправильно считываю значение?
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Раз работаете не по прерываниям, перед считыванием данных с АЦП нужно удостовериться что это самое АЦП закончило преобразование. т.е. нужно проверять бит ADIF регистра ADCSRA и ждать пока он не станет =1, потом считать ADCH, и сбросить этот бит (записью в него "1").
И да, на будущее, стек все-таки лучше инициализировать...
И да, на будущее, стек все-таки лучше инициализировать...
- gauss
- Держит паяльник хвостом
- Сообщения: 920
- Зарегистрирован: Сб янв 16, 2010 15:34:57
- Откуда: Sevsk/Moscow
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Можно ли создать просто "холостую задержку"? (скажем, 100мс?)
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Привыкать надо сразу к правильному, задержку-то в любой момент можно вставить...
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Если без прерываний, то хотябы так, зачем "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
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 - макросы.)
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 - макросы.)
Лень - двигатель прогресса!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Если макросы более, чем из одной команды - нет.
Макрос тупо заменяется на нужный текст перед компиляцией.
Макрос тупо заменяется на нужный текст перед компиляцией.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ploop писал(а):Если макросы более, чем из одной команды - нет.
Спасибо, понял
Лень - двигатель прогресса!
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Привет, потихоньку начинаю изучать МК
возник вопрос
если под оперативку выделено всего два байта, то что прочитается из третьего байта ?
что будет в Temp2 ? если например например в оперативке были такие данные :
в первом байте 0b00010001
во втором байте 0b10001000
1) черте что?
2) данные из первого байта ( зациклится )?
3) другое ...
возник вопрос
если под оперативку выделено всего два байта, то что прочитается из третьего байта ?
Код: Выделить всё
.....
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 в вопросах и ответах
То что содержится в ячейке памяти по адресу сразу за второй...
- uwrtey
- Поставщик валерьянки для Кота
- Сообщения: 2309
- Зарегистрирован: Пт июл 17, 2009 07:34:07
- Откуда: Свердловская обл.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
дак, под оперативку выделено всего два байта
или это не имеет значения ?
или это не имеет значения ?
не зная броду не лезь к вольтмоду
Re: Ассемблер (ASM) для AVR в вопросах и ответах
А ему пофиг. Тупо будет считывать или тереть байт за байтом, залезая при этом в другие переменные. Если, конечно, программер сам не предусмотрит контроль границ массивов.
ПС. "Под оперативку" выделено столько байт, сколько предусмотрел разработчик МК. А уж какие переменные и массивы располагать в этой памяти - дело программера. Не забывая про стек, есс-но.
ПС. "Под оперативку" выделено столько байт, сколько предусмотрел разработчик МК. А уж какие переменные и массивы располагать в этой памяти - дело программера. Не забывая про стек, есс-но.
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
По большому счету вообще не понятно в каком сегменте FLASH, SRAM или EEPROM зарезервированы ячейки, от того что вы зарезервировали ячейки структура памяти не изменилась, это всего лишь директива для компилятора. В temp2 будет скорее 0х00, если при инициализации стираете SRAM и если вы эту третью ячейку не используете, но точно не зациклится.