МК - ATmega16.
До этого работал с ассемблером и все было очень понятно и ясно, вот сейчас начал С осваивать, написал обычную программу привет светодиод..
На PC2 повешен светодиод, на INT0 кнопка ( при нажатии "0", если отпущена то "1")
Настроил прерывание по INT0, если зафиксирован уровень "0", то светодиод должен погаснуть\засветится.
Вот код
CODE
#define F_CPU 6000000UL // 6 MHz
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
SIGNAL(INT0_vect)
{
PORTC ^= (1<<PC2);
}
int main(void)
{
int i=0;
TCCR0 = 1<<CS02|1<<CS00;
TIMSK = 1<<TOIE0;
DDRC = 1<<DDC2;
PORTC = 1<<PC2;
GICR = 1<<INT0;
sei();
while(1)
{
i++;
i++;
i--;
i--;
}
}
Проверяю в протеусе, если без прерываний, то светодиод горит, если с прерываниями то, тоже горит, но на нажатие кнопки не реагирует.
TCCR0 и TIMSK - это я с таймером экспериментировал, но там тоже ничего не вышло..
GICR - регистр для разрешение прерываний по INT0.
+ вопрос в догонку, а как здесь счетчики, которые и в главной функции работают, и в прерывании можно проверить..я так понимаю, через глобальные переменные только?
Ах да, если это важно, то компилирую в Avr studio v.5
Сообщение отредактировал Araxnid - Jan 28 2012, 11:33