Вы здесь: Главная » Анатомия микроконтроллеров ATmega - 3. Прерывания.

Анатомия микроконтроллеров ATmega - 3. Прерывания.

Анатомия микроконтроллеров ATmega - 3. Прерывания.



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

и подключим её к выводу порта В, к нулевому разряду. Откроем мастер Code Wizard AVR, и создадим новый проект:




Источник тактовых импульсов по умолчанию установлен системным, частоту таймера устанавливаем равной 3906 кГц, и поставим галочку прерывания по переполнению. Щас я объясню что почём.

Таймер 0 восьмибитный, то есть он считает с 0 до 255, при превышении числа 255 происходит переполнение, вырабатывается прерывание и значение таймера сбрасывается в 0. При генерации прерывания основная программа останавливается и происходит переход на подпрограмму обработчик прерывания по вектору записанному в начале памяти программ. Для каждого события отведён свой вектор. Основная программа не замечает прерываний, но она может ими управлять.

Давайте реализуем это всё на практике.

Далее заполним наш бесконечный цикл:


В бесконечном цикле программа проверяет нажатие кнопки, и переключает прерывания, разрешая или запрещая их. обратите внимание на команду #asm("sei")/#asm("cli"), это инструкция компилятору для вставки в данном месте команды ассемблера разрешения/запрещения прерывания. Таким образом мы запускаем/останавливаем бегущие огни.

Подробнее с прерываниями можно ознакомиться в даташите на ATmega8, даташит можно найти в "Справочнике" на нашем сайте.