Ничего, просто флаг С опять установится.а что будет когда со старшим случится переполнение ?
Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
- Реклама
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Это в скобках, а что будет после применения модификатора или как его там LOW() и HIGH()?Alexeyslav писал(а): Причем, <метка>*2 адресует один байт, а <метка>*2+1 адресует следующий байт. Поэтому у вас в примере ошибка - старшая и младшая часть слова у вас будут равны одному и тому же байту из памяти.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Они от результата возьмут старший/младший байт слова и всего-то.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Всем привет!!!
У меня начальные знания програмирования AVR.
Как я понял из книг, чтобы заработали прерывания нужно:
организовать безусловный переход на те прерывания которые нам необходимы, например - rjmp RESET
настроить определенные регистры, а именно MCUCR и GIMSK, таким образзом как нам надо (читаем описание к контроллеру).
Потом разрешаем прывания sei.
И дальше у меня стоп!
Например я хочу получить генаратор прямоугольных импульсов.
Управление генератором осуществляется одной кнопкой (подключена к EXT_INT0)
При нажатии на кнопку запускается генератор, а при повторном нажатии выключается и микроконтроллер уходит в режим Power-down, при следующем нажатии запускается, и т. д.
Так вот, вопрос: если срабатывает прерывание, то с какого места начинает выполняться программа? Например контроллер в режиме sleep, при срабатывании прерывания,выполняет следующую команду за sleep или программа начинает выполнятся с какой-то определенной метки?
И еще вопрос. Когда мы организовываем безусловный переход на прерывания, компилятор ругается, типа что такая метка уже задействована. Выход, как я прочитал, обозвать прерывания другим именем, но тогда как контроллер поймет что задействовано именно то прерывание которое мне нужно?
У меня начальные знания програмирования AVR.
Как я понял из книг, чтобы заработали прерывания нужно:
организовать безусловный переход на те прерывания которые нам необходимы, например - rjmp RESET
настроить определенные регистры, а именно MCUCR и GIMSK, таким образзом как нам надо (читаем описание к контроллеру).
Потом разрешаем прывания sei.
И дальше у меня стоп!
Например я хочу получить генаратор прямоугольных импульсов.
Управление генератором осуществляется одной кнопкой (подключена к EXT_INT0)
При нажатии на кнопку запускается генератор, а при повторном нажатии выключается и микроконтроллер уходит в режим Power-down, при следующем нажатии запускается, и т. д.
Так вот, вопрос: если срабатывает прерывание, то с какого места начинает выполняться программа? Например контроллер в режиме sleep, при срабатывании прерывания,выполняет следующую команду за sleep или программа начинает выполнятся с какой-то определенной метки?
И еще вопрос. Когда мы организовываем безусловный переход на прерывания, компилятор ругается, типа что такая метка уже задействована. Выход, как я прочитал, обозвать прерывания другим именем, но тогда как контроллер поймет что задействовано именно то прерывание которое мне нужно?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
я тут читал что сброс программы может быть вызван тремя причинами
1)кнопкой ресет
2)сторожевым таймером
3)подачей питания
а как в системе отследить чем именно в данный момент был вызван сброс ?
1)кнопкой ресет
2)сторожевым таймером
3)подачей питания
а как в системе отследить чем именно в данный момент был вызван сброс ?
Tell Me The Truth
- Реклама
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
2FreshMan: MCUCSR
2Valek174:
а
б
в
г
плямс, сработало прерывание. В стеке сохраняется адрес следующей команды(в данном случае адрес команды "д").Ушли на его обработку......Обработка завершена, вертаемся сюда же(адрес возврата хранится в стеке).
д
е
ё
ж
2Valek174:
с того самого, откуда ушла в обработчик прерывания. Например:с какого места
а
б
в
г
плямс, сработало прерывание. В стеке сохраняется адрес следующей команды(в данном случае адрес команды "д").Ушли на его обработку......Обработка завершена, вертаемся сюда же(адрес возврата хранится в стеке).
д
е
ё
ж
называть можно как угодно, главное - соблюдать адреса.обозвать прерывания
Docendo discimus
- ranger93
- Вымогатель припоя
- Сообщения: 560
- Зарегистрирован: Пт июл 02, 2010 19:30:22
- Откуда: Новосибирск / Магнитогорск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Помогите разобраться со power-down.
Пишу следующее:
ldi r16, 0b10100010
out MCUCR, r16 ; хотим работать со спадающим фронтом с прерыванием int0 и выключаться по команде sleep
sleepmode:
ldi r16,0b00000000
out timsk,r16; запрещаем прерывания по таймеру
ldi r16, 0
out tcnt2, r16; сбросим таймер нахрен!
ldi r16, 0b01000000
out GICR, r16 ; разрешаем прерывание int0
sei
sleep
nop
В avr-studio все работает нормально: контроллер засыпает и при нажатии кнопке на 4-й ноге уходит в прерывание, а вот в реальной жизни как-то не работает... В чем может быть причина?
Пишу следующее:
Спойлер
...ldi r16, 0b10100010
out MCUCR, r16 ; хотим работать со спадающим фронтом с прерыванием int0 и выключаться по команде sleep
sleepmode:
ldi r16,0b00000000
out timsk,r16; запрещаем прерывания по таймеру
ldi r16, 0
out tcnt2, r16; сбросим таймер нахрен!
ldi r16, 0b01000000
out GICR, r16 ; разрешаем прерывание int0
sei
sleep
nop
Главное, чтоб был источник ЭДС, а с остальным разберемся
.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Даже и смотреть не станем, пока не научитесь называть константы осмысленно.В чем может быть причина?
Что у вас в MCUCR?
- ranger93
- Вымогатель припоя
- Сообщения: 560
- Зарегистрирован: Пт июл 02, 2010 19:30:22
- Откуда: Новосибирск / Магнитогорск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Извините, не понял, какие константы
?
Главное, чтоб был источник ЭДС, а с остальным разберемся
.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Те, которые вот тут например показаны:

Обратите внимание, у каждого бита есть имя. И его знает ваш компилятор.

Обратите внимание, у каждого бита есть имя. И его знает ваш компилятор.
- ranger93
- Вымогатель припоя
- Сообщения: 560
- Зарегистрирован: Пт июл 02, 2010 19:30:22
- Откуда: Новосибирск / Магнитогорск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
у меня вот так:

И ассемблер принимает биты в таком же порядке. А выходной файл беру из папки с проектом, стало быть он правильно собран...

И ассемблер принимает биты в таком же порядке. А выходной файл беру из папки с проектом, стало быть он правильно собран...
Главное, чтоб был источник ЭДС, а с остальным разберемся
.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Что правильно? У меня скриншот с даташита другого контроллера 
Я про сам принцип. Вот эти строки будут равнозначны:
Разница только в том, что последняя легко читается, т.к. это сокращения, например SM - Sleep Mode Select Bits
И теперь хорошо видно, что у вас включено прерывание по спаду на INT0 (ISC01), режим power-down (SM1), и, собственно, разрешение сна (SE). Вроде всё нормально.
А вот 0b10100010 - совершенно ни о чём не говорит
Я про сам принцип. Вот эти строки будут равнозначны:
Код: Выделить всё
ldi r16, 0b10100010
ldi r16, (1<<ISC01)|(1<<SM1)|(1<<SE)И теперь хорошо видно, что у вас включено прерывание по спаду на INT0 (ISC01), режим power-down (SM1), и, собственно, разрешение сна (SE). Вроде всё нормально.
А вот 0b10100010 - совершенно ни о чём не говорит
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Как по мне, так ни первый ни второй вариант некрасивы и непонятны. было бы куда проще если записать как ISC01+SM1+SE Но это требует дополнительных определений.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Похоже на то были причины. Ведь ни что не мешало определить SM не как 5, а как 0х20 (или 32). Тогда бы ваш способ работал.Но это требует дополнительных определений.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
По мне, при входе в режим power-down нужно ещё устранить предысторию нажатия кнопки и учесть, что только низкий уровень, а не спад может вывести из него; при выходе из режима нужно дождаться начала генерации и стабилизации частоты тактированияranger93 писал(а):Помогите разобраться со power-down.
В avr-studio все работает нормально: контроллер засыпает и при нажатии кнопке на 4-й ноге уходит в прерывание, а вот в реальной жизни как-то не работает... В чем может быть причина?
Спойлер
Код: Выделить всё
.include "m8def.inc" ; используем mega8
RJMP START
RJMP ISR_INT0
START:
LDI R16,HIGH(RAMEND)
LDI R17,LOW(RAMEND)
OUT SPH,R16
OUT SPL,R17
LDI R16, 0b10100000
out MCUCR, r16 ; хотим работать по низкому уровню с прерыванием int0 и выключаться по команде sleep sleepmode:
; ldi r16, 0b10100010
; out MCUCR, r16 ; хотим работать со спадающим фронтом????? с прерыванием int0 и выключаться по команде sleep sleepmode:
ldi r16,0b00000000
out timsk,r16; запрещаем прерывания по таймеру
; ldi r16, 0
out tcnt2, r16; сбросим таймер нахрен!
ldi r16, 0b01000000
out GICR, r16 ; разрешаем прерывание int0
OUT GIFR,R16 ; сбрасываем флаг
sei
sleep
nop
rjmp START
ISR_INT0:
CLR YH
CLR YL
SBIW YL,1
BRNE PC-1 ;программная задержка для начала генерации и стабилизации тактирования
OUT GICR,YH
RET ; выход с запретом всех прерываний
- ranger93
- Вымогатель припоя
- Сообщения: 560
- Зарегистрирован: Пт июл 02, 2010 19:30:22
- Откуда: Новосибирск / Магнитогорск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ploop, игрался только с mega8, поэтому не знал, что в других контроллерах есть такие же регистры но с другими битами. Учту, так действительно понятнее.
akl,
akl,
Кстати очень может быть, надо попробовать.akl писал(а):что только низкий уровень, а не спад может вывести из него
Главное, чтоб был источник ЭДС, а с остальным разберемся
.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не очень может быть, а в ДШ это явно прописано:ranger93 писал(а):Кстати очень может быть, надо попробовать.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
можно ли тогда сделать так, если в атмеге 8 я хочу повесить кнопку на вывод ресет то для этого мне уже не обязательно с помощью фьюзов данную ногу конфигурировать на ввод, а потом с помощью паралельного прогера все это исправлять......, теперь мне просто надо следить за 1 битом регистра MCUCSR и при его установке выполнять некие события в проге.pyzhman писал(а):2FreshMan: MCUCSR
Tell Me The Truth
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ё! Я в ауте! Не, на самом деле. Я бы в жисть не догадался так сделать. Как красиво-то придумано! Нафига программировать вход сброса как порт фьюзом? Если можно отследить битом источника сброса. FreshMan, зачет! Только учитываем, что при сбросе вся память херится к чертовой матери. 
Docendo discimus
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот только необходимо применять это крайне аккуратно! Ведь при нажатии кнопки у тебя прервется исполнение любой подпрограммы, и если где-то что-то недосохранилось или не до делалось может возникнуть целый спектр всевозможных неожиданных и редко происходящих проблем.
Ладно там если это что-то вроде светодиодной мигалки, и кнопкой сброса выбираешь режим работы... А если это что-то сложнее со сложными внутренними и внешними состояниями, то проблемы практически гарантированны.
Ладно там если это что-то вроде светодиодной мигалки, и кнопкой сброса выбираешь режим работы... А если это что-то сложнее со сложными внутренними и внешними состояниями, то проблемы практически гарантированны.


