- •Конспект лекций по дисциплине Микропроцессоры и микропроцессорные системы управления
- •Раздел 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 Система прерываний
Урок №42
2.13.2 Алгоритм обработки прерываний
Рисунок 1 - Алгоритм обработки прерываний
1,2 – сигнал требования прерывания вызовет установку флага прерывания в специальном регистре флагов. Установленный флаг прерывания сообщает о том, что прерывание не обслужено. Флаг будет сброшен после выполнения подпрограммы обработки прерывания
3 - завершается выполнение текущей программы и сохраняется в стеке адрес возврата
4 – проверяется наличие глобального разрешения прерывания в регистре состояния процессора sreg
5 – проверяется наличие индивидуального разрешения прерывания в регистре масок прерываний
6 - если прерываний несколько, определяется приоритет прерывания и обслуживается прерывание с наивысшим приоритетом
7 – в счетчик команд записывается адрес вектора прерывания устройства и происходит переход на подпрограмму обслуживания прерывания. При этом флаг глобального разрешения прерывания в регистре состояния процессора sreg сбрасывается, и все прерывания запрещаются. Чтобы обеспечить процесс вложения подпрограмм в подпрограммы обслуживания прерываний необходимо включать команду глобального разрешения прерывания sei.
8 – флаг прерывания сбрасывается, из стека извлекается адрес возврата и происходит возврат к основной программе. Вернувшись к основной программе, микроконтроллер восстанавливает флаг глобального разрешения прерывания.
Контрольные вопросы:
1 О чем сообщает флаг прерывания?
2 Что вызывает установку флага прерывания?
3 Когда флаг прерывания сбрасывается?
4 Что представляет собой флаг глобального разрешения прерывания, как он устанавливается?
5 Почему флаг глобального разрешения прерывания сбрасывается при выполнении подпрограммы и восстанавливается по ее завершению?
6 Что необходимо сделать, чтобы разрешить во время прерывания выполнение подпрограммы обслуживания прерывания с более высоким приоритетом (вложение прерываний?)
7 Как установить флаг глобального разрешения прерывания?
8 Представлены два фрагмента программ.
8.1 Определите, какие прерывания использованы во фрагментах и их приоритеты.
8.2 Найдите ПОП каждого прерывания, сравните их.
8.3 Объясните, есть ли разница в действии прерываний в первом и втором фрагменте и в чем она заключается?
Фрагмент 1 .org $002 rjmp opros .org $012 rjmp ind ;========== opros: in r0,portc reti ind: out portc,ro reti
|
Фрагмент 2 .org $002 rjmp opros .org $012 rjmp ind ;========== opros: sei in r0,portc reti ind: out portc,ro reti |
Урок №43
Внешние прерывания INT0, INT1
Внешние прерывания вызываются сигналами на внешних выводах МК:
INT0 |
PD.2 |
INT1 |
PD.3 |
INT2 |
PB.2 |
Уровень сигнала прерывания от внешних источников INT0, INT1 задается битами в регистре управления микроконтроллера MCUCR.
-
ISC01
ISC00
Вход INT0
0
0
Низкий уровень (лог.0)
0
1
1
0
Спадающий фронт
1
1
Нарастающий фронт
-
ISC11
ISC10
Вход INT1
0
0
Низкий уровень (лог.0)
0
1
1
0
Спадающий фронт
1
1
Нарастающий фронт
а) б)
Рисунок 2 – Уровни сигнал прерывания: а) спадающий фронт; б) нарастающий фронт
Прерывания по низкому уровню сигнала на входе действуют до тех пор, пока на входе действует низкий уровень (рисунок 3). Они не устанавливают флаг прерывания.
Рисунок 3
Разрешение прерываний от внешних источников устанавливается в регистре масок внешних прерываний GICR (GIMSK).
Контрольные вопросы:
1 Назовите входы внешних прерываний у МК ATmega8535
2 Какие уровни сигнала внешнего прерывания способны вызвать прерывание?
3 Как задать уровень сигнала прерывания INT0?
4 Чем отличается процедура обработки прерывания от сигналов разного уровня?
5 Ниже приведены 3 фрагмента программ обработки прерываний от INT0.
5.1 Какие уровни сигналов прерывания используются во фрагментах
5.2 Предположим ко входу прерывания INT0 подключена кнопка, которая при нажатии подает на вход сигнал лог.1. Проанализируйте действие каждого фрагмента и оцените содержимое регистра r0 после однократного нажатия – отпускания кнопки.
Фрагмент 1 .org $001 rjmp prer ;========== ldi r16,0b00000010 out mcucr,r16 ;========== loop: rjmp loop ;=========== prer: inc r0reti reti |
Фрагмент 2 .org $001 rjmp prer ;========== ldi r16,0b00000011 out mcucr,r16 ;======= loop: rjmp loop ;=========== prer: inc r0reti reti |
Фрагмент 3 .org $001 rjmp prer ;========== ldi r16,0b00000000 out mcucr,r16 ;========== loop: rjmp loop ;=========== prer: inc r0reti reti |
|
Урок №44
Примеры программ обслуживания прерывания от внешних устройств
Пример 1
Проанализируйте программу int_1.asm, демонстрирующую действие прерывания от внешнего устройства INT0.
Постановка задачи: В момент включения или сброса МК на индикаторе HG1 должен загореться символ «0». При замыкании контакта SB1(рисунок 4), подключенному ко входу INT0 (нарастающий фронт) должен загореться символ «5».
Рисунок 4
;============int_1.asm==========
.include "m8535def.inc" ;включение в программу файла описания имен
;==========таблица векторов=====
.org 0 ;вектор сброса
rjmp start
.org 0001 ;вектор int0
rjmp prer
;============основная программа====
.org $0020 ;начало основной программы
start:
;организуем стек
ldi r16,$00
out sph,r16
ldi r16,$61
out spl,r16
; настраиваем уровень сигнала прерывания по нарастающему фронту
ldi r16,0b00000011
out mcucr,r16
; разрешаем прерывание от int0 (частное разрешение)
ldi r16,0b01000000
out gicr,r16
;глобальное разрешение прерывания
Sei
ldi r16,$ff
out ddra,r16 ;настроить порт A на вывод
sbi ddrb,0 ;настроить на вывод линию PB.0
ldi r16,$с0 ;код символа «0»
out porta,r16 ;вывести код на выходы порта A
sbi portb,0 ;подключить общий анод индикатора ;к питанию
;фоновая команда, бесконечный цикл, мы ожидаем прерывания
loop:
rjmp loop
;=====подпрограмма обработки прерывания=====
prer:
ldi r16,$6d ;код символа «5»
out porta,r16 ;вывести код на выходы порта A
reti
Пример 2
Проанализируйте программу int_2.asm. Определите:
источники прерывания и их векторы;
найдите фрагмент программы, в котором делается частное разрешение прерывания;
найдите фрагмент программы, в котором делается глобальное разрешение прерывания;
определите уровень сигнала прерывания;
Укажите, как
запретить прерывание;
заглушить прерывание;
изменить уровень сигнала прерывания
;==========int_2.asm======
.include "m8535def.inc"
.org 0
rjmp start
.org $001
rjmp prer
;==========
start:
ldi r16,$61
out spl,r16
ldi r16,$00
out sph,r16
ldi r16,0b00000010
out mcucr,r16
ldi r16,0b01000000
out gicr,r16
sei
loop:
rjmp loop
;===========
prer:
inc r0
reti
Пример 3
Проанализируйте программу, написанную для схемы, изображенной на рисунке 4. Сделайте комментарий к командам. Объясните:
что происходит со светодиодом по сигналу «Сброс» и в момент включения питания МК?;
что является источником прерывания?;
как инициировать прерывание программы?;
что происходит со светодиодом в подпрограмме обслуживания прерывания?
как изменится действие программы, если команду, выделенную подчеркиванием заменить на команду ldi r16,0b00000000
.include "m8535def.inc"
.org 0
rjmp start
.org $001
rjmp prer
;==========
start:
sbi ddrc,0
sbi portc,0
ldi r16,$61
out spl,r16
ldi r16,$00
out sph,r16
ldi r16,0b00000011
out mcucr,r16
ldi r16,0b01000000
out gicr,r16
sei
loop:
rjmp loop
;===========
prer:
sbis portc,0
rjmp ind
cbi portc,0
reti
ind:
sbi portc,0
reti