1. Простая схема для изучения прерываний на микроконтроллере ATmega8515; Простая программа, использующая прерывания.
2. Настройка регистров, отвечающих за прерывания; Векторы прерываний.
3. Настройка выводов микроконтроллера на вход; Подключение внутренних подтягивающих резисторов; Подключение кнопки.
4. Пороговые напряжения на выводах микроконтроллера для срабатывания внешних прерываний; Гистерезис. скачать (55 МБ)
Если видеозапись не идёт, установите flash-плеер и проверьте звуковую карту, либо скачайте материал (55 МБ). Если вместо видео - зелёный экран, переустановите flash-плеер (просто скачайте последнюю версию). Если видео "дёргается", поставьте его на паузу и дайте немного подгрузиться. Плеер для просмотра flash-видео на домашней машине скачать здесь . Разверните видео на весь экран. Если напишут "Видео не найдено", "Video not found" - перезапустите видео ещё раз.
Схемы регистров для Logisim 2.7.1 скачать:
Текст программы обработки внешних прерываний на CodeVisionAVR:
// Внешнее прерывание микроконтроллера ATmega8515-16PU по внешнему выводу int1
#include <mega8515.h>
#include <delay.h>
// Обработчик прерываний________________________________________________________________________
interrupt[3] void ExtInt1(void) // Обработчик прерываний на int1 (Порт D, вывод 3).
{
PORTA.7=1; delay_ms(3000); // Здесь пишите код программы, срабатывающей по сигналу на int1 (жёлтый светодиод).
PORTA.7=0; delay_ms(500);
}
// Настройки портов и регистров__________________________________________________________________
void main(void)
{
DDRC=0b11111111; // Все выводы порта C настраиваем на выход
PORTC=0b00000000; // Обнуляем порт C до начала выполнения программы (на всякий случай)
DDRA=0b11111111; // Все выводы порта A настраиваем на выход
PORTA=0b00000000; // Обнуляем порт A до начала выполнения программы (на всякий случай)
DDRD=0b00000000; // Выводы порта D настраиваем как вход (0-вход, 1-выход)
PORTD=0b11111111; /* Подключаем внутренние подтягивающие резисторы к выводам порта D.
(0-высокоимпедансное состояние, 1-подтягивающий резистор, если при этом выставлен 0 на DDR в том же разряде) */
GICR=0b10000000; /* Регистр General Interrupt Control Register разрешает внешние прерывания
10 000000 - по выводу int1;
01 000000 - по выводу into;
11 000000 - по обоим выводам */
MCUCR=0b00001000; /* Регистр Micro Controller Unit Control Registr настраивает прерывание на срабатывание:
0000 10 00 - по спадающему фронту сигнала на выводе int1;
0000 11 00 - по нарастающему фронту сигнала на выводе int1;
0000 00 00 - по низкому уровню на выводе int1;
0000 01 00 - по любому изменению уровня на выводе int1 */
#asm("sei") // или SREG |= (1<<7); Status Register, 7 бит разрешает общие прерывания.
//Основная программа____________________________________________________________________________
while(1)
{
PORTC.0=1; delay_ms(500); // Здесь пишите код своей основной (фоновой) программы (зелёный светодиод).
PORTC.0=0; delay_ms(500);
}
}