Фанат науки

 
  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта
Микроконтроллеры AVR. Практикум для начинающих. Видеоурок. Внешние прерывания (практика ч.1)
______________________________________________________________________________________________________

1. Простая схема для изучения прерываний на микроконтроллере ATmega8515; Простая программа, использующая прерывания.
2. Настройка регистров, отвечающих за прерывания; Векторы прерываний.
3. Настройка выводов микроконтроллера на вход; Подключение внутренних подтягивающих резисторов; Подключение кнопки.
4. Пороговые напряжения на выводах микроконтроллера для срабатывания внешних прерываний; Гистерезис. скачать (55 МБ)

 

Содержание

Если видеозапись не идёт, установите flash-плеер и проверьте звуковую карту, либо скачайте материал (55 МБ). Если вместо видео - зелёный экран, переустановите flash-плеер (просто скачайте последнюю версию). Если видео "дёргается", поставьте его на паузу и дайте немного подгрузиться. Плеер для просмотра flash-видео на домашней машине скачать здесь . Разверните видео на весь экран. Если напишут "Видео не найдено", "Video not found" - перезапустите видео ещё раз.
Схемы регистров для Logisim 2.7.1 скачать:
Register
 

Interrupt Pins 12 13

 

Interrupts

 

Sxema

 

PULL UP Resistor

Текст программы обработки внешних прерываний на 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);             
    }   
}

 
   © Фанат науки 2010 - 2022.  Все права защищены.  При использовании материалов обязательна ссылка на сайт  www.fanatnauki.ru