2014-09-29 6 views
0

Я написал этот код:Atmega 8 прерывание не работает

#define __AVR_LIBC_DEPRECATED_ENABLE__ 
#include <avr/delay.h> 
#include <avr/io.h> 
#include "lcd.h" 
#include <avr/interrupt.h> 

int screen = 0; 

void insideTemp(void) { 

    while (1) { 
     //some code hiere 
    } 
} 

void setup(void) { 
    LCDInit(LS_NONE); 
    MCUCR |= (1 << ISC01); 
    GICR |= (1 << INT0); 
    sei(); 
    DDRD = 0xff; 
    ADMUX = (1 << REFS0) | (1 << ADLAR); 
    ADCSRA = (1 << ADEN) | (1 << ADFR) | (1 << ADPS2); 
} 

SIGNAL(SIG_INTERRUPT0) { 
    screen++; 
    LCDClear(); 
    _delay_ms(10); 
    switch (screen) { 
    case 1: 
     insideTemp(); 
     break; 
    case 2: 
     outsideTemp(); 
     break; 
    case 3: 
     engineTemp(); 
     break; 
    default: 
     screen = 0; 
     insideTemp(); 
    } 
} 

int main(void) { 
    setup(); 

    while (1) { 

    } 
} 

Краткого описания - правильная функция должна вызывать после щелчка на кнопке, но только первый нажмите работу. Если я удаляю цикл while, он работает - но я должен проверить sth в цикле (датчик температуры). Что не так?

+0

Бесконечный цикл в обработчике прерываний для меня не похож :(Кроме того, вызов «_delay_ms» из interupt состояния звучит подозрительно, но я не знаю ОС. –

+0

Спасибо - вот что мне нужно;) Проблема решена;) – henio180

ответ

1

Бесконечный цикл в обработчике прерываний для меня не похож :(Кроме того, вызов «_delay_ms» из состояния прерывания звучит подозрительно, но я не знаю ОС, чтобы он мог или не мог, ОК,

 Смежные вопросы

  • Нет связанных вопросов^_^