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

 
 
 
Reply to this topicStart new topic
> прерывания в IAR, Почнму не включается общее разрешение прерыв???
ИИван
сообщение Oct 21 2007, 15:29
Сообщение #1





Группа: Новичок
Сообщений: 13
Регистрация: 28-08-07
Из: Магнитогорск
Пользователь №: 30 112



Исследую прерывания в ИАР. Написал следующий код, но при отладке в АВР студио прервание от таймера0 не происходит! По прчине того что не выставляется общий бит разрешения прерываний!!!!!!
В чём может быть дело? Ведь я включаю разрешение прерываний на языке С??

int tics=0;
#pragma vector=TIMER0_COMP_vect

void __interrupt void basic_interrupt (void)
{
tics+=1;
}


void main (void)
{
OCR0=0x02;
TIMSK=0x02;
TCCR0=0x03;
void __enable_interrupt();


while(tics<100)

PORTB++;
}
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 21 2007, 18:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Ваша функция main имеет точку входа и точку выхода. Поэтому скорее всего прерывание просто не успевает возникнуть, т.к. функция main завершает свою работу. Куда там дальше переходит выполнение программы я не знаю, но возможно, что на вектор сброса. Попробуйте все же зациклить процедуру, чтобы main не завершалась и тогда возможно прерывание когда-нибудь наступит wink.gif
P.S. кстати, посмотрите ассемблерный код. Возможно
Код
while(tics<100)
PORTB++;

в нем просто отсутствует.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Oct 22 2007, 06:07
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



void __enable_interrupt(); - это объявление функции, а не ее вызов.
Чтобы вызвать функцию, вы должны написать
__enable_interrupt();

Ну и что-то типа for(;;); в конце вставить не помешает smile.gif

Кстати, интересный вопрос - я думал, что внутри функций нельзя объявлять другие функции. А IAR на такой код не ругается...

Сообщение отредактировал Непомнящий Евгений - Oct 22 2007, 06:07
Go to the top of the page
 
+Quote Post
alexander55
сообщение Oct 22 2007, 06:23
Сообщение #4


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Непомнящий Евгений @ Oct 22 2007, 10:07) *
Кстати, интересный вопрос - я думал, что внутри функций нельзя объявлять другие функции. А IAR на такой код не ругается...

Объявлять можно, но Вы сами видите, как легко можно сделать ошибку.
Go to the top of the page
 
+Quote Post
ИИван
сообщение Nov 4 2007, 07:37
Сообщение #5





Группа: Новичок
Сообщений: 13
Регистрация: 28-08-07
Из: Магнитогорск
Пользователь №: 30 112



Всем спасибо! Разобрался.
Я сначало включал прерыния как void _enable interrupt(), а следует просто _enable interrupt(), и при этом не обходимо включить загловочный файл INTRINSICS. ВОТ в этом и была собака зарыта. smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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