2014-09-29 40 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循环它的工作 - 但我必须检查循环(温度传感器)。哪里不对?

+0

中断处理程序中的一个无限循环对我来说似乎不是一个好主意:(另外,来自interupt状态的'_delay_ms'调用听起来很可疑,但我不知道操作系统 – 2014-09-29 17:20:37

+0

谢谢 - 这就是我需要;)解决问题;) – henio180 2014-09-29 17:58:19

回答

1

中断处理程序中的无限循环对我来说似乎不是一个好主意:(另外,'_delay_ms'来自中断状态的调用听起来很可疑,但我不知道操作系统,因此它可能会或可能不会,没问题,