Vyatsek 0 16 сентября, 2005 Опубликовано 16 сентября, 2005 · Жалоба #include <intrinsics.h> #include <iom16.h> #include <string.h> void InitTimer() { TIMSK=0x10; TCCR1A=0x10; TCCR1B=0x0A; OCR1AL=0x30;OCR1AH=0x00; OCR1BH=0x00;OCR1BL=0x07; PORTD=0x00; DDRD=0x10; } #pragma vector=0x00C //timer comp a __interrupt void qinterrupt(void) { char c; c='4'; } int main( void ) { __enable_interrupt(); InitTimer(); while(1); } при отладке не заходит в прерывание и как правильно в IAR написать прерывание на таймер, кто знает подскажите или пример кода привидите Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 16 сентября, 2005 Опубликовано 16 сентября, 2005 · Жалоба Кусок работающего кода #include <iom8.h> #include <ina90.h> #pragma vector=TIMER1_COMPA_vect __interrupt void TIMER1CM() { } int main() { TCCR1B=(1<<WGM12)|(1<<CS12)|(1<CS10); OCR1AH=0; OCR1AL=1; TIMSK=(1<<OCIE1A); __enable_interrupt(); while(1); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SL@V@ 0 16 сентября, 2005 Опубликовано 16 сентября, 2005 · Жалоба При отладке в симуляторе IAR-а не симулируются периферийные устройства микроконтроллера. Для работы с прерываниями их надо задавать искуственно в меню Simulator/Interrupts, либо отлаживать в симуляторе AVRStudio Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 16 сентября, 2005 Опубликовано 16 сентября, 2005 · Жалоба Недавно писал, все работает, как часы! Вернее часы и работают, с погрешностью 2сек. за 24 часа (кварц хороший попался :) ): // IRQ TIMER1_COMPA #pragma vector = TIMER1_COMPA_vect __interrupt void timer1_compA_Processing(void) { char pd; tick++; *** *** *** __enable_interrupt(); } void InitTimers(void) { /* Initialization Timer1 */ OCR1A = EIGHTH_sec; // Set compare value on one second. TIMSK = (1 << OCIE1A); // Set mask to enable Timer1A compare interrupt. TIFR = (1 << OCF1A); // Clear pending interrupts Timer1A. TCCR1B = ((1 << WGM12) | (1 << CS11) | (1 << CS10)); // Set CTC and prescaller on 64. } Рекомендую Вам использовать форму записи битовой инициализазии такую: 1 << WGM12. Это просто наглядней и дает меньше шансов запутаться, хотя каждый делает на свой 'цвет'. :glare: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться