Страница 133 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс май 20, 2012 15:09:11
Land
Alexeyslav писал(а):
Ага, таймер останавливается потому что микроконтроллер переходит в глубокий сон с остановкой тактового генератора, я точно не помню но атмеловске контроллеры имеют несколько режимов сна и они как-то настраиваются. Среди них есть такие режимы которые не останавливают переферию и тактовый генератор, например режим сна для минимизации шумов на время измерения АЦП который останавливает только ядро.
Регистр MCUCR биты SM2..0 определяют режим сна. Тебе поидее нужен режим 000 - Idle.
Ну они ж вроде по умолчанию стоят в нулях, я их и не трогаю.

а ладно, со сном буду позже разбираться, тут вполне прокатывает бесконечный цикл.
Не прокатывает потому что SBI работает только с нижней частью портов. увы.
Но ничто не мешает вам прописать ту конструкцию как макрос и вызывать одной короткой строчкой.
Где-то тут я уже видел универсальные макросы с условной компиляцией, которые используют SBI к младшим регистрам и более сложную конструкцию для старших портов.
Но его несложно самому написать, в хелпе прочитать про директиву .macro и директивы условной компиляции.
ага. Значит и флаг сработки компаратора только через макрос смогу очищать? Или тут еще все хуже? Хотя нет... флаг разрешения прерывания компаратора я же могу выставить прямо. Тогда почему не могу очистить флаг срабатывания?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс май 20, 2012 15:59:40
Alexeyslav
Надо читать даташит по этому поводу. Поидее, он сбрасывается записью туда "1", биты равные нулю просто игнорируются.
Из даташита:
• Bit 4 – ACI: Analog Comparator Interrupt Flag
This bit is set by hardware when a comparator output event triggers the interrupt mode defined
by ACIS1 and ACIS0. The Analog Comparator Interrupt routine is executed if the ACIE bit is set
and the I-bit in SREG is set. ACI is cleared by hardware when executing the corresponding inter-
rupt Handling Vector. Alternatively, ACI is cleared by writing a logic one to the flag.
Бит признака прерывания очищается аппаратно после старта процедуры обработки прерывания, либо...
В последней строчке написано что альтернативно бит прерывания может быть очищен записью в него лог.1
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс май 20, 2012 17:29:09
Land
Alexeyslav писал(а):
Бит признака прерывания очищается аппаратно после старта процедуры обработки прерывания, либо...
В последней строчке написано что альтернативно бит прерывания может быть очищен записью в него лог.1
Да, правы Вы, надо внимательно читать даташит. Я-то туда все 0 пытался упихнуть...

И еще вопрос нарисовался. Почему по reti возвращает не в основной цикл (я же правильно понимаю, что должно возвращать в место, откуда прерывание вызвалось?), а сбрасывает на начальную инициализацию
.org 0 ;Задание нулевого адреса старта программы
rjmp Reset
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс май 20, 2012 19:02:30
Alexeyslav
Если ты стек установил правильно, то адрес возврата запоминается в RAM при возникновении прерывания, и извлекается командой RETI. Если стек не установлен, или вы что-то нахимичили в процедуре обработки прерывания до вызова RETI - может быть все что угодно.
Как образцовый пример - вызов RETI не из прерывания и/или без инициализации стека.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн май 21, 2012 12:11:52
Land
Alexeyslav писал(а):вы что-то нахимичили в процедуре обработки прерывания до вызова RETI - может быть все что угодно.
Как образцовый пример - вызов RETI не из прерывания и/или без инициализации стека.
т.е. это срыв стека? Предполагал. Ибо нахимичил

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср май 23, 2012 21:20:46
MS24
Ребят, а как можно сделать на асм счетчик? Т.е на си это выглядело бы так:
i = 10000
while i !=0;
{
--i
{
А число I двухбайтовое, как мне его инкрементировать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср май 23, 2012 21:23:56
GP1
sbiw
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср май 23, 2012 22:31:08
MS24
GP1 писал(а):sbiw
Я просто просветлел, и как же я сам-то не додумался сразу-то??? Это же все просто, я как увидел эту команду, сразу же все понял!!!
Прям сейчас пойду построю себе космолет с такими знаниями )))
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср май 23, 2012 23:21:25
Jack_A
Ответ правильный, но чересчур лаконичный

, так что ерничать особо не стоит.
В приведенном фрагменте декремент i, а в вопросе стоит - как его инкрементировать.
Декремент делается вот так :
LDI XL,low(10000)
LDI XH,high(10000)
Y: ........ ; здесь делаем то что нужно в цикле
SBIW XL,1
BRNE Y
Не стоит забывать, что SBIW работает на четырех последних регистровых парах :
R24,R25 ... R30, R31
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 06:45:23
ploop
BRNE Y
Просто для сведения: не все ассемблеры пропустят такую метку (совпадает с именем регистровой пары)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 09:00:52
Gudd-Head
Jack_A писал(а): LDI XL,low(10000)
LDI XH,high(10000)
Блин... Вот что значит век живи — век учись

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 09:14:39
ploop
Эээ... ты не знал про low и high?

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 09:17:37
Gudd-Head
Знал... Просто не допирал, что можно автоматически перевести из десятичного в хекс и разбить

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 10:01:50
Jack_A
ploop писал(а):BRNE Y
Просто для сведения: не все ассемблеры пропустят такую метку (совпадает с именем регистровой пары)
Ну это я для краткости нажатий клавиш и вроде бы радиокот табуляции не пропускает.
А то написал бы
BRNE LOOP1

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 14:20:00
shads
Jack_A писал(а):SBIW XL,1
А эта команда на тиньках работает? чтото я не встречал в описаниях тиньки.....
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 14:21:35
ploop
Надо открыть конкретный даташит и посмотреть. Кажется только на мегах.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 14:23:03
Gudd-Head
ploop писал(а):Надо открыть конкретный даташит и посмотреть.
Ну, или
Микроконтроллеры AVR семейства Tiny Mega фирмы Atmel А.В.Евстифеева.
В тиньках, как я понимаю, надо будет в 2 приёма — сначала вычитать 1 из младшего байта, потом С (или V?) из старшего.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 14:29:52
shads
Gudd-Head писал(а):В тиньках, как я понимаю, надо будет в 2 приёма — сначала вычитать 1 из младшего байта, потом С (или V?) из старшего.
Нормально, будет работать
http://www.nikolaew.org/avr_old/u3.htm,
А я все время делал именно так, в 2 приема.....
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 14:33:01
akl
В tiny2313 и в tiny13 команды ADIW и SBIW работают. Чтобы не гадать, лучше
ploop писал(а):...открыть конкретный даташит и посмотреть...
раздел
Instruction Set Summary
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт май 24, 2012 14:33:28
shads
Вернее я делал так:
LDI XL,low(10000)
LDI XH,high(10000)
Y: ........ ; здесь делаем то что нужно в цикле
DEC XL
BRNE Y
DEC XH
BRNE Y
кстати любые можно регистры использовать, не только самые верхние.