Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.07.2010, 17:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Прерывания 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();
}
}
Вобшем как в прерывании выполнить не функцию обработчик прерываний, а несколько функций.
|
|
|
|
02.07.2010, 18:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Прерывания ATMega8
bit flag=0;
interrupt [TIM0_OVF]
{
flag=1;
}
void main(void)
{
if(flag)
{
fun2();
fun3();
flag=0;
}
else
{
fun1();
fun4();
}
}
|
|
|
Сказали "Спасибо" baiderin
|
|
|
02.07.2010, 18:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Прерывания ATMega8
Код:
|
interrupt (TMR0_OVF)
{
fun2();
fun3();
}
void main(void)
{
fun1();
fun4();
} |
По моему так - если есть функции то вызывайте их иде хотите в теле программы.
|
|
|
Сказали "Спасибо" _guardianangel
|
|
|
02.07.2010, 18:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Прерывания ATMega8
bit flag=0;
interrupt [TIM0_OVF]
{
flag=1;
}
Эту часть нельзя ли подробней расписать. Я ее не понимаю полностью.
|
|
|
|
02.07.2010, 18:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Прерывания ATMega8
Срабатывает прерывание и устанавливает флаг события, что оно произошло.
Основная программа это видит и выполняет другие функции, причем один раз на каждое прерывание.Если функции короткие, можно из выполнять прямо в теле прерывания.
|
|
|
|
02.07.2010, 19:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Прерывания ATMega8
Это я какраз таки и понял изначально.
Но я к своему стыду не понимаю что такое флаг и нигде в литературе не могу найти четкое подробное описание.
И мне не понятно что такое bit в книжках не нашел описания.
Хотя что такое бит я понимаю очень четко.
Другими словами если взять какуюто переменую и присваивать ей 1 в обработчике прерывания, а затем ноль то тут понятно. А bit flag=0; не понимаю.
И как отличить короткую функцию от длинной.
Последний раз редактировалось 7Fantomas7; 02.07.2010 в 19:06.
|
|
|
|
02.07.2010, 19:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Прерывания ATMega8
Битовая переменная размещается в каком-нибудь регистре и =0 или =1.
Объявляется в начале программы, чтобы виделась из любой функции. Применяется для передачи информации между функциями программы.
|
|
|
|
02.07.2010, 19:15
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,725
Сказал спасибо: 2,424
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Re: Прерывания ATMega8
Есть книга по CodeVision на русском, автор Лебедев М.Б.Там это есть.
Вообще, хорошая книга.
CodeVision AVR
Пособие для начинающих.
|
|
|
|
02.07.2010, 20:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: Прерывания ATMega8
Я ее пол дня читал у меня она на бумаге, да и вообще я ее чегото все время читаю. И сам всем советую. Только вот битовых переменных и флагов не нашел. Потому и нет понимания, в противном случае вопросов не задавалбы.
|
|
|
|
02.07.2010, 21:49
|
|
Вид на жительство
Регистрация: 14.10.2009
Сообщений: 338
Сказал спасибо: 35
Сказали Спасибо 92 раз(а) в 73 сообщении(ях)
|
Re: Прерывания ATMega8
7Fantomas7
Чем хорош пример baiderin-а, так это тем что показывает классический пример как должна вести себя любая программа на МК.
- Не мешай прерываниям и периферии. Обрабатывай данные только когда появится возможность
Другими словами в прерываниях мы как можно быстрее ставим флаги того что произошло событие. А реагируем на событие позже когда у нас появится для этого процессорное время.
Минус метода - события имеют место накапливаться, если вычислительная мощность проца не достаточно высока для обработки входных событий высокой частоты. Если мощности не хватает то получается так что обрабатываются события не поднявшие флаг прерывания а последовавшие за этим.
Пример - в тахометре занижается показание оборотов потому что счет запаздывает относительно срабатывания датчика.
__________________
Найди путь или проложи сам!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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.
|
|