Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 02.07.2010, 17:49  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Прерывания ATMega8

Подскажите как решить задачу.
Есть набор функций, например
void fun1 (void)
void fun2 (void)
void fun3 (void)
void fun4 (void)
Есть прерывание, например
interrupt [TIM0_OVF]
Написать функцию обработчик прерывания вроде как и нет проблем, а как правильно сделать так чтоб по прерыванию выполнялось какоето количество функций.
Например
void main (void){
while (1){
fun1();
fun4();
а сдесь случилось прерывание и мы выполняем
fun2();
fun3();
}
}
Вобшем как в прерывании выполнить не функцию обработчик прерываний, а несколько функций.
Реклама:
7Fantomas7 вне форума  
Непрочитано 02.07.2010, 18:00  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания ATMega8

bit flag=0;

interrupt [TIM0_OVF]
{
flag=1;
}

void main(void)
{
if(flag)
{
fun2();
fun3();
flag=0;
}
else
{
fun1();
fun4();
}
}
baiderin вне форума  
Сказали "Спасибо" baiderin
7Fantomas7 (02.07.2010)
Непрочитано 02.07.2010, 18:28  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию Re: Прерывания ATMega8

Код:
interrupt (TMR0_OVF)
{
fun2();
fun3();
}

void main(void)
{
fun1();
fun4();
}
По моему так - если есть функции то вызывайте их иде хотите в теле программы.
_guardianangel вне форума  
Сказали "Спасибо" _guardianangel
7Fantomas7 (02.07.2010)
Непрочитано 02.07.2010, 18:42  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Прерывания ATMega8

bit flag=0;

interrupt [TIM0_OVF]
{
flag=1;
}
Эту часть нельзя ли подробней расписать. Я ее не понимаю полностью.
7Fantomas7 вне форума  
Непрочитано 02.07.2010, 18:52  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания ATMega8

Срабатывает прерывание и устанавливает флаг события, что оно произошло.
Основная программа это видит и выполняет другие функции, причем один раз на каждое прерывание.Если функции короткие, можно из выполнять прямо в теле прерывания.
baiderin вне форума  
Непрочитано 02.07.2010, 19:03  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Прерывания ATMega8

Это я какраз таки и понял изначально.
Но я к своему стыду не понимаю что такое флаг и нигде в литературе не могу найти четкое подробное описание.
И мне не понятно что такое bit в книжках не нашел описания.
Хотя что такое бит я понимаю очень четко.
Другими словами если взять какуюто переменую и присваивать ей 1 в обработчике прерывания, а затем ноль то тут понятно. А bit flag=0; не понимаю.
И как отличить короткую функцию от длинной.

Последний раз редактировалось 7Fantomas7; 02.07.2010 в 19:06.
7Fantomas7 вне форума  
Непрочитано 02.07.2010, 19:09  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания ATMega8

Битовая переменная размещается в каком-нибудь регистре и =0 или =1.
Объявляется в начале программы, чтобы виделась из любой функции. Применяется для передачи информации между функциями программы.
baiderin вне форума  
Непрочитано 02.07.2010, 19:15  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: Прерывания ATMega8

Есть книга по CodeVision на русском, автор Лебедев М.Б.Там это есть.
Вообще, хорошая книга.
CodeVision AVR
Пособие для начинающих.
baiderin вне форума  
Непрочитано 02.07.2010, 20:57  
7Fantomas7
Почётный гражданин KAZUS.RU
 
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
7Fantomas7 на пути к лучшему
По умолчанию Re: Прерывания ATMega8

Я ее пол дня читал у меня она на бумаге, да и вообще я ее чегото все время читаю. И сам всем советую. Только вот битовых переменных и флагов не нашел. Потому и нет понимания, в противном случае вопросов не задавалбы.
7Fantomas7 вне форума  
Непрочитано 02.07.2010, 21:49  
MasterMushi
Вид на жительство
 
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
MasterMushi на пути к лучшему
По умолчанию Re: Прерывания ATMega8

7Fantomas7
Чем хорош пример baiderin-а, так это тем что показывает классический пример как должна вести себя любая программа на МК.
- Не мешай прерываниям и периферии. Обрабатывай данные только когда появится возможность

Другими словами в прерываниях мы как можно быстрее ставим флаги того что произошло событие. А реагируем на событие позже когда у нас появится для этого процессорное время.

Минус метода - события имеют место накапливаться, если вычислительная мощность проца не достаточно высока для обработки входных событий высокой частоты. Если мощности не хватает то получается так что обрабатываются события не поднявшие флаг прерывания а последовавшие за этим.
Пример - в тахометре занижается показание оборотов потому что счет запаздывает относительно срабатывания датчика.
__________________
Найди путь или проложи сам!
MasterMushi вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ATMega8 VS USB SkyProc Микроконтроллеры, АЦП, память и т.д 28 28.04.2010 17:01
Вложенные прерывания HITECH PIC16 picavr Микроконтроллеры, АЦП, память и т.д 17 07.03.2010 17:39
Вход в прерывания для PIC микроконтроллеров dimmich Микроконтроллеры, АЦП, память и т.д 4 06.12.2009 17:17
Котроллер дисплея на Atmega8 kosant Микроконтроллеры, АЦП, память и т.д 24 30.11.2009 20:57
прерывания usart в avr studio 4.13 zubr_ Микроконтроллеры, АЦП, память и т.д 6 14.10.2009 18:33


Часовой пояс GMT +4, время: 18:09.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot