реклама на сайте
подробности

 
 
> Обработка прерывания, зависает в обработчике прерывания...
cuba74
сообщение Aug 18 2009, 11:17
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-11-07
Пользователь №: 32 751



Всем превед..

Вот столкнулся с проблемой....прерывание по INT0....

на прерывание откликается ...переходит в обработчик прерывания...выполняет все указанные действия....

пример - очистка lcd и выдача на него информации, поле этого стоит return... однако выходить из данной

функции нежелает....спустя 10 секунд, все-таки ввозвращается в исходное меню..

контроллер ATmega16.... среда IAR


Код
#pragma vector=INT0_vect
__interrupt void IRQ(void)
{  
    IRQ_DIS;
    GICR |= (1<<6);

    clear_lcd();
    write_data_lcd(GICR, 0xa0);
    write_data_lcd(GIFR, 0xe0);
    delay_1ms(500);

    IRQ_EN;
    return;

}
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zltigo
сообщение Aug 18 2009, 15:34
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(cuba74 @ Aug 18 2009, 13:17) *
Вот столкнулся с проблемой....прерывание по INT0....

При таком подходе к обработчикам с впихиванием в них задержек по полсекунды и прочих мутных вещей заниматься решением возникших "проблем" совершенно бессмысленно ввиду изначально заложенного уродства.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
cuba74
сообщение Aug 19 2009, 03:05
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 28-11-07
Пользователь №: 32 751



Цитата(zltigo @ Aug 18 2009, 21:34) *
При таком подходе к обработчикам с впихиванием в них задержек по полсекунды и прочих мутных вещей заниматься решением возникших "проблем" совершенно бессмысленно ввиду изначально заложенного уродства.


Задержка на полсекунды - это для себя, дабы увидеть что функция обработчика запустилась и выд-ся информация на дисплей.....помоему это очевидно...индикация , и сразу за ней задержка чтоб рассмотреть, что вывел.....

Ежели в программе по прерыванию требуется посмотреть информациюна экране.....как без задержки?

Цитата(Goodefine @ Aug 18 2009, 21:24) *
По каким признакам Вы определяете что программа вышла из обработчика? Main Вы не привели...



MAIN не привел, в мэйне

while(1)
{

//соответственно вывод другой индикации

}

Сообщение отредактировал cuba74 - Aug 19 2009, 03:07
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Aug 19 2009, 10:37
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



Цитата(cuba74 @ Aug 19 2009, 07:05) *
Задержка на полсекунды - это для себя, дабы увидеть что функция обработчика запустилась и выд-ся информация на дисплей

Чтобы увидеть, что обработчик запустился достаточно ногой дрыгать. Уберите вы LCD из обработчика и посмотрите ушла ли проблема, если да, то копайте в реализации функций LCD.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 16:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01377 секунд с 7
ELECTRONIX ©2004-2016