2014-09-29 96 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'來自中斷狀態的調用聽起來很可疑,但我不知道操作系統,因此它可能會或可能不會,沒問題,