Перейти к содержимому

Помогите написать простую программу для обработки внешних прерываний


Сообщений в теме: 3

#1
slimline

    Новичок

  • Пользователи
  • 7 сообщений
Пользуюсь CodeVisionAVr-ом, МК atmel mega 8515.

Пытался написать программу для МК, чтобы при нажатии кнопки загорался светодиод, но так как я еще только учусь - многое не понятно.

Вот, что получилось:
#include <mega8515.h>
#include <delay.h>

void main(void)
{
   DDRC=0b11111111;
   DDRD=0b00000000;
   PORTC=0b00000000;


   while(1)
   {
      if ((!PIND & (1<<PIND3))) // если нажата кнопка на ноге PORTD3, то выполнить:
         {
            PORTC = 0b00000001;
            delay_ms(3000);
         }
   }
}


Но конечно же оно не работает. Подскажите, что исправить или добавить? Спасибо.

#2
slimline

    Новичок

  • Пользователи
  • 7 сообщений
Вот, нашел что нужен еще обработчик прерываний:

ISR(вектор прерывания)
{
}

Писал так:
#include <mega8515.h>
#include <delay.h>

ISR(INT0_vect)
{
   if (PIND & (1<<PIND3)) // если нажата кнопка на ноге PORTD3, то выполнить:
      {
         PORTC = 0b00000001;
         delay_ms(3000);
      }

}

void main(void)
{

   GIMSK=0b00001100; //разрешаем прерывание int0 и int1
   MCUCR=0b00001111;// int by rising front -  для кнопки 1 и 2

   sei();

   while(1)
   {
      PORTC= 0b11111111;
      delay_ms(500);
      PORTC= 0b00000000;
      delay_ms(500);
   }

}


Тоже не работает....запутался уже…

#3
rgb

    Продвинутый пользователь

  • Разработчик MICROCHIP
  • 865 сообщений
  • ГородКременчуг
В мегах ничего не понимаю, но мне кажется инициализацию МК провести надо и по кнопке вы поднимаете ногу, а опускать ее кто будет? Прерывания для этой задачи не нужны, ну разве, что в целях изучения.

#4
slimline

    Новичок

  • Пользователи
  • 7 сообщений
пример программки не кто не покажет?)