Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Прерывания в AVR
а по уму, надо стратегию другую применить: почитай про алгоритм конечных автоматов.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Реклама
[uquote="BOB51",url="/forum/viewtopic.php?p=3315257#p3315257"]ROMan2947
Текстовку ставить под спойлер надо (выделяем текст - жмем Code, снова выделяем все что получилось/с окантовочными символами/ и жмем spoiler) - так основные тексты сообщений не будут загромождаться. А кому интереснт - откроют полный текст.
Для контроля результата перед окончательной отправкой есть кнопа "предпросмотр".
[/uquote] ОК, учту)
Добавлено after 1 minute 11 seconds:
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3315259#p3315259"]а по уму, надо стратегию другую применить: почитай про алгоритм конечных автоматов.[/uquote]
посмотрю, спасибо!
Текстовку ставить под спойлер надо (выделяем текст - жмем Code, снова выделяем все что получилось/с окантовочными символами/ и жмем spoiler) - так основные тексты сообщений не будут загромождаться. А кому интереснт - откроют полный текст.
Для контроля результата перед окончательной отправкой есть кнопа "предпросмотр".
Добавлено after 1 minute 11 seconds:
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3315259#p3315259"]а по уму, надо стратегию другую применить: почитай про алгоритм конечных автоматов.[/uquote]
посмотрю, спасибо!
Всегда следует придерживаться простого алгоритма создания вопроса на форуме:
1. описание того, что хочется
2. описание того, что сделано (и не только описание, но и демонстрация кода, схемы и т.п.)
3. описание того, что вышло с отличиями от п.1
каждый пункт должен быть конкретным, "светодиод мигает не раз 1 секунду, а раз в 10 секунд" - это конкретика, "светодиод мигает не так, как надо" - это хрень.
только в этом случае вы можете надеяться на какие-то конструктивные ответы.
в вашем конкретном случае без описания того, что и как у вас было, и что и как у вас стало после "прерываний" (с указанием того, что вы изменили в коде), никто ничего не посоветует дельного.
1. описание того, что хочется
2. описание того, что сделано (и не только описание, но и демонстрация кода, схемы и т.п.)
3. описание того, что вышло с отличиями от п.1
каждый пункт должен быть конкретным, "светодиод мигает не раз 1 секунду, а раз в 10 секунд" - это конкретика, "светодиод мигает не так, как надо" - это хрень.
только в этом случае вы можете надеяться на какие-то конструктивные ответы.
в вашем конкретном случае без описания того, что и как у вас было, и что и как у вас стало после "прерываний" (с указанием того, что вы изменили в коде), никто ничего не посоветует дельного.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Правильно ли я понимаю,что при выполнении данного кода:
при регистрации внешнего прерывания INT0 программа может переходить только в обработку ISR(INT0_vect)?
как будет обрабатываться прерывание если код таков:
Спойлер
Код: Выделить всё
ISR(INT0_vect)
{
// обработка прерывания
}
int main (void)
{
sei();
while ()
{
// основная программа
}
}как будет обрабатываться прерывание если код таков:
Спойлер
Код: Выделить всё
//ISR(INT0_vect)
//{
// // обработка прерывания
//}
int main (void)
{
sei();
while ()
{
// основная программа
}
}1. Не может, т.к. не задано (не запараметрировано) ни одно прерывание. Регистрации того же INT0 не будет.
2. То же самое.
2. То же самое.
Docendo discimus
- Реклама
распишу: если прерывание разрешено (как индивидуально, так и глобально) и установился его флаг (произошло вызывающее событие), то контроллер доделывает текущую инструкцию основного (кстати не обязательно основного, а вообще в любом месте, главное, чтобы условия соблюлись) кода и переходит на выполнение обработчика прерывания, выполнив его возвращается в ту же точку исходного кода и продолжает его выполнение (для этого в специальной области памяти, называемой стек, сохраняется адрес команды, к которой необходимо вернуться после завершения обработки прерывания). Чтобы меньше тревожить основной код, прерывания стараются делать быстроисполнимыми (короткий без циклов код).
как тебе уже написали SEI (установка бита I) разрешил глобально прерывания, а вот чтобы разрешить его индивидуально, нужно установить бит, отвечающий конкретно за это прерывание (смотри ДШ на свой контроллер)
как тебе уже написали SEI (установка бита I) разрешил глобально прерывания, а вот чтобы разрешить его индивидуально, нужно установить бит, отвечающий конкретно за это прерывание (смотри ДШ на свой контроллер)
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
[uquote="pyzhman",url="/forum/viewtopic.php?p=3315363#p3315363"]1. Не может, т.к. не задано (не запараметрировано) ни одно прерывание. Регистрации того же INT0 не будет.[/uquote]
Вы это к отсутствию этих строк?:
в вопросе выше скажем так будем считать что это предусмотрено, как в итоге будет обработка
Вы это к отсутствию этих строк?:
Код: Выделить всё
MCUCR=(1<<ISC01)|(1<<ISC00);
GICR=1<<INT0;
Последний раз редактировалось ROMan2947 Пт фев 23, 2018 12:26:55, всего редактировалось 1 раз.
Опять какой-то непонятный вопрос. Все зависит от включенных масок разрешений прерываний конкретных периферий и событий.ROMan2947 писал(а):при регистрации внешнего прерывания INT0 программа может переходить только в обработку ISR(INT0_vect)?
ROMan2947 писал(а):как будет обрабатываться прерывание если код таков:
Спойлер

Последний раз редактировалось Z_h_e Пт фев 23, 2018 12:33:42, всего редактировалось 1 раз.
Да.
Z_h_e, сию маску подставит сам ИДЕ (для того ему целевой МК и указывается)
Добавлено after 2 minutes 18 seconds:
есть маска включенных прерываний, их надо включать, а ещё есть (вот, согласен немного напутал) таблица переходов - что она отправит именно на этот обработчик и она уже прописана - это я имел в виду
Z_h_e, сию маску подставит сам ИДЕ (для того ему целевой МК и указывается)
Добавлено after 2 minutes 18 seconds:
есть маска включенных прерываний, их надо включать, а ещё есть (вот, согласен немного напутал) таблица переходов - что она отправит именно на этот обработчик и она уже прописана - это я имел в виду
Последний раз редактировалось Ivanoff-iv Пт фев 23, 2018 12:35:44, всего редактировалось 1 раз.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Что если включить прерывание INT0 и при его регистрации оно может пойти по вектору INT2_vect?Z_h_e писал(а):Все зависит от включенных масок разрешений прерываний конкретных периферий и событий.
Последний раз редактировалось ROMan2947 Пт фев 23, 2018 12:37:33, всего редактировалось 1 раз.
Да блин, Вы пост удалили и я отредактировал свой.
Не ставит Атмел Студия какие-то автомаски, слава богу.
Добавлено after 1 minute 5 seconds:
Не ставит Атмел Студия какие-то автомаски, слава богу.
Добавлено after 1 minute 5 seconds:
Это как?ROMan2947 писал(а):Что если включить прерывание INT0 и при его регистрации оно может пойти по вектору INT2_vect?
[uquote="ROMan2947",url="/forum/viewtopic.php?p=3315377#p3315377"]...скажем так будем считать что это предусмотрено...[/uquote]
Вам самому не надоело быть тыканным в собственные каки? Что вы там себе предусматриваете одному вам известно. Все остальные только догадываются. Прислушайтесь наконец к ARV.
Вам самому не надоело быть тыканным в собственные каки? Что вы там себе предусматриваете одному вам известно. Все остальные только догадываются. Прислушайтесь наконец к ARV.
Docendo discimus
нет, не пойдёт, но его флаг будет висеть до тех пор, пока прерывание не будет выполнено (ещё флаг можно сбросить принудительно, записав в его бит "1") и, если флаг ещё активен, то при разрешении прерывания оно тутже будет выполнено (даже если событие уже прошло)
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Сообщения: 1849
- Зарегистрирован: Вс дек 25, 2016 08:34:54
Запутался чет....
и \
в первом варианте:
1. регистрируется INT0
2. флаг поднят аппаратно
3. переходим в ISR(INT0_vect)
4. выполняем то, что в ISR(INT0_vect)
5. выходим из ISR(INT0_vect)
6. флаг прерывания очищается аппаратно
7. возвращаемся в while(1)
во втором что происходит, когда ISR не прописан?
Добавлено after 4 minutes 57 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=3315414#p3315414"]И так, вопрос остается открытым: Для чего прерывания вам?[/uquote]
считать импульсы из вне
Спойлер
Код: Выделить всё
ISR(INT0_vect)
{
//помигаем и выйдем
}
int main(void)
{
sei();
MCUCR=(1<<ISC01)|(1<<ISC00);
GICR=1<<INT0;
while ()
{
}
}
Спойлер
Код: Выделить всё
//ISR(INT0_vect)
// {
// //помигаем и выйдем
// }
int main(void)
{
sei();
MCUCR=(1<<ISC01)|(1<<ISC00);
GICR=1<<INT0;
while ()
{
}
}
в первом варианте:
1. регистрируется INT0
2. флаг поднят аппаратно
3. переходим в ISR(INT0_vect)
4. выполняем то, что в ISR(INT0_vect)
5. выходим из ISR(INT0_vect)
6. флаг прерывания очищается аппаратно
7. возвращаемся в while(1)
во втором что происходит, когда ISR не прописан?
Добавлено after 4 minutes 57 seconds:
[uquote="Dimon456",url="/forum/viewtopic.php?p=3315414#p3315414"]И так, вопрос остается открытым: Для чего прерывания вам?[/uquote]
считать импульсы из вне
Прерывания то хорошо...
С точки зрения учебна процессу...
НО...
Может сначала простой опрос события поставить, а когда все заработает привести к прерыванию?
Или вообще использовать внутреннюю сетку частот, а с RTCтолько "обмен данными при необходимости"?

Или счетные импулься извне на таймер затащить...
Однако там те же прерывания, только внутренние и с иным приоритетом...

С точки зрения учебна процессу...
НО...
Может сначала простой опрос события поставить, а когда все заработает привести к прерыванию?
Или вообще использовать внутреннюю сетку частот, а с RTCтолько "обмен данными при необходимости"?
Или счетные импулься извне на таймер затащить...
Однако там те же прерывания, только внутренние и с иным приоритетом...
[uquote="BOB51",url="/forum/viewtopic.php?p=3315430#p3315430"]Может сначала простой опрос события поставить[/uquote] что значит простой опрос события? ножку прослушивать?
про другие компиляторы не скажу, в кодевижн таблица переходов выглядит так:
там где нет обработчиков стоит ссылка на 0 адрес, а по этому адресу ссылка на RESET...
Добавлено after 1 minute 54 seconds:
если вам считать события - задействуйте таймер, настроив его на счёт внешних событий, и можно быть уверенным, что он событие не пропустит
Код: Выделить всё
;INTERRUPT VECTORS
RJMP __RESET
RJMP _ext_int0_isr
RJMP _ext_int1_isr
RJMP _timer1_capt_isr
RJMP _timer1_a
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP _timer0_a
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
RJMP 0x00
Добавлено after 1 minute 54 seconds:
если вам считать события - задействуйте таймер, настроив его на счёт внешних событий, и можно быть уверенным, что он событие не пропустит
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
эта ссылка на 0 адрес где она хранится?что храниться по адресу 002(это адрес вектора прерывания INT0)там где нет обработчиков стоит ссылка на 0 адрес, а по этому адресу ссылка на RESET...
Добавлено after 3 minutes 42 seconds:
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3315437#p3315437"]если вам считать события - задействуйте таймер, настроив его на счёт внешних событий, и можно быть уверенным, что он событие не пропустит[/uquote]
это в режиме захвата? у меня три генератора импульсов + SWQ/out ds1307 ...
Добавлено after 10 minutes 6 seconds:
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=3315437#p3315437"]там где нет обработчиков стоит ссылка на 0 адрес, а по этому адресу ссылка на RESET...[/uquote]
вывод,если настроить и включить прерывание при этом не прописав обработчик то МК при каждой регистрации INT будет сбрасываться....так?
это самое начало кода (ассемблер и прошивка на языке МК): сначала (h00) ссылка на начало исполнимого кода(reset), потом ссылки на начала подпрограмм прерываний (h02 - int0, h04 - int1 и т.д....) эти ссылки стоят здесь жестко (при компиляции меняется записанный в них вектор) т.е при вызове инт0 контроллер прыгнет на 2е слово (1слово = 2 байта) прошивки (это железно в нём заложено) и прочитает там команду перехода на обработчик прерывания.
распишу по кодевижну (думаю в других С компиляторах ненамного отличается): гдето недалеко от исполнимого файла есть папка "inc" в ней файлы по названиям микросхем, в них адреса перевода битов, регистров, переходов... для перевода с человеческого языка на машинный цифровой, покопайся, может станет понятней (только не меняй ничего), а ещё можно почитать книги, (наверно лучше или про устройство МК или по ассемблеру - он к железу ближе), (конкретных не посоветую, но думаю, сейчас коты помогут).
пс: тот кусок, что я приводил - это перевод из С в ассемблер готовой программы (а потом уже он превращается в прошивку) - если открыть этот файл целиком, то можно увидеть, насколько много скрыто от С программиста
распишу по кодевижну (думаю в других С компиляторах ненамного отличается): гдето недалеко от исполнимого файла есть папка "inc" в ней файлы по названиям микросхем, в них адреса перевода битов, регистров, переходов... для перевода с человеческого языка на машинный цифровой, покопайся, может станет понятней (только не меняй ничего), а ещё можно почитать книги, (наверно лучше или про устройство МК или по ассемблеру - он к железу ближе), (конкретных не посоветую, но думаю, сейчас коты помогут).
пс: тот кусок, что я приводил - это перевод из С в ассемблер готовой программы (а потом уже он превращается в прошивку) - если открыть этот файл целиком, то можно увидеть, насколько много скрыто от С программиста
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...



