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

 
 
> не могу мегу 8 загнать во внешнее прерывание int0
Метценгерштейн
сообщение Sep 4 2013, 15:04
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



Код
char __low_level_init (void) {  
...
        MCUCR = (1<<ISC01)|(0<<ISC00); // разрешил внешнее прерывание INT0 по падению фронта
        GICR = (1<<INT0); // разрешил глобальное прерывание по INT0
...
        PORTD = (0<<7)|(0<<6)|(0<<5)|(0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);            
        DDRD =(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(0<<2)|(1<<1)|(1<<0);      // PD2 (int0) вход          
        
        return 1;                                
}


вот в main () разрешаю глобальные прерывания
Код
void main (void) {
__enable_interrupt();
...


а вот уже в др. файле обработчик прерывания
Код
#pragma vector = INT0_vect
__interrupt void INT0_interrupt (void)
{
  putString ("прерывание");
  putString ("\r\n");
...

на осцилле при старте единица. Подаю ноль, в обработчик не вваливается.

Чего не вижу?

Сообщение отредактировал Метценгерштейн - Sep 4 2013, 15:04
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ILYAUL
сообщение Sep 4 2013, 20:32
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Может всё таки
#asm("sei");
вместо
__enable_interrupt();


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Xenia
сообщение Sep 4 2013, 20:50
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(ILYAUL @ Sep 5 2013, 00:32) *
Может всё таки
#asm("sei");
вместо
__enable_interrupt();


IAR-компилятор допускает еще и другую альтернативу:
_SEI();
но это устаревшая конструкция, а по нынешним временам правильнее писать:
__enable_interrupt();

Между тем, всё это полные синонимы, в чем легко убедиться, заглянув в ассеблерный листиг. Генерацию последнего всегда стоит заказывать в проекте.

Метценгерштейн, если ничего не помогло - увеличьте напряжение на INT0 (до 5 вольт). Помнится, на форуме уже была аналогичная жалоба, которая была так вылечена.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 24th June 2025 - 18:40
Рейтинг@Mail.ru


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