- •Конспект лекций по дисциплине Микропроцессоры и микропроцессорные системы управления
- •Раздел 1 Основы микропроцессорной техники Тема 1.1 Принцип программного управления – основной принцип работы мп
- •Тема 1.2 Принцип централизации управления мпс. Шинная связь
- •Урок №5
- •Тема 1.3 Регистровая модель микропроцессора
- •1.3.1 Классификация внутренних регистров мп
- •1.3.2 Две архитектуры мп: аккумуляторная и регистровая
- •1.3.4* Внутренняя структура мп i8080
- •1.3.5* Регистровая модель мп i8080
- •Урок № 6
- •Урок №7 Лабораторная работа №1 Ввод, компиляция и отладка программ в avr Studio
- •Урок №8 Лабораторная работа №2 Анализ работы ядра микроконтроллера
- •Тема 1.4 Режимы работы микропроцессорной системы
- •Урок №11 Тема: Упражнения. Подготовка к лабораторным работам №3, 4
- •Урок №12 Лабораторная работа №3 Анализ работы микропроцессора в программном режиме и в режиме вызова подпрограмм
- •1 Практические задания и методические указания по их выполнению
- •3 Контрольные вопросы:
- •Урок №13 Лабораторная работа №4 Анализ работы микропроцессора в режиме прерывания программы
- •2 Практические задания и методические указания по их выполнению
- •3 Оформление отчета
- •4 Контрольные вопросы:
- •Урок №14
- •Тема 1.5 Микроконтроллеры
- •Раздел 2 микроконтроллеры семейства avr
- •Тема 2.1 История создания, классификация микроконтроллеров семейства avr
- •Тема 2.2 Типы корпусов микроконтроллеров семейства avr
- •Урок №17
- •Тема 2.3 Основные параметры, назначение выводов мк aTtiny2313
- •Урок №18
- •Тема 2.4 Основные параметры, назначение выводов мк aTmega8535
- •Урок №17
- •Тема 2.3 Основные параметры, назначение выводов мк aTtiny2313
- •Урок №18
- •Тема 2.4 Основные параметры, назначение выводов мк aTmega8535
- •Урок №19
- •Тема 2.5 Синхронизация работы мк avr
- •Урок №20
- •Тема 2.6 Система сброса
- •Урок №21
- •Тема 2.7 Параллельные порты микроконтроллеров семейства avr
- •Урок №22
- •Тема 2.8 Команды обращения к параллельным портам микроконтроллеров семейства avr
- •Урок №27 Лабораторная работа № 5 Методика отладки программ на лабораторном стенде «Программирование мк aTmega8535»
- •Урок №28 Лабораторная работа № 6 Разработка и отладка программы «Copy»
- •Урок № 29
- •Тема 2.9 Типичные схемы подключения светодиодов к выходам мк
- •Урок №30
- •Урок №31
- •Тема 2.10 Типичные схемы подключения семисегментных индикаторов к выходам мк
- •Урок №32
- •Урок №33
- •Урок №34 Лабораторная работа № 7 Исследование работы схемы статической индикации на лабораторном стенде «Программирование мк aTmega8535
- •2 Практические задания и методические указания по их выполнению.
- •Урок № 35
- •Тема 2.11 Типичные схемы подключения двоичных датчиков
- •Урок № 36
- •Урок №37
- •Тема 2.12 Программирование микроконтроллеров
- •Урок № 38 Подготовка к лабораторным работам № 8, 9
- •Урок № 39 Лабораторная работа №8 Программирование микроконтроллера с помощью программатора Phyton
- •Урок № 40 Лабораторная работа №9 Отладка программ на стенде «Цифровые микросхемы»
- •Урок № 41
- •Тема 2.13 Система прерываний
- •Урок №42
- •Урок №43
- •Урок №45 Лабораторная работа №10 Исследование логики прерывания от внешнего устройства
- •1 Краткие сведения из теории
- •2 Практические задания и методические указания по их выполнению
- •3 Оформление отчета
- •Урок № 46
- •Урок № 47
- •Тема 2.14 Таймеры
- •Урок № 49
- •Урок № 50
- •Урок № 51 Лабораторная работа № 11 Исследование работы таймера-счетчика t/c0
- •1 Краткие сведения из теории
- •3 Оформление отчета
- •Тема 2.12 Лабораторный комплекс «Микроконтроллеры и автоматизация»
- •Тема 2.13 Примеры программ ввода-вывода
- •Раздел 4 специальные возможности микроконтроллеров семейства avr Тема 4.1 Система прерываний
Тема 1.4 Режимы работы микропроцессорной системы
1.4.1 Программный обмен
1.4.2 Вызов подпрограмм
1.4.3 Прерывание программы
1.4.4 Упражнения. Подготовка к лабораторным работам №3, 4
1.4.1 Программный обмен
Программный обмен - это основной режим работы МПС. Логика программного обмена проста: МП выбирает из памяти очередную команду программы и выполняет ее. Адрес выполняемой команды формируется в специальном регистре, называемом программным счетчиком РС (Program Counter) или просто счетчиком команд (СК). При включении МП СК обнуляется, поэтому первым адресом является 0, и первая команда программы всегда записывается в ячейку с нулевым адресом. После извлечения команды из памяти счетчик команд формирует следующий адрес, в простейшем случае к содержимому СК просто прибавляется 1. Более сложный вариант, если из памяти извлекается команда перехода. В этом случае адрес следующей команды указывается в самой команде или вычисляется.
Ниже представлены два фрагмент программ, написанных на языке ассемблера и листинги их перевода. В листинге для каждой команды указан адрес ячейки и машинный код команды, записанные в шестнадцатеричной системе счисления.
Во фрагменте 1 директива .org 0 предписывает записать первую команду в ячейку с адресом 0. Следующие команды займут соответственно ячейки с адресами 1 и 2. Команды будут выполняться по очереди и первым будет очищен регистр r0, затем r1 и r2.
Фрагмент 1:
.org 0 ;организовать запись следующей команды в ячейку
;с адресом 0
clr r0 ;очистить регистр r0
clr r1
clr r2
Адрес ячейки Код команды Команда
000000 2400 clr r0
000001 2411 clr r1
000002 2422 clr r2
Во фрагменте 2 поочередное (линейное) выполнение команд нарушают команды прыжков. Содержимое счетчика команд будет изменяться так: 0, 10, 1, 2,12, и регистры будут очищаться в таком порядке: r16, r0, r1. После этого программа закончится пустой командой. Регистр r2 останется неочищенным.
Фрагмент 2:
.org 0 ;организовать запись следующей команды в ячейку
;с адресом 0
rjmp 10 ;прыжок на ячейку с адресом 10 (000а)
clr r0 ;очистить регистр r0
clr r1
rjmp 12 ;прыжок на ячейку с адресом 12 (000с)
clr r2
.org 10 ;организовать запись следующей команды в ячейку
;с адресом 10
clr r16
rjmp 1 ;прыжок на ячейку с адресом 1
nop ;нет операции (пустая команда)
Адрес ячейки Код команды Команда
000000 c009 rjmp 10
000001 2400 clr r0
000002 2411 clr r1
000003 c008 rjmp 12
000004 2422 clr r2
.org 10
00000a (10) 2700 clr r16
00000b (11) cff5 rjmp 1
00000c (12) 0000 nop
1.4.2 Вызов подпрограмм
Если какой либо фрагмент повторяется в программе несколько раз, его удобно оформить в виде подпрограммы. Для этого повторяющиеся фрагменты удаляется из программы и записываются в виде отдельной программы – подпрограммы. В основной программе на место удаленного фрагмента записывается специальная команда CALL addr – вызов подпрограммы по указанному адресу (addr). Текст программы становится проще, программа становится более структурированной и занимает в памяти меньше места, хотя время выполнения программы при этом не уменьшается. Для выполнения подпрограмм МП должен иметь две специальные команды:
1) вызов подпрограммы (CALL addr);
2) возврат из подпрограммы (Return).
Рассмотрим механизм выполнения подпрограммы.
По команде CALL addr, адрес подпрограммы загружается в РС, обеспечивая в следующем командном цикле выборку первой команды подпрограммы. Предварительно текущее содержимое РС (адрес возврата) сохраняется в стеке. Подпрограмма выполняется как обычная программа, и по команде RETURN, завершающей подпрограмму, происходит выход из подпрограмма и возврат к основной программе. Адрес возврата извлекается из стека и записывается в Счетчик команд.
Одна и та же подпрограмма может быть вызвана любое количество раз из любого места основной программы. Кроме того, в подпрограмму могут быть вложено несколько других подпрограмм. Процедура вложения подпрограмм организуется с помощью стека. Стек организуется в ОЗУ.
Рисунок 1 - Вложение подпрограмм
Обращение к ячейкам стека производится с помощью специального регистра - указателя стека SP (Stack Pointer). По первой команде CALL адрес, следующий за командой (адрес возврата) Ai+1 , записывается в ячейке стека, на которую указывает указатель стека SP. После чего содержимое SP автоматически уменьшается на 1, адресуя следующую, еще ячейку стека и в эту ячейку записывается следующий адрес возврата Bi+1 и т.д. Таким образом, стек заполняется «свеху-вниз», и сколько бы ни было вложений, в нижней ячейке будет находится адрес возврата из последней подпрограммы. Возврат к основной программе происходит в обратном порядке: , адрес вершины стека показывает SP. Например, если стек начинается с адреса 07, то на рисунке 7 показана процедура его заполнения.
-
Адрес ОЗУ
Содержимое
Вершина стека
SP
$025f
Ai+1
SP-1
$025e
Bi+1
Рисунок 2 - Работа стека
По команде RETURN проиcходит считывание из вершины стека последнего записанного адреса (Bi+1) и происходит выход из второй подпрограммы в первую, при этом содержимое SP уменьшается на 1, и по следующей команде RETURN в СК перепишется адрес (Ai+1), и произойдет выход из первой подпрограммы в основную программу.
Урок №10
1.4.3 Прерывание программы
Прерывание программы – это такой режим работы МП, когда возникает ситуация, требующая немедленного вмешательства. МП приостанавливает на время выполнение основной программы и переходит на выполнение подпрограммы обработки прерывания.
Источниками прерываний могут быть внешние или внутренние устройства МП, а также сбои, возникающие в работе МП, например, снижение напряжение питания ниже допустимого уровня.
Прерывание – наиболее эффективный способ обмена с внешними устройствами. Как правило, все внешние устройства работают на порядок медленнее, чем МП, поэтому используя режим прерывания МП, может совместить процедуру обмена с ВУ с выполнением основной программы.
Процедура обработки прерывания очень похожа на процедуру выполнения подпрограммы, только переход к подпрограмме выполняется по специальной команде, а прерывание по внешнему сигналу, поступающему от внешнего устройства, и МП заранее не знает время прихода этого сигнала. Кроме того, МПС содержит не одно, а несколько устройств, которые способны вызвать прерывание. Для каждого устройства используется своя подпрограмма, потому необходим механизм, который позволяет определить, какое именно устройство требует прерывания основной программы. Существует два основных типа прерываний: радиальные и векторные. У векторных прерываний все устройства имеют один общий вход требования прерывания. Получив на этот вход сигнал, МП инициирует обращение ко всем устройствам, и получает по шине данных от устройства, вызвавшего прерывание, его уникальный номер - номер прерывания (адрес вектора прерывания). У радиальных прерываний каждый источник прерывания имеет отдельный вход и МП определяет источник прерывания по сигналу на этом входе. Радиальные прерывания организуются проще.
Требование прерывания – сигнал, сообщающий о необходимости прервать программу перейти на программу обработки прерывания.
Адрес возврата - адрес команды основной программы, к которой необходимо вернуться по завершении прерывания, он сохраняется в стеке.
Программа обработки прерывания (ПОП) – программа, которая должна быть выполнена после прерывания основной программы. Адрес этой программы указывается в векторе прерывания. ПОП заканчивается командой RETI – возврат из прерывания. По команде RETI из стека извлекается адрес возврата и происходит возврат к основной программе.
Приоритет прерывания – первоочередность обработки прерываний. Устройства с более высоким приоритетом, могут прервать выполнение ПОП с более низким приоритетом. Как правило, самый высокий приоритет имеет сигнал сброса МП.
Вектор прерывания – это ячейка (или несколько ячеек) в памяти программ, закрепленная за устройством прерывания. В эту ячейку записывается адрес начала ПОП данного устройства. Адрес ячейки называется адресом вектора прерывания или номером прерывания. Чем меньше адрес вектора, тем выше приоритет прерывания.
Таблица векторов – совокупность векторов всех устройств. Таблица векторов располагается в начале памяти программ.
Маскирование прерывания – запрет МК реагировать на прерывание. Маскирование может быть частным и глобальным, когда все прерывания запрещены. По умолчанию в МК все прерывания запрещены.
В режиме прерывания необходимо не забывать устанавливать стек, иначе адрес возврата будет потерян.
Рисунок 1 – Прерывание программы
Пример 1
Исследуйте структуру прерываний на примере фрагмента программы, в котором используется прерывание от внешнего устройства, подключенного к линии ввода pind,2.
Рисунок 2 – Логика прерывания программы от внешнего устройства int0
На рисунке 2 проиллюстрирована логика прерывания от внешнего устройства, подключенного к линии pind,2 микроконтроллера. Это прерывание носит имя int0 (interrupt – прерывание). Прерывание int0 имеет самый высокий приоритет, после прерывания по сбросу. За ним закреплен вектор с номером 0001. По сигналу прерывания МК прервет выполнение программы, запомнит адрес возврата в стеке, обратится к вектору и выполнит команду, записанную в него. В нашем примере в вектор записана команда rjmp prer – прыжок на строку программы, отмеченную этой меткой. Таким образом, программа обработки прерывания начинается с метки prer и заканчивается командой reti – возврат из прерывания. По команде reti МК извлечет из стека адрес возврата и вернется к выполнению основной программы.
.include "m8535def.inc" ;включение в программу файла описания имен
.org 0 ;вектор сброса
rjmp start
.org 0001 ;вектор int0
rjmp prer
.org $0020 ;начало основной программы
start:
;записываем адрес стека в указатель стека SP
ldi r16,$00
out sph,r16
ldi r16,$61
out spl,r16
;разрешаем прерывание от int0 (частное разрешение)
ldi r16,0b00000011
out mcucr,r16
;настраиваем уровень сигнала прерывания по фронту от 0 к 1
ldi r16,0b01000000
out gicr,r16
;глобальное разрешение прерывания
Sei
;очистим r0
clr r0
;фоновая команда, бесконечный цикл, мы ожидаем прерывания
loop:
rjmp loop
;программа обработки прерывания
.org $0030
prer:
inc r0
reti
Контрольные вопросы:
1 Назовите основные режимы работы микропроцессора
2 В чем суть программного режима. Как МП организует поочередное выполнение команд?
3 Как влияют на очередность выполнения команд команды перехода?
4 Что такое подпрограмма? С какой целью используются подпрограммы?
5 Объясните назначение стека в режиме вызова подпрограмм.
6 Что такое вложение подпрограмм?
7 Что является причиной прерывания программы. Чем прерывание отличается от вызова подпрограммы?
8 Объясните термины:
требование прерывания
адрес возврата
программа обработки прерывания
приоритет прерывания
вектор прерывания
таблица векторов
маскирование прерывания
Объясните логику работы МП в режиме прерывания программы
Объясните назначение и принцип работы стека в в режиме прерывания программы
Как инициировать прерывание int0 от внешнего устройства?
Рекомендуемая литература:
Ю.В. Новиков, П.К. Скоробогатов. Основы микропроцессорной техники. Курс лекций. М.: Интернет-Университет информационных технологий, 2003.-440с.
с. 28-33
Микропроцессорные системы. Под редакцией Д.В. Пузанкова. – СПб.: Политехника, 2002.-935с.: ил.
с. 21-27