Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Atmega 8515 задача на прерывание.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
breikist
Доброе время суток всем. Пишу программу для мк 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;
}
}
}
}

Я как понимаю , мои прерывания висят в воздухе , не могли бы помочь сделать так , что бы прерывание происходило при нажатии этих кнопок?
haker_fox
QUOTE (breikist @ Jan 14 2012, 18:03) *
Доброе время суток всем. Пишу программу для мк Atmega 81515 , задача на прерывание.
Я как понимаю , мои прерывания висят в воздухе , не могли бы помочь сделать так , что бы прерывание происходило при нажатии этих кнопок?

Доброе утро! Переменную d объявите следующим образом
CODE
volatile unsigned char d
. Почитайте про модификатор volatile.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.