Доброе время суток всем. Пишу программу для мк Atmega 81515 , задача на прерывание.
Текст задачи:
Светодиоды с нечетными номерами включаются по очереди, создавая эффект
бегущих огней справа налево. После нажатия на кнопку SW6 эффект бегущих огней
создается четными светодиодами. После нажатия на кнопку SW5 снова
используются нечетные светодиоды. Для изменения режимов управления
светодиодами ипользовать прерывания INT1 (кнопка SW6) и INT2 (кнопка SW5).
Мой текст программы:
CODE
#define F_CPU 3686400UL
#include <avr/io.h>
#include<util/delay.h>
#include <avr/interrupt.h>
unsigned char r, d,a;
ISR (INT1_vect)
{
d=0;
}
ISR (INT2_vect)
{
d=1;
}
int main (void)
{
DDRB = 0xFF;
PORTB = 0xFF;
DDRE = 0x00;
PORTE = 0xFF;
PINE = 0xFF;
GICR=0b10100000;
MCUCR=0b00001010;
sei();
while (1)
{
if (d == 1)
r = 0b00000010;
else
r = 0b00000001;
while(r!=0)
{
PORTB = r^0xFF;
if (d == 1)
{
r <<= 2;
}
else
{
r <<= 2;
}
//_delay_ms(1000);
{
if(!(PINE&(1<<1)))
d=0;
r >>= 1;
}
{
if(!(PINE&(1<<0)))
d=1;
r <<=1;
}
}
}
}
Я как понимаю , мои прерывания висят в воздухе , не могли бы помочь сделать так , что бы прерывание происходило при нажатии этих кнопок?
Сообщение отредактировал IgorKossak - Jan 14 2012, 16:59
Причина редактирования: [codebox]!!!, форматирование