Я пытаюсь создать программу, которая будет прерываться, когда я нажимаю кнопку. У меня есть Atmega8, и я использую студию Microchip для кодирования. Я проверил документ о прерываниях на веб-сайте atmega, но не могу сказать, что полностью понял его. Вот мой код:
#define F_CPU 1000000UL
#define IRQ1 INT0_vect
#define IRQ2 INT1_vect
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void init()
{
DDRB=0b11111111;
PORTB=255;
_delay_ms(2000);
PORTB=0;
DDRD = 0b00000000;
GICR=0xc0;
MCUCR=0x08;
}
int main(void){
init();
volatile int mode = 0;
ISR(IRQ1){
_delay_ms(500);
if (mode<3)mode++; else mode = 0;
}
ISR(IRQ2){
_delay_ms(150);
}
}
Ошибки, которые я получаю:Имгур
Я был бы рад, если бы какой-либо администратор отредактировал мой вопрос и добавил сюда изображение, веб-сайт не позволяет мне добавлять фото, потому что мне нужно как минимум 10 репутации, чтобы опубликовать изображение.
Не пытайтесь определять функции внутри других функций, если вы действительно не знаете, что делаете. Вы должны переместить определения ISR на верхний уровень файла, поместив их за пределы main
.
И не добавляйте функцию _delay
в свой ISR.
Нет необходимости публиковать эти сообщения об ошибках в виде изображения: вполне достаточно текста.