Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помогите разобраться глючит таймер второй на mega128
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ed888
такая вот ситуация ! нет срабатывает прерывание второго восьмиразрядного таймера по совпадению с числом !

вот код на СИ в CVA

// T0
TCCR0 = (1<<2)|(1<<1)|(1<<3); // set bits CS02 CS0 WGM01
OCR0 = 0x52; // 2 m.sec. interval

// T2
TCCR2 = (1<<2)|(1<<1)|(1<<3); // set bits CS22 CS2 WGM21
OCR2 = 0x52; // 2 m.sec. interval

TIMSK = (1<<1)|(1<<7); // set bit OCIE0 and OCIE2 enable T0 interruption

этот обработчик срабатывает
interrupt [16] void Timer0Com( void )
{

}

а этот нет
interrupt [10] void Timer2Com( void )
{

}

может кто знает в чем дело ?
ed888
может глаз замылился может еще что ... но по коду видно что инициализация для обоих щетчиков одинаковая однако прерывания от второго нет и все !!! понимаю вопрос не такой интересный как про градусник или про мотоцикл но все же если есть хоть какиенибуть соображения напишите !!!
VDG
Можно только одно посоветовать. Взять даташит и ещё раз пройтись проверить все ли биты установлены верно. А чтобы быть уверенным, что компилер не глючит с такой формой записи "<<", можно забить прямо числом.
ed888
даташит перепроверен не единожды ошибки "увы" нет ... забил инициализацию числом дабы избежать ошибки компилятора эфект тотже sad.gif прерывания нет !
GDI
Цитата
// T2
TCCR2 = (1<<2)|(1<<1)|(1<<3); // set bits CS22 CS2 WGM21
OCR2 = 0x52; // 2 m.sec. interval


CS22 CS21 - у T2 - это внешний тактовый сигнал,
а у Т0 - это clk/256
defunct
и походу вместо использования неверных коментариев
// set bit OCIE0 and OCIE2 enable T0 interruption

лучше писать так:
TIMSK = (1<< OCIE2)|(1<< OCIE0);
GDI
Цитата
лучше писать так:
TIMSK = (1<< OCIE2)|(1<< OCIE0);


В CodeVision эти(да и другие) биты не определены

2 ed888 а почему бы не воспользоваться мастером создания проекта, если уж пользуетесь CV. Мастер - это единственный позитивный момент в CV по сравнению с IAR, в остальном IAR на голову выше.
yvk
Цитата(ed888 @ Jan 17 2007, 14:11) *
такая вот ситуация ! нет срабатывает прерывание второго восьмиразрядного таймера по совпадению с числом !
может кто знает в чем дело ?

А в обработчике прерывания по Timer0 не сбрасывается ли флаг от Timer2?
defunct
Цитата(GDI @ Jan 18 2007, 13:13) *
Цитата
лучше писать так:
TIMSK = (1<< OCIE2)|(1<< OCIE0);

В CodeVision эти(да и другие) биты не определены

Кто мешает их определить?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.