47600 (Микроконтроллеры AVR), страница 2

2016-07-30СтудИзба

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

Документ из архива "Микроконтроллеры AVR", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "47600"

Текст 2 страницы из документа "47600"

В микроконтроллерах AVR для обозначения результата выполнения операций используются восемь различных флагов:

  • разряд 0 (С) – флаг переноса (Carry); указывает на переполнение (перенос) после выполнения арифметической или логической операции;

  • разряд 1 (Z) – нулевой флаг (Zero); всегда устанавливается, если результат арифметической или логической операции равен нулю; сбрасывается, если результат операции не равен нулю;

  • разряд 2 (N) – флаг отрицательного результата (Negative); указывает на отрицательный результат после выполнения арифметической или логической операции;

  • разряд 3 (V) – флаг переполнения при вычислениях в дополнительных кодах (Two's complement Overflow); поддерживает арифметику дополнительных кодов (арифметика кодов с дополнением до двух); устанавливается, если при выполнении соответствующей операции происходит переполнение, в противном случае – сбрасывается;

  • разряд 4 (S) – флаг знака (Sign); S = NV – связь флагов N и V с помощью операции "Исключающее ИЛИ"; флаг знака может применяться для определения фактического результата арифметической операции;

  • разряд 5 (Н) – флаг половинного переноса (Half Carry); указывает на переполнение в младшем полубайте (разряды 0...3 байта данных); устанавливается, когда происходит перенос из младшего полубайта в старший, в противном случае – сбрасывается;

  • разряд 6 (Т) – флаг копирования (Transfer or Copy); предназначен для свободного применения программистом (например, в качестве буфера);

  • разряд 7 (I) – общее разрешение прерываний (Global Interrupt); если прерывания, как таковые, должны быть разрешены, то должен быть установлен разряд 7 регистра состояния (в лог. 1).

    1. Внутренняя и внешняя память SRAM микроконтроллеров AVR

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

Если объема внутренней памяти SRAM недостаточно, то в некоторых микроконтроллерах AVR его можно увеличить до 64 Кбайт посредством подключения внешних блоков памяти. Для этого в регистре MCUCR (адрес в области ввода/вывода – $35, адрес в SRAM – $55) следует установить в лог. 1 разряд SRE (разряд 7). После установки этого разряда порты А и С будут выступать в качестве шины адреса и шины данных, а выводы 7 и 6 порта D – в качестве управляющих сигналов чтения /RD и, соответственно, записи /WR для внешней памяти SRAM), независимо от того, какие направления передачи данных установлены для этих портов в соответствующих регистрах направления передачи данных.

    1. Стек

Стек – это особая область памяти данных, используемая процессором для временного хранения адресов возврата из подпрограмм, промежуточных результатов вычислений и др. В микроконтроллерах PIC и некоторых микроконтроллерах AVR стек реализован аппаратно – для этого выделено отдельное запоминающее устройство фиксированного объема в несколько (или несколько десятков) байт. Для микроконтроллеров AVR компиляторы языка С (например, при обращении к подпрограммам) могут также создавать один или более стеков программно, начиная с верхних адресов области SRAM.

Стек действует по принципу LIFO – "Last In, First Out", что означает "последним вошел, первым вышел". Это означает, что новые данные вначале помещаются на вершину (первый уровень) стека, а затем, с поступлением следующих данных, "проталкиваются" на его нижние уровни. Извлечение из стека происходит в обратном порядке: вначале считываются данные, помещенные последними на вершину, после чего данные, размещенные на нижних уровнях, как бы "выталкиваются" на один уровень вверх. Ячейка памяти, которая является в данный момент вершиной стека, адресуется указателем стека (для AVR – регистровой парой SPL, SPH).

Поскольку область памяти данных, отводимая для программного стека, ограничивается только объемом памяти SRAM, при написании программ следует следить за тем, чтобы стек не становился слишком большим, затирая полезные данные.

    1. Память программ

Память программ как в микроконтроллерах AVR, так и в микроконтроллерах PIC реализована по технологии Flash–EPROM, которая подразумевает программирование пользователем и вытирание электрическим способом. Размер этой памяти варьируется в зависимости от микроконтроллера и обычно составляет несколько Кбайт командных слов.

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

Адресация команд в памяти программ реализуется с помощью специального регистра – счетчика команд, разрядность которого определяет допустимый размер этой памяти. Разрядность ячеек памяти программ, в зависимости от типа микроконтроллера, может составлять 14…16 бит.

Кроме того, следует отметить, что в микроконтроллерах PIC в первых ячейках памяти программ (начиная с адреса 0x0000) содержатся векторы (адреса перехода) сброса и прерываний.

    1. Память EEPROM микроконтроллеров AVR

Многие микроконтроллеры AVR оборудованы встроенной памятью EEPROM – электрически перезаписываемой энергонезависимой памятью. Хотя эта память и допускает запись, она редко используется для хранения программных переменных, поскольку, во-первых, медленнодействующая, и, во-вторых, имеет ограниченный (хотя и довольно большой) цикл перезаписи.

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

В отличие от флэш-памяти, для записи/чтения памяти EEPROM нет необходимости в специальном программаторе – эти операции доступны программно и допускают побайтную передачу данных с помощью регистра управления EECR, регистра данных EEDR и регистровой пары EEARL, EEARH, определяющей адрес ячейки памяти (см. табл. 1.1).

Запись байта данных в память EEPROM осуществляется по следующей схеме:

  • удостовериться, что в разряде EEWE (разряд 1) регистра EECR находится лог. 0 (разрешение записи);

  • записать адрес ячейки EEPROM в регистр EEAR;

  • записать байт данных в регистр EEDR;

  • установить в лог. 1 разряд EEMWE (разряд 2) регистра EECR;

  • установить в лог. 1 разряд ЕЕWE (разряд 1) регистра EECR, чтобы активизировать процесс записи.

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

Чтение байта данных из памяти EEPROM осуществляется по такой схеме:

  • записать адрес ячейки EEPROM в регистр EEAR;

  • установить в лог. 1 разряд EERE (разряд 0) регистра EECR, чтобы активизировать процесс чтения;

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

Перед началом операции чтения программа пользователя должна постоянно опрашивать разряд EEWE и ждать появления лог. 0. Если во время программирования памяти EEPROM в соответствующий регистр будет записан новый адрес или данные, то еще продолжающийся процесс программирования будет прерван, и результат будет неопределенным!

  1. Обработка прерываний

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

Прерывания бывают внутренними и внешними. Источниками внутреннего прерывания являются встроенные модули микроконтроллера (например, таймер/счетчик или сторожевой таймер). Внешние прерывания вызываются сбросом (сигнал на выводе RESET) или сигналами предустановленного уровня на выводах INT. К примеру, в микроконтроллерах AVR за характер сигналов на выводах INT0/INT1, вызывающих прерывание, определяется с помощью разрядов регистра управления MCUCR: ISC00 (разряд 0), ISC01 (разряд 1) – для входа INT0; ISC 10 (разряд 2), ISC11 (разряд 3) – для входа INT1 (табл. 3.1 и табл. 3.2).

Таблица 3.1. Выбор способа активизации прерывания по входу INT0

Разряд ISC01

Разряд 1SC00

Описание

0

0

Прерывание вызывается по уровню лог. 0 на входе INT0

1

0

Прерывание вызывается по ниспадающему фронту сигнала INT0

1

1

Прерывание вызывается по нарастающему фронту сигнала INT0

Таблица 3.2. Выбор способа активизации прерывания по входу INT1

Разряд ISC11

Разряд ISC10

Описание

0

0

Прерывание вызывается по уровню лог. 0 на входе INT1

1

0

Прерывание вызывается по нарастающему фронту сигнала INT1

1

1

Прерывание вызывается по ниспадающему фронту сигнала INT1

В ряде микроконтроллеров PIC выбор фронта для активизации прерывания по входу INT определяется состоянием разряда 6 регистра OPTION: лог. 1 в этом разряде соответствует прерывание по нарастающему, а лог. 0 – по ниспадающему фронту сигнала. Для установки этого разряда в языке С обычно используют специальные функции.

В микроконтроллерах AVR всем прерываниям, включая сброс, поставлен в соответствие собственный вектор прерывания – адрес в начальной области памяти программ, по которому компилятор размещает команду перехода к подпрограмме обработки прерывания. Перечень векторов прерывания в некоторых моделях микроконтроллеров AVR может выглядеть следующим образом (табл. 3.3). В микроконтроллерах AVR все прерывания имеют одинаковый приоритет, и в случае одновременного возникновения двух прерываний первым обрабатывается прерывание с меньшим номером вектора.

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

Адрес в

памяти

программ

Источник прерывания

Описание

0x0000

RESET

Сигнал сброса

0x0001

INT0

Внешний запрос на прерывание по входу INT0

0x0002

INT1

Внешний запрос на прерывание по входу INT1

0x0003

Т/С1

Захват по таймеру/счетчику Т/С1

0x0004

Т/С1

Совпадение с регистром сравнения А таймера Т/С1

0x0005

Т/С1

Совпадение с регистром сравнения В таймера Т/С1

0x0006

Т/С1

Переполнение таймера/счетчика Т/С1

0x0007

Т/С0

Переполнение таймера/счетчика Т/С0

0x0008

SPI

Завершение передачи данных по интерфейсу SPI

0x0009

UART

Прием байта приемопередатчиком UART завершен

0х000А

UART

Регистр данных приемопередатчика UART пуст

0x000В

UART

Передача данных приемопередатчиком UART завершена

0х000С

ANA_COMP

Прерывание от аналогового компаратора

В микроконтроллерах PIC источники прерывания, кроме RESET, не рассматриваются в отдельности, им обычно соответствует один вектор, а в некоторых моделях – два вектора для прерываний с различной приоритетностью. Определять, какое именно прерывание требует обслуживания, – задача программиста, и многие компиляторы с языка С предоставляют для этой цели готовые функции, освобождающие от необходимости самому "вычислять" источник прерывания.

В момент возникновения прерывания в стек помещается адрес возврата – адрес команды, которая должна быть выполнена первой после выхода из подпрограммы обработки прерывания. В результате выполнения последней ассемблерной команды подпрограммы обработки прерывания (для микроконтроллеров AVR – это команда reti, а для микроконтроллеров PIC – retfie) адрес возврата извлекается из стека в счетчик команд, и выполнение программы продолжается.

    1. Управление прерываниями в микроконтроллерах AVR

В микроконтроллерах AVR за управление прерываниями отвечают, главным образом, четыре регистра:

  • GIMSK (General Interrupt Mask Register) – разрешает или запрещает внешние прерывания по входу INT0/INT1;

  • GIFR (General Interrupt Flag Register) – регистр флагов внешних прерываний;

  • TIMSK (Timer/Counter Interrupt Mask Register) – регистр маскирования прерываний от таймера/счетчика Т/С0 и Т/С1;

  • TIFR (Timer/Counter Interrupt Flag Register) – регистр флагов прерываний от таймеров/счетчиков.

О состоянии прерывания сигнализирует соответствующий флаг, который устанавливается или сбрасывается в регистре флагов. Даже если в регистре маски прерываний установлен соответствующий отдельный разряд разрешения прерывания, то прерывания могут активизироваться только тогда, когда в регистре состояния SREG установлен разряд общего разрешения прерываний I (разряд 7). Если это имеет место, и наступает прерывание, то выполнение программы ответвляется по соответствующему адресу (см. табл. 1.4) и разряд общего разрешения прерываний I в регистре SREG сбрасывается в состояние лог. 0, блокируя тем самым последующие прерывания. Если требуется прервать подпрограмму другим прерыванием, то после входа в подпрограмму обработки прерывания программа пользователя должна установить флаг I в лог. 1.

Вместе с входом в подпрограмму обработки прерывания аппаратно сбрасывается также и соответствующий флаг, вызвавший прерывание. Некоторые флаги прерываний могут быть сброшены самим пользователем посредством установки соответствующего флага в лог. 1.

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