izhevsk.ru Главная /  Радио /  Прерывания в ATMEGA16
тема закрыта

Имя:
Пароль:
 зарегистрироваться | Войти через
напоминатель пароля
Прерывания в ATMEGA16
НОВАЯ ТЕМА правила | поиск | картинки | | | о форуме |
  Новости | Авто | Недвижимость | Работа | Бизнес | Стройка | Объявления | Совместная покупка | | |
  следующая тема | предыдущая тема
Автор Тема:   Прерывания в ATMEGA16   версия для печати
VibraBrov
Рейтинг: 1/-3
-- написано 4-5-2013 01:45 VibraBrov

Поставили задачу сделать банальную прогу. Не буду вдаваться в подробности, но одна из задач - просто принять внешнее прерывание на INT0 (это пин 2 (третий по счёту) в порте D, тобишь PD2), по фронту спада или подъёма, не суть.
Так в обработчик вообще не входит. Почему??
Глобально всё включено (бит I в порту SREG).
В протеусе уровень (синий,красный квадратик) на входе меняется при нажатии на клавишу в 1 и в 0.

Вот куски кода:

void EXTINT_Init(void)
{
DDRD=0x00;
PORTD=0xff;
// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Falling Edge
GICR | =0x40;
MCUCR=0x02;
MCUCSR=0x00;
GIFR=0x40;
SREG | =0x80;
PORTC | =0x10;
//GIMSK | = (1<<INT0);
}

ps среда разработки CodeVisionAVR, тестирую в протеусе.

история редактирования

Показать текст сообщения полностью
VibraBrov
Рейтинг: 1/-3
-- написано 4-5-2013 01:48 VibraBrov

Пользовался кодвижн ВИЗАРД чтобы проверить правильно ли настроил прерывания, и всё сходится. Значения в портах те же.

Ещё там идёт вот такое включение прерываний ассемблерное:
#asm("sei")

зачем? Почему? почему прерывания включаются этой командой, а не какой-нибудь другой? да и если включаются, то почему не работают? Я в замешательстве.

лев-помещик
Рейтинг: 0/0
-- написано 4-5-2013 10:09 лев-помещик

а как ты узнаёшь что не работает ?
code:

#asm("sei")


потому что нет на Си (Code vision)команды разрешить прерывания

и вообще обработчик на CodeVision выглядит так:

code:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// тут обработчик

}


история редактирования

VibraBrov
Рейтинг: 1/-3
-- написано 4-5-2013 10:26 VibraBrov

quote:
Originally posted by лев-помещик:
а как ты узнаёшь что не работает ?

ДА, всё верно, так он и выглядит, у меня он туда не входит. Не входит в обработчик. Узнаю я это, записав команду PORTC | =0x01; в обработчик, а потом моделируя в протеусе.

лев-помещик
Рейтинг: 0/0
-- написано 4-5-2013 10:28 лев-помещик

а, ты виртуальных дел мастер..
ну виртуаль дальше..
VibraBrov
Рейтинг: 1/-3
-- написано 4-5-2013 10:39 VibraBrov

quote:
Originally posted by лев-помещик:
а, ты виртуальных дел мастер..
ну виртуаль дальше..

у вас тут на форуме "Радио" принято так разговаривать?

Я бы и с радостью проверить на живом аппарате, но для этого придётся немало потратить времени на создание платы, её разводку, поиск деталей, пайку.
Мне этот проект нужен лишь для сдачи курсового. И, как мне кажется, если уж протеус не вызывает обработчик, то в реальности всё будет ещё с большим набором проблем (хотя бы тот же дребезг кнопок).

П.С. отладочной платы, где нужно просто воткнуть элементы в нужные дырки, у меня тоже нет.

история редактирования

лев-помещик
Рейтинг: 0/0
-- написано 4-5-2013 13:09 лев-помещик

давай продам тебе набор: программатор+микросхема atmega 16A + мини макетка =
300р.
И всё у тебя будет хорошо.

Aleksey_N
Рейтинг: 7/0
-- написано 5-5-2013 16:43 Aleksey_N

quote:
И всё у тебя будет хорошо.

улыбнуло
Автор, нафига "брать курсач на элементной базе", в которой ни фига не сечете?
VibraBrov
Рейтинг: 1/-3
-- написано 5-5-2013 18:51 VibraBrov

quote:
Originally posted by Aleksey_N:
Автор, нафига "брать курсач на элементной базе"

что значит на элементной базе?
Тут разве много элементов надо нахерачить? Это выч техника здесь и рассчётов схем почти нет. Надо просто сеть спроектировать в которой всё бы передавалось по любому интерфейсу. Я выбрал SPI.

Что значит брать курсач?
"товарищь препод, я не буду брать этот курсач, он мне не нравится, и вы, кстати, тоже не нравитесь." Так что ли?)


quote:
Originally posted by Aleksey_N:
в которой ни фига не сечете?

Это в универе задали. Да и не стоит говорить что совсем не секу. Просто на работе программирую в IAR и там ARM-овские процы. В кодвижене почти не работал, но вот припёрло.

П.С. не вижу чтобы кто-нибудь из здешних умников знал в чем ошибка и смог помочь, однако написать, что я не шарю успевают. Похвально.

gypar
Рейтинг: 3/-1
-- написано 5-5-2013 22:26 gypar

инициализация прерывания в авр студии 6.0

void interrupt_init(void)
{
//включение прерывания INT1 по нисходящему фронту и INT0 по восходящему фронту
MCUCR = 1<<ISC11 | 0<<ISC10 | 1<<ISC01 | 1<<ISC00;
//включение прерываний
GICR = 1<<INT0 | 1<<INT1;
}

VibraBrov
Рейтинг: 1/-3
-- написано 6-5-2013 00:04 VibraBrov

quote:
Originally posted by gypar:
инициализация прерывания в авр студии 6.0

void interrupt_init(void)
{
//включение прерывания INT1 по нисходящему фронту и INT0 по восходящему фронту
MCUCR = 1<<ISC11 | 0<<ISC10 | 1<<ISC01 | 1<<ISC00;
//включение прерываний
GICR = 1<<INT0 | 1<<INT1;
}


Благодарю!!


200x150 320x240 400x300 800x600    без переносов   
быстрый ответ   

подпись
следующая тема | предыдущая тема

Главная /  Радио /  Прерывания в ATMEGA16 форумы izhevsk.ru

 
 
 
 
 
© ООО "Марк" 2020
 
Интернет-провайдер КК МАРК-ИТТ