27
Посмотрите в панели "регистры и флаги" в регистре флагов GIFR (обязательно почитайте об этом регистре
в ДатаШите) установился бит_5, если навести на него мышку то появится его название - INTF2 - это флаг
прерывания INT2. Вы видите что хотя мы не включали это прерывание его флаг установился при
событии соответствующем ему. Как я вам и обещал выше !
Теперь (симуляция продолжается, время с начала программы МК в правом нижнем углу бежит...) нажмите K0 в
панели "Control Panel" сразу же произойдет разрешенное прерывание, и программа перейдет в функцию
обработчик прерывания INT0 и в виртуальном терминале TTY появится сообщение:
int0
Отпустите K0 и нажмите K1 отпустите K1
Смотрите: так как мы находимся в отработке паузы 100 мС в обработчике прерывания от INT0. Бит_7 в SREG
остается "0" и значит прерывания не исполняются. Все правильно - но отпускание кнопки K0 вызвало установку
флага INTF0 а нажатие и отпускание K1 установило флаг INTF1.
Если теория прерываний изложенная мной выше верна то по завершении текущей обработки прерывания INT0
должны произойти еще по 1 вызову обработчиков прерываний INT0 и INT1 - причем сейчас МК не "знает"
какое из них случилось первым и значит будет обрабатывать их по порядку перечисления в таблице 18 ДШ.
Ждем не долго ... появляются с некоторой паузой одно сообщение и затем другое свидетельствующие о вызове
соответствующих обработчиков прерываний:
int0
int1
При этом вначале очистится бит INTF0, а затем INTF1.
Вопрос для самоконтроля: Почему нажатие и отпускание кнопки K0 вызвало две обработки прерывания INT0,
а от кнопки K1 только одно ?
Попробуете симуляцию снова и измените порядок нажатия кнопок: вначале K1 а затем K0 - и вы
увидите что последние два прерывания все равно будут выполнены в том же порядке: int0 и затем int1
Важно ! Из примера выше следует что Накопление не обработанных прерываний крайне не
желательно так как МК "не помнит" последовательность возникновения соответствующих событий !
Практическое применение прерываний будет рассмотрено в задачах - упражнениях курса.
... и теперь самый пожалуй интересный пунктик - ПРОГРАММА "зашитая" в МК
Я постулировал ранее что - Возможность МК действовать по вашей программе - вот суть-соль МК. Это главное
отличие МК от "обычных" непрограммируемых микросхем.
Я уже рассказал выше
- о внешних электрических сигналах поступающих на МК
- про электронику подключенную к МК
- о возможностях заложенных производителем
AVR ATmega содержит многократно программируемую FLASH память программ - в нее загружается (есть
различные варианты прошивки, загрузки программы - достаточно пяти проводков от LPT-порта к МК) программа
которую будет исполнять МК при наличии следующих условий:
1) есть питание МК
2) есть уровень "1" на выводе Reset
3) есть источник тактового сигнала
4) нет сброса от иного источника сброса (== перезагрузки МК)
При наличии этих условий МК начинает шагать по программе которая представляет из себя последовательность
инструкций которые может выполнять МК иногда прерываясь так как было описано выше.
Даю определение - запомните : Программа взаимодействует с МК записывая, изменяя в нужное время числа в
регистрах МК и читая в нужное время числа из определенных регистров. Важно понимать - Именно
взаимодействует с МК, а не просто управляет! То что содержится в регистрах МК влияет на ход
выполнения программы если она это предусматривает.
О как ! ... да что ж это за регистры такие, будь они не ладны!
Регистры МК
Регистр (Register) MK AVR - это набор из 8 бит т.е. 1 байт. Как бы ящичек с 8-ю ячейками с номерами от 7 до 0. В
этих ячейках находятся 8 бит этого регистра.
бит7 самый левый - MSB - наиболее значимый бит, старший бит.
бит0 самый правый - LSB - наименее значимый бит, младший бит.
Бит может иметь значение "1" или "0".
8 бит составляют байт и могут хранить десятичное
число от 0 до 255
другие формы записи этого диапазона чисел таковы:
в 16-тиричном виде: от 0 до 0xFF или от $0 до $FF или от 0h до FFh
в двоичном виде от 0b00000000 до 0b11111111
Число которое находится в регистре - есть значение регистра.
Значение в регистре вычисляется как сумма составленная из восьми
таких слагаемых :