Внешние прерывания

Материал из Automata.

(Различия между версиями)
Перейти к: навигация, поиск
м (Полностью удалено содержимое страницы)
м (Правки Kern (обсуждение) откачены к версии Mrsnaut)
 
Строка 1: Строка 1:
 +
#include <stdint.h>
 +
#include <avr/io.h>
 +
#include <avr/interrupt.h>
 +
//обработчик внешнего прерыания на выводе контроллера PD2_INT0;
 +
ISR(SIG_INTERRUPT0)
 +
{
 +
PORTB &= 0xfe;//включаем светодиод на плате контроллера;
 +
}
 +
 +
//обработчик внешнего прерыания на выводе контроллера PD3_INT1;
 +
ISR(SIG_INTERRUPT1)
 +
{
 +
PORTB |= 0x01;//выключаем светодиод на плате контроллера;
 +
}
 +
 +
//главная функция;
 +
int main (void)
 +
{
 +
DDRB = 0xff;//порт В настраиваем на выход;
 +
PORTB = 0x00;//отправляем на выводы логический "0";
 +
DDRD = 0xff;//порт D настраиваем на выход;
 +
PORTD = 0x00;//отправляем на выводы логический "0";
 +
SREG = 0x80;//глобальное разрешение прерываний;
 +
MCUCR = _BV(ISC11) | _BV(ISC10) | _BV(ISC01) | _BV(ISC00);//обработчики INT0 и INT1 будут запускаться при изменении
 +
//состояния соответствующих выводов с логических "0" на "1";
 +
GICR = _BV(INT1) | _BV(INT0);//разрешаем внешние прерывания INT0 и INT1;
 +
}

Текущая версия

#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>
//обработчик внешнего прерыания на выводе контроллера PD2_INT0; 
ISR(SIG_INTERRUPT0)
{
    PORTB &= 0xfe;//включаем светодиод на плате контроллера;
}
//обработчик внешнего прерыания на выводе контроллера PD3_INT1;
ISR(SIG_INTERRUPT1) 
{
    PORTB |= 0x01;//выключаем светодиод на плате контроллера;
}
//главная функция;
int main (void)
{
    DDRB   = 0xff;//порт В настраиваем на выход;
    PORTB  = 0x00;//отправляем на выводы логический "0";
    DDRD   = 0xff;//порт D настраиваем на выход;
    PORTD  = 0x00;//отправляем на выводы логический "0";
    SREG   = 0x80;//глобальное разрешение прерываний;
    MCUCR = _BV(ISC11) | _BV(ISC10) | _BV(ISC01) | _BV(ISC00);//обработчики INT0 и INT1 будут запускаться при изменении 
    //состояния соответствующих выводов с логических "0" на "1";
    GICR = _BV(INT1) | _BV(INT0);//разрешаем внешние прерывания INT0 и INT1;
}
Личные инструменты
Микроконтроллеры