Ассемблер (ASM) для AVR в вопросах и ответах
pyzhman, ну вот зачем вы так меня поддергиваете........ я уже догадывался что сморозил ерунду. 
Tell Me The Truth
- Реклама
Откуда такая информация? Только при отключении питания.Только учитываем, что при сбросе вся память херится к чертовой матери.
Нет. Просто делаете переменную в памяти, которая изменяет своё значение после сброса, её и анализируете.если в атмеге 8 я хочу повесить кнопку на вывод ресет то для этого мне уже не обязательно с помощью фьюзов данную ногу конфигурировать на ввод, а потом с помощью паралельного прогера все это исправлять......, теперь мне просто надо следить за 1 битом регистра MCUCSR и при его установке выполнять некие события в проге.
Способ подходит для простых применений: мигалок всяких, гирлянд и т.д, т.к. при включении питания её состояние будет не определено (то есть может быть любым).
Во наговорили
. Насколько я знаю в некоторых Мк есть специальные биты в определенном регистре по которым можно узнать по какой причине произошел сброс. Далее нужно просто отделить мух от котлет и определить нужно ли инициализировать переменные(в случае первого включения), либо просто обработать нажатие на кнопку или собаку.
Единственное условие- всегда после считывания этих битов нужно сразу их сбросить так как они устанавливаются аппаратно и сохраняются вплоть до выключения Мк.
Единственное условие- всегда после считывания этих битов нужно сразу их сбросить так как они устанавливаются аппаратно и сохраняются вплоть до выключения Мк.
2FreshMan: никаких поддергиваний, всё взаправду.
Согласен.ploop писал(а):Только при отключении питания.
Docendo discimus
а откуда такая информация ?ploop писал(а):Только при отключении питания.
Tell Me The Truth
- Реклама
Мля, пару страниц назад разговаривали на эту тему. Ты или впитывай, или сам разбирайся.
да тот разговор я помню....., просто хотелось узнать нет ли у атмела какого либо обще-официального документа, кроме даташита конечно, где описывается общий принцип работы их МК.
Tell Me The Truth
если вас не затруднит, ткните носом на данный документ, пожалуйста
Tell Me The Truth
дорогие братья по разуму, а не скрыта ли сдесь ошибка ?
может там надо reti вместо ret ?
http://radiokot.ru/start/mcu_fpga/avr/15/

может там надо reti вместо ret ?
http://radiokot.ru/start/mcu_fpga/avr/15/
Tell Me The Truth
Ошибкой как таковой не является. Просто заткнуться все прерывания. Если ВДРУГ программа скакнет туда.
Docendo discimus
но ведь для выхода из прерывания юзается RETI
али я неправ ?
али я неправ ?
Tell Me The Truth
Если не хочется открывать прерывания, то надо пользоваться ret. reti делается всё то же самое, что и ret, только еще разрешает глобальные прерывания, т.е. взводит флаг I.
Docendo discimus
но ведь ret используется при выходе из подпрограммы( ф-ции), а мы говорим о прерываниях......, ничего не пойму...., каламбур какой-то 
Tell Me The Truth
Да никакого каламбура.
Если в подпрограмме понадобилось выключить прерывание, а по выходе включить, можно использовать такой код:
А можно такой:
В последнем случае экономим одну команду.
Так же и внутри прерывания можно принудительно включить прерывания, и выходить из него через ret. Однако вложенные прерывания использовать не советую.
Так же из любого участка кода через ret или reti можно выйти совсем не туда, откуда пришли, а совсем в другое место, предварительно заменив на стеке адрес возврата
Если в подпрограмме понадобилось выключить прерывание, а по выходе включить, можно использовать такой код:
Код: Выделить всё
my_func:
cli() ; отключили прерывания
....
тут мой код
....
sei() ;включили
ret ;выходимКод: Выделить всё
my_func:
cli() ; отключили прерывания
....
тут мой код
....
reti ; Включили и выходимТак же и внутри прерывания можно принудительно включить прерывания, и выходить из него через ret. Однако вложенные прерывания использовать не советую.
Так же из любого участка кода через ret или reti можно выйти совсем не туда, откуда пришли, а совсем в другое место, предварительно заменив на стеке адрес возврата
зачем тогда вообще придумывали ret ?ploop писал(а):В последнем случае экономим одну команду.
или может быть случай когда при выходе из подпрограммы нам не надо включать прерывания ?
хотя я такого не встречал....., обычно при входе в подпрограмму мы запрещаем прерывания
Tell Me The Truth
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Протеус?
Docendo discimus
Смотря какие, от протеуса там DSN, PWI и DBK, от AVR-студии APS, AWS, avrbuild.bat, остальные - файлы с исходным кодом на асме.


