Лабораторная работа №2 (Методичка - Лабораторная работа №2)

2017-12-27СтудИзба

Описание файла

Файл "Лабораторная работа №2" внутри архива находится в папке "Методичка - Лабораторная работа №2". Документ из архива "Методичка - Лабораторная работа №2", который расположен в категории "". Всё это находится в предмете "элементы управления в асоиу" из 7 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "элементы управления в асоиу" в общих файлах.

Онлайн просмотр документа "Лабораторная работа №2"

Текст из документа "Лабораторная работа №2"

Московский государственный технический университет им. Н.Э. Баумана

Факультет информатики и систем управления

Автоматизированные системы обработки информации и управления



Адейкин С.

Романов А.

Романов П.





Методические указания

«Введение в программирование микроконтроллеров AVR»

Лабораторная работа №2













Москва 2010г.



Цель работы

Получить общие сведения о системе прерываний и таймерах.

Введение

В прошлой лабораторной работе вы сделали вывод раз в секунду на порт какого-то числа. Что бы обеспечить секундный интервал, необходимо было точно посчитать, сколько команд требуется выполнить при данной тактовой частоте микроконтроллеру, что бы это заняло ровно 1 секунду. Хотя для этой цели и существуют специальные программы, для выполнения какого-то действия с заданной периодичностью лучше использовать таймеры. Что бы использовать таймеры, надо сначала познакомится с системой прерываний.

Прерывания

Прерывание нарушает нормальный ход выполнения программы для выполнения какой-либо задачи, определяемой внешними или внутренними событиями МК. При возникновении прерывания МК сохраняет в стеке содержимое счетчика команд и загружает в него адрес соответствующего вектора прерывания. По этому адресу обычно находится команда безусловного перехода к подпрограмме обработки прерывания. Последней командой этой подпрограммы должна быть команда reti – она обеспечит возврат из подпрограммы, разрешение прерываний и восстановление счетчика команд.

Таблица векторов прерываний

МК имеет развитую систему приоритетных прерываний. Все возможные прерывания перечислены в таблице прерываний, которая располагается в младших адресах памяти программ. Причем, чем меньше адрес вектора, тем выше приоритет соответствующего прерывания. Размер ьаблицы векторов прерываний зависит от объема памяти программ и составляет 2 байта для ATmega16. Это означает, что для перехода к подпрограмме обработки прерывания необходимо использовать команду jmp, а использование rjmp недопустимо (вообще говоря это возможно, но проще использовать команду jmp).

Подпрограмма обработки прерывания

При в ходе в подпрограмму обработки прерывания флаг I регистра SREG сбрасывается, запрещая прерывания, но разработчик может разрешить их, использую соответствующую команду. Надо помнить, что в подпрограмме обработки прерывания следует сохранять в стеке используемые в ней регистры, в том числе и регистр SREG. Если, например, у вас в программе складывается два числа, результат записывается в r16, а потом из него вычитается третье. Предположим, в обработчике прерывания не сохраняются регистры. Если прерывание возникнет до сложения этих двух чисел, все прекрасно, все будет работать как надо. Но если оно возникнет уже после их сложения, но до вычитания третьего, а в обработчике используется регистр r16, то после выхода из прерывания там будет мусор, а никак не результат сложения. Так могут возникнуть крайне трудноуловимые баги, которые могут проявляться раз в 100 лет.

Два типа прерываний

Все прерывания можно разделить на два типа:

  1. Прерывания «с флагом»

  2. Прерывания «без флага»

При возникновении прерывания первого типа в специальном регистре устанавливается специальный флаг. Если прерывания не разрешены, он так и останется установленным. Если же прерывания разрешены, произойдет переход по соответствующему адресу в таблице векторов прерываний, и флаг аппаратно сбросится. Из этой схемы вытекает вывод: если на момент возникновения прерывания первого типа они были запрещены, то флаг так и останется установленным. Когда же прерывания будут разрешены, вызовутся обработчики этих прерывания в соответствии с их приоритетом.

Прерывания второго типа просто возникают, пока есть условия, необходимые для возникновения прерывания. Когда условия изменятся, прерывание возникать не будет. Отсюда следует, что, если на момент возникновения прерывания они были запрещены, а потом прерывания разрешили, то нет возможности узнать, было прерывание или не было.

Пример программы с прерываниями

.include "m16def.inc"

jmp MAIN

jmp NO_INTERRUPT // INT0

jmp NO_INTERRUPT // INT2

jmp NO_INTERRUPT // TIMER2 COMP

jmp NO_INTERRUPT // TIMER2 OVF

jmp NO_INTERRUPT // TIMER1 CAPT

jmp NO_INTERRUPT // TIMER1 COMP1

jmp NO_INTERRUPT // TIMER1 COMPB

jmp NO_INTERRUPT // TIMER1 OVF

jmp NO_INTERRUPT // TIMER0 OVF

jmp NO_INTERRUPT // SPI, STC

jmp NO_INTERRUPT // USART, RXC

jmp NO_INTERRUPT // USART, UDRE

jmp NO_INTERRUPT // USART, TXC

jmp NO_INTERRUPT // ADC

jmp NO_INTERRUPT // EE_RDY

jmp NO_INTERRUPT // ANA_COMP

jmp NO_INTERRUPT // TWI

jmp NO_INTERRUPT // INT2

jmp NO_INTERRUPT // TIMER0 COMP

jmp NO_INTERRUPT // SPM_RDY

// Основная программа

MAIN:

// Инициализируем стек

ldi r16, low(RAMEND)

out SPL, r16

ldi r16, high(RAMEND)

out SPH, r16

// Разрешаем прерывания

sei

// Делаем что-то

ser r16

out DDRA, r16

// и т.д. ...

LOOP:

rjmp LOOP

// Обработчики прерываний

NO_INTERRUPT: reti

Таймеры

МК ATmega16 имеет в своем составе два 8-разрядных таймера – T0 и T2 и одни 16-разрядный – T1. Кроме реализации функций таймера, они могут работать и как счетчики внешних сигналов, а таймер Т1 – запоминать свое состояние по внешнему сигналу.

Рис 1. Структурная схема таймера T0 (упрощенная)

Таймеры и выводы

Каждый таймер использует несколько выводов МК. Эти выводы перечислены в справочнике. Не забывайте, что при использовании этих выводов надо соответствующе их настроить – если это выход, то на выход, а если вход – то на вход.

Если надо по таймеру просто мигать лампочкой, то достаточно просто подключить её к соответствующему выводу и настроить таймер на изменение состояние этого вывода. Причем нельзя настроить таймер на произвольный вывод – он заранее предопределен и у каждого таймера он свой. Если надо подключить две лампочки, причем что бы вторая мигала инверсно первой – можно настроить второй таймер, а можно использовать один таймер и его систему прерываний.

Прерывания таймера

Каждый таймер может генерировать несколько прерываний при возникновении соответствующих условий: это может быть и переполнение счетчика, и совпадение с регистром сравнения. Для того, что бы использовать эти прерывания, надо:

  • Глобально разрешить прерывания

  • Разрешить конкретное прерывание конкретного таймера

Для управления прерываниями от таймеров используется регистр TIMSK. Описание разрядов этого регистра приведено в справочнике. Для разрешения прерывания необходимо просто установить в 1 соответствующий разряд этого регистра.

Для индикации наступления прерывания от таймера предназначен регистр TIFR. Описание его разрядов приведено в справочнике. При наступлении прерывания соответствующий разряд этого регистра устанавливается в 1, а при запуске подпрограммы обработки прерывания – аппаратно сбрасывается в 0.

Но разрешить прерывания (или не разрешать их, если вы используете вывод МК) мало, таймер работать не будет – надо еще сконфигурировать его.

Настройка таймера

Каждому таймеру соответствует несколько регистров – как минимум, регистр управление и счетный регистр, а в большинстве случаев, еще и регистр сравнения.

Рассмотрим настройку таймера на примере таймера Т0 – как вы помните, это 8-разрядный таймер. Этому таймеру соответствует три регистра: TCNT0 – счетный регистр, TCCR0 – регистр управления и OCR0 – регистр сравнения.

После подачи напряжения в счетном регистре находится нулевое значение. По каждому тактовому сигналу значение этого регистра может инкрементироваться, декрементироваться или сбрасываться в зависимости от режима работы таймера. Счетный регистр доступен как для записи, так и для чтения, но любая операция записи в него блокирует работу блока сравнения на время одного периода тактового сигнала таймера. По переполнению этого регистра могут вызываться прерывания, если они, конечно, разрешены.

Во время работы таймера в каждом машинном цикле происходит сравнение содержимого счетного регистра и регистра сравнения. В случае их равенства может сгенерироваться прерывание.

Регистр TCCR0 предназначен для управления таймером. Описание этого регистра при ведено в справочнике. Разряды этого регистра позволяют выбрать режим его работы, режим работы блока сравнения и выбрать источник тактового сигнала.

Режимы работы таймера

Таймер может работать в четырех режимах:

  • Нормальный режим

  • Сброс при совпадении

  • Быстродействующий ШИМ

  • ШИМ с точной фазой

Нормальный режим. В этом режиме таймер функционирует как обычный суммирующий счетчик. ПО каждому импульсу тактового сигнала происходит инкремент счетного регистра. При достижении 0xFF возникает переполнение и счет продолжается с 0x00. В этом же такте устанавливается флаг TOV0. При равенстве счетного регистра и регистре сравнения устанавливается флаг прерывания OCF0, и если разрешено прерывание, оно генерируется. Наряду с этим может изменяться и состояние вывода OC0 микроконтроллера.

Сброс при совпадении. Этот режим похож на предыдущий, но максимально возможное значение счетного регистра определяется регистром сравнения. После достижения заданной величины счет продолжается со значения 0x00.

Источник тактового сигнала

Регистр управления определяет и источник тактового сигнала таймера. Им может быть или системный тактовый сигнал (clkI/O), или масштабируемый системный тактовый сигнал (clkI/O/n), или внешний сигнал, поступающий на вход Т0 микроконтроллера. Масштабирование системного тактового сигнала позволяет легко регулировать частоту возникновения прерывания от таймера.

Режим работы блока сравнения

Регистр управления определяет также поведение вывода OC0 при наступлении события «Совпадение». Данный вывод может или бездействовать, или инвертироваться, или устанавливаться/сбрасываться при наступлении этого события.

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

  • Выбрать режим работы таймера

  • Определить, нужно ли изменение вывода при событии «Совпадение»

  • Выбрать источник тактового сигнала

  • Если это необходимо, разрешить прерывания

Выполнение работы

  1. Ознакомится с методическими указаниями.

  2. Написать программу вывода определенного значения на порт B раз в секунду. Значение формируется так, как указанно в таблице 1. Предусмотреть кнопки управления – СТОП, СТАРТ, ПАУЗА. Внимание! Вариант в этой таблице – не ваш вариант! Номер варианта для выполнения надо узнать у преподавателя!





Таблица 1. Варианты формирования значений для вывода.

Формируется как…

1

Инкрементирующий счетчик

2

Декрементрирующий счетчик

3

Циклический сдвиг влево единицы

4

Циклический сдвиг вправо двойки

5

Инверсное мигание – 10101010 -> 01010101

6

Случайное число

7

Как в «Рыцаре дорог»

8

Зажигаются последовательные 0..n светодиодов, где n – случайное число, каждый раз новое.

9

Два огонька летят навстречу друг другу

10

Два огонька летят из одной точки в разные стороны

11

Срез расходящейся волны – 2 огонька на одну сторону

12

Срез сходящейся волны – 2 огонька на одну сторону

13

Использовать 2 порта для пункта 7, но значения должны сходиться к центру

14

Использовать 2 порта для пункта 7, но значения должны расходиться из центра

15

16-битный инкрементирующий счетчик

16

16-битный декрементирующий счетчик

17

Циклический сдвиг влево/вправо единицы, направление сдвига зависит от состояния какого-либо вывода.





Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5140
Авторов
на СтудИзбе
441
Средний доход
с одного платного файла
Обучение Подробнее