Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа ’1 ~ Система виртуального моделирования электронных устройств Proteus

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 25.11.2024

Донбасский государственный технический университет

Кафедра электронных систем

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

к выполнению лабораторных работ

по дисциплине

«Микропроцессоры и микропроцессорные системы»

Составитель: ас. Ермоленко Е. А.

г.Алчевск, 2011

СОДЕРЖАНИЕ

Лабораторная работа №1 – Система виртуального моделирования электронных устройств Proteus. Ознакомление с лабораторным стендом 3

Лабораторная работа №2 – Работа с портами ввода-вывода микроконтроллеров AVR. Использование AVR-Assembler 16

Лабораторная работа №3 – Использование внешних прерываний в микропроцессорных системах на примере микроконтроллера AVR  36

Лабораторная работа №4 – Применение таймеров в микропроцессорных системах. Изучение 8-разрядного таймера/счетчика микроконтроллера AVR ATmega8  47

ПРИЛОЖЕНИЕ А – Расположение выводов микроконтроллера AVR ATMega8 58

ПРИЛОЖЕНИЕ Б – Общие характеристики микросхемы HEF4511 59

ПРИЛОЖЕНИЕ В – Характеристики семисегментного индикатора
BS-C535RD 61

ПРИЛОЖЕНИЕ Г – Система команд микроконтроллеров AVR 62

ПРИЛОЖЕНИЕ Д – Адреса векторов прерываний микроконтроллера ATmega8  70


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

Система виртуального моделирования
электронных устройств
Proteus.
ознакомление с лабораторным стендом

Цель работы: 

  1.  Ознакомиться со средой автоматизированного проектирования (САПР) Proteus, изучить общие принципы работы со средой; ознакомиться с основными инструментами программы, необходимыми для проектирования микропроцессорных систем.
  2.  Ознакомиться с лабораторным стендом; научиться собирать схемы с использованием стенда; освоить методику записи программ в микроконтроллеры семейства AVR.

1 Теоретические сведения

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

Отличительной чертой пакета Proteus является возможность моделирования работы программируемых устройств: микроконтроллеров, микропроцессоров, цифровых сигнальных процессоров и пр.

Среди преимуществ среды Proteus перед другими САПР электронных устройств можно выделить следующие:

  •  наглядность процессов, протекающих в модели устройства;
  •  возможность моделирования работы широкого спектра микроконтроллеров и микропроцессоров (AVR, 8051, PIC, ARM, Motorola);
  •  развитые средства отладки микропрограмм.

Proteus состоит из двух самостоятельных программ: ARES (трассировка печатных плат) и ISIS (создание электронных схем), которая будет использоваться в лабораторном практикуме дисциплины.

  1.  Основные элементы главного окна программы

После запуска программы Proteus ISIS появляется основное окно (рис. 1.1). Самое большое пространство в нем отведено под окно редактирования, в котором происходят все основные процессы создания, редактирования и отладки схемы устройства.

Рисунок 1.1 – Главное окно программы

В левом верхнем углу расположено окно предварительного просмотра (рис. 1.2), с помощью которого можно перемещаться по окну редактирования.

Рисунок 1.2 – Окно предварительного просмотра

Щелкая левой кнопкой мыши по окну предварительного просмотра, можно перемещать окно редактирования по схеме. Увеличивать и уменьшать масштаб схемы в окне можно кнопками F6, F7 соответственно или колесом мыши, F5 центрирует схему в окне, а F8 подгоняет масштаб схемы под окно редактирования.

Под окном предварительного просмотра находится список объектов (компоненты, символы и другие элементы). Выделенный в этом списке объект отображается в окне предварительного просмотра.

Все функции Proteus ISIS доступны через главное меню программы и панели инструментов, расположенные в верхней и левой части окна (горизонтально и вертикально соответственно). Рассмотрим основные из них.

Рисунок 1.3 – Панель инструментов

1 – Инструменты работы с файлами (создать, открыть, сохранить, печать)

2 – Инструменты позиционирования (обновить изображение, включить/выключить сетку, установить начало координат, центрировать, изменить масштаб)

3 – Инструменты стандартных команд (отменить, повторить, вырезать, копировать, вставить из буфера обмена)

4 – Инструменты групповых операций (копирование выделенного блока, перемещение блока, поворот и удаление блока)

Рассмотрим вертикальную панель инструментов

– режим выбора, позволяет выделять компоненты на схеме;

– режим размещения компонентов на схеме;

– инструмент расстановки точек соединения;

– инструмент расстановки меток соединения (необходим при работе с шиной);

– инструмент рисования шины;

– режим размещения на схеме терминальных соединений (таких как питание, заземление, вход/выход схемы);

– инструменты построения различных диаграмм (АЧХ, ФЧХ, спектр сигнала, анализ Фурье и пр.);

– инструмент выбора генераторов сигнала;

– инструменты размещения пробников сигнала – щупы напряжения и тока (позволяют наблюдать напряжение и ток в любой точке схемы);

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

Одними из основных элементов программы также являются кнопки управления процессом симулирования, расположенные в нижней части главного окна (рис. 1.4): запуск, пошаговый режим, пауза, стоп.

Рисунок 1.4 – Кнопки управления процессом симулирования

После запуска процесса симулирования ISIS Proteus имитирует работу собранной схемы и виртуальных приборов. В режиме симулирования изменения схемы невозможны.

  1.  Размещение электронных компонентов

Все электронные компоненты, доступные в программе, находятся в библиотеке компонентов. Для того чтобы открыть библиотеку, необходимо перейти в режим и нажать кнопку «P» (Pick) в списке объектов (рис. 1.5).

Рисунок 1.5 – Открытие библиотеки компонентов

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

Рисунок 1.6 – Библиотека компонентов

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

1.3 Лабораторный стенд

Основой лабораторного стенда является беспаечная макетная плата, внешний вид которой представлен на рисунке 1.7. Плата представляет собой набор контактных отверстий для установки полупроводниковых приборов,  микросхем, проводников и пр. Для удобства контактные отверстия расположены со стандартным интервалом 2.54 мм и соединены между собой определенным образом. На макетной плате реализованы отдельные линии питания и земли (обозначены красным и синим цветом соответственно). Остальные контактные отверстия сгруппированы в четыре независимых поля. В пределах одного поля контакты под каждым номером соединены вертикально. Порядок соединения контактов показан на рис. 1.7 черными линиями.

Рисунок 1.7 – Внешний вид макетной платы

2 Самостоятельная подготовка

  1.  Проработать раздел 1 «Теоретические сведения» к лабораторной работе.
  2.  Выяснить назначение микросхемы HEF4511 и принцип работы семисегментного индикатора BS-C535RD.
  3.  Подготовить бланк отчета к лабораторной работе. Отчет должен содержать фамилию и группу студента, название, цель и порядок выполнения работы, а также документацию на используемые в работе микросхемы и семисегментный индикатор (см. приложения А, Б, В).


3 Порядок выполнения работы

  1.  Открыть проект «Samples/Interactive Simulation/Animated Circuits/Basic02.dsn».
    1.  Запустить процесс моделирования и пронаблюдать работу схемы. Изменяя сопротивление реостата, пронаблюдать изменение работы лампы накаливания.
    2.  Остановить процесс моделирования и изменить схему, добавив в нее амперметр (DC Ammeter) и вольтметр (DC Voltmeter) для наблюдения тока, протекающего в цепи лампы и напряжения на лампе. Для добавления амперметра и вольтметра использовать режим «Виртуальные инструменты». Показания амперметра и вольтметра зафиксировать в отчете.
  2.  Открыть проект «Samples/Interactive Simulation/Animated Circuits/Basic06.dsn».
    1.  Запустить процесс моделирования и пронаблюдать работу схемы. Выяснить, на что влияет изменение положения ключа и изменение сопротивления резистора.
    2.  Остановить процесс моделирования и изменить схему, расположив в рабочей области виртуальный прибор Signal Generator. Вывод «+» генератора подключить к «+» батареи, вывод «-» – к «-» батареи соответственно, после чего удалить батарею из схемы.
    3.  Запустить процесс моделирования. В появившемся окне настройки генератора установить частоту (Frequency) 0.1Hz, диапазон амплитуды (Amplitude Range) 1V, уровень напряжения (Level) – 12V. Пронаблюдать работу схемы, устанавливая различные формы сигнала (кнопки Waveform, Polarity). Убедиться, что форма сигнала влияет на поведение двигателя.
  3.  Открыть проект «Samples/Interactive Simulation/Animated Circuits/Basic07.dsn».
    1.  Запустить процесс моделирования и пронаблюдать работу схемы, изменяя сопротивление реостата. С помощью виртуального прибора DC Voltmeter выяснить, при каком напряжении на предохранителе происходит его обрыв. Для того чтобы успеть зафиксировать напряжение в момент обрыва, целесообразно использовать пошаговый режим моделирования ().
  4.  Создать новый проект и собрать схему, указанную на рис. 1.8.
    1.  Найти в библиотеке и добавить в список объектов следующие компоненты: микроконтроллер Atmega8, резистор RES, индикатор 7SEG-COM-CATHODE, ключ SW-SPST, микросхему-драйвер 4511.
    2.  Разместить компоненты на рабочем поле, также добавить на рабочее поле линию питания (режим «Терминал» , элемент Power) и заземления (элемент Ground).
    3.  Изменить свойства компонентов (выделить компонент правой кнопкой мыши, «Правка свойств» или Ctrl-E): установить сопротивление резисторов в соответствие со схемой (поле «Resistance» в окне свойств).
    4.  Соединить размещенные компоненты согласно схеме, изображенной на рис. 1.8.

Рисунок 1.8 – Принципиальная схема последовательного счетчика

  1.  Далее необходимо запрограммировать микроконтроллер. Для этого в меню «Исходник» выбрать пункт «Добавить/удалить файлы исходника». В появившемся окне установить инструмент генерации кода – «AVRASM2», в поле «Имя файла исходника» нажать кнопку «Новый» и написать имя файла-исходника «LW1.asm». На вопрос о создании файла ответить «Да» и закрыть окно. Таким образом, микроконтроллеру указано, какую программу необходимо выполнять.
    1.  Для того чтобы набрать текст программы, необходимо из пункта меню «Исходник» выбрать файл «LW1.asm», появится текстовый редактор для редактирования файла-исходника.

  1.  
    Набрать текст программы, указанный ниже:

  1.  Сохранить исходник, закрыть текстовый редактор и запустить процесс моделирования в Proteus ISIS. Протестировать работу схемы.
  2.  Собрать схему, приведенную на рисунке 1.8, на лабораторном стенде.
    1.  С целью упрощения в среде Proteus не отображаются выводы питания и земли у микросхем. Во время моделирования все микросхемы по умолчанию считаются запитанными. На практике же для работы микроконтроллера ATMega8 и микросхемы-драйвера HEF4511 необходимо подвести к ним линии питания и земли. Вывод питания микросхемы, как правило, обозначается как «VCC», вывод земли – как «GND». Расположение этих выводов всегда приводится в документации микросхемы. Маркировка выводов микроконтроллера ATMega8 приведена в приложении А, микросхемы HEF4511 – в приложении Б.
    2.  Для правильного подключения семисегментного индикатора необходимо установить, под какими номерами выводы, отвечающие за каждый из сегментов A-G, а также общий вывод земли. Маркировка выводов семисегментного индикатора BS-C535RD, используемого в стенде, приведена в приложении В.
  3.  Запрограммировать микроконтроллер и пронаблюдать работу схемы на стенде.
    1.  Посредством USB-кабеля подключить программатор к компьютеру.
    2.  Для подключения программатора к микроконтроллеру использовать кабель, изображенный на рис. 1.9., соединенный со шлейфом программатора так, как указано на рисунке.

Рисунок 1.9 – Кабель для подключения шлейфа программатора к микроконтроллеру

  1.  Свободные контакты кабеля подключить к нужным выводам микроконтроллера в соответствии с подсказкой на шлейфе программатора.
    1.  Для «прошивки» микроконтроллера запустить программу «USBASP_AVRDUDE_PROG.exe». Данная программа позволяет программировать микроконтроллеры AVR различных моделей, устанавливать конфигурационные Fuse-биты, записывать данные в энергонезависимую память контроллера.
    2.  Запись программы в микроконтроллер осуществляется только при наличии у него питания. Поэтому для дальнейшей «прошивки» необходимо подать питание на стенд, после чего проверить правильность соединения микроконтроллера с программатором. Для этого в запущенной на ПК программе необходимо выбрать модель микроконтроллера ATMega8 и нажать кнопку «Чтение». Если программатор подключен правильно, программа выдаст соответствующее сообщение.
    3.  В разделе «Flash» указать откомпилированный файл прошивки «LW1.hex», находящийся в папке с файлом-исходником «LW1.asm». Данный файл генерируется средой Proteus автоматически при симулировании работы собранной схемы.
    4.  После выбора файла нажать кнопку «Программирование» и дождаться окончания процесса. После этого собранная схема будет работать в соответствии с программой, независимо от того, подключен программатор к микроконтроллеру или нет.
  2.  Продемонстрировать работу схемы, после чего очистить память микроконтроллера, нажав в программе на ПК кнопку «Стереть все».

4 КОНТРОЛЬНЫЕ ВОПРОСЫ

  1.  Что такое микропроцессор и микроконтроллер? В чем разница между этими понятиями?
  2.  Основные характеристики микропроцессоров.
  3.  Охарактеризуйте основные архитектуры микропроцессоров/микроконтроллеров.
  4.  В чем заключается сущность, алгоритм работы микроконтроллера.
  5.  Преимущества и недостатки процессоров с RISC и CISC архитектурой.
  6.  Какие семейства микроконтроллеров вы знаете?
  7.  Что такое периферийные устройства микроконтроллера? Назначение периферийных устройств?
  8.  Что такое программный счетчик?
  9.  Какие виды памяти используются в микроконтроллерах AVR?
  10.  Назначение тактовых сигналов микроконтроллера.
  11.  Что такое сторожевой таймер?
  12.  Принцип работы лабораторного стенда.
  13.  В каком порядке нумеруются выводы микросхем?
  14.  Как запрограммировать микроконтроллер?
  15.  Какие выводы микроконтроллера используются для подключения программатора?
  16.  Каково назначение микросхемы-драйвера HEF4511?


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

Использование AVR-assembler. Работа с портами ввода-вывода микроконтроллеров AVR

Цель работы: изучить общую структуру микропрограммы контроллера; ознакомиться с общими принципами программирования портов ввода-вывода микроконтроллеров AVR; получить навыки работы со средствами отладки, предоставляемые средой Proteus; ознакомиться с арифметическими и логическими командами AVR-Assembler.

1 Теоретические сведения

Процесс программирования любого микроконтроллера состоит из трех основных этапов:

  •  написание программы на языке программирования, понятному человеку (Assembler, C или др.);
  •  компиляция программы, в процессе которой программа, написанная на языке программирования, переводится в машинный код, воспринимаемый микроконтроллером;
  •  загрузка откомпилированной программы (как правило, файл с расширением hex) в микросхему контроллера (так называемая «прошивка»).

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

Для создания программы на языке Assembler, предпочтительнее, прежде всего, ознакомиться с принципами и правилами языка, после чего можно использовать команды и инструкции AVR-Assembler, пользуясь справочными данными.

  1.  Особенности AVR-Assembler

Особенности мнемонической записи большинства команд в AVR-ассемблере такие же, как и в других ассемблерах. Вначале пишется команда (в AVR команды бывают двух-, трех-, и четырехбуквенные), затем через пробел или знак табуляции следуют операнды. Некоторые команды операндов не имеют (ret, reti), в других – один операнд (inc R16). Если команда имеет два операнда, то сначала указывают приемник, затем источник. Между приемником и источником обязательно ставится запятая. Так выражение «sub  R16, R17» означает, что из содержимого регистра R16 нужно вычесть содержимое R17, а результат окажется в R16.

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

AVR-ассемблер не различает регистр букв (одинаково правильной будет форма записи Jmp, JMP или jmp)

Каждая команда должна занимать отдельную строку, разбивать команду на части разрывом строки нельзя. Кроме команды, каждая строка может содержать метки и комментарии

Метка – идентификатор произвольной длины с произвольным именем, заканчивающийся двоеточием без пробела перед ним (например, «RESET:»). Кроме простого указания на адрес перехода для команд ветвления, метки служат также указанием на адрес подпрограмм и также являются их именем.

Комментарии можно добавлять в конце строки после знака «;». Все, что расположено после точки с запятой и до конца строки игнорируется компилятором.

Числа по умолчанию считаются десятичными. Шестнадцатеричные числа можно записывать двумя способами: «0x0A» или «$0A». Двоичные числа записываются так: «0b00001010».

Кроме команд в AVR-Assembler могут встречаться директивы компилятора. Самые распространенные директивы:

  •  include –для подключения файлов к программе;
  •  def (define, definitions) – для определения имен пользовательских переменных;
  •  equ (equivalent) – для определения пользовательских констант.

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

  1.  Работа с портами ввода-вывода микроконтроллера AVR

Любой микроконтроллер семейства AVR всегда имеет в своем составе один или несколько портов ввода-вывода. Каждый разряд такого порта подсоединен к одному из выводов (контактов) микросхемы. Порты ввода-вывода служат для обмена информацией с внешними устройствами. В микроконтроллерах AVR порты именуются латинскими буквами от A до G.

Для управления каждым портом ввода-вывода используется три специальных регистра: PORTx, DDRx и PINx, где «х» – буква – имя порта. Например, для порта «А» имена регистров управления будут такими: PORTA, DDRA и PINA.

Рассмотрим назначение каждого из этих регистров:

  •  PORTx – регистр данных (используется для вывода информации);
  •  DDRx (Data Direction Register) – регистр направления передачи информации;
  •  PINx – регистр ввода информации.

Любой порт ввода-вывода микроконтроллера AVR устроен таким образом, что каждый его разряд может работать как на ввод, так и на вывод информации (т.е. соответствующий контакт микросхемы может быть как входом, так и выходом). Для переключения этих режимов работы служит регистр DDRх. Каждый разряд регистра DDRx управляет своим разрядом порта. Если в каком либо разряде регистра DDRx записан ноль, то соответствующий разряд порта работает как вход, если единица – как выход.

Например, следующий фрагмент кода конфигурирует контакты PC0-PC3 микроконтроллера ATmega8 как входы, а PC4-PC7 – как выходы:

Для того чтобы вывести информацию на внешний контакт микросхемы, нужно в соответствующий разряд DDRx записать логическую единицу (сконфигурировать как выход), а затем записать нужные данные в регистр PORTx. Содержимое регистра PORTx появится на внешних выводах микросхемы в виде цифровых сигналов (нулей или единиц), и будет присутствовать там постоянно, пока не будет заменено другим значением.

Например, следующий фрагмент кода устанавливает единицы (высокий уровень напряжения) на всех выводах порта «С» микросхемы:

Для того чтобы считать информацию с внешнего вывода микроконтроллера, необходимо сначала перевести нужный разряд порта в режим ввода (записать ноль в соответствующий разряд регистра DDRx), после чего подавать цифровой сигнал от внешнего устройства. Считать байт можно с помощью регистра PINx.

Например, следующий фрагмент кода устанавливает вывод PB1 как вход и считывает байт данных с порта «B» микроконтроллера:

  1.  Некоторые арифметические и логические операции

Операция

Команда

Действие

Сложение

add  R16, R17

R16 = R16 + R17

Вычитание

sub  R16, R17

R16 = R16 – R17

subi  R16, <число>

R16 = R16 - <число>

Логическое И

and  R16, R17

R16 = R16 AND R17

andi  R16, <число>

R16 = R16 AND <число>

Логическое ИЛИ

or  R16, R17

R16 = R16 OR R17

ori  R16, <число>

R16 = R16 OR <число>

Установка бита порта ввода-вывода

sbi  <порт>, n

sbi PORTC, 4

<порт>[n] = 1

PORTC[4] = 1

Сброс бита порта ввода-вывода

cbi  <порт>, n

cbi PORTC, 4

<порт>[n] = 0

PORTC[4] = 0

Инкремент

inc R16

R16 = R16 + 1

Декремент

dec R16

R16 = R16 - 1

Полная система команд микроконтроллеров AVR приведена в приложении А.

  1.  Средства отладки программ среды Proteus

Для того чтобы войти в режим отладки необходимо использовать пункт «Запуск/перезапуск отладки» из меню «Отладка» или запустить моделирование в пошаговом режиме. Средства отладки среды Proteus позволяют выполнять микропрограмму построчно, одновременно наблюдая за содержимым внутренних регистров, портов, состоянием программного счетчика, стека, а также за изменениями работы схемы в интерактивном режиме.

Одними из основных инструментов отладки, предоставляемых средой, являются окно исходного кода (AVR Source Code, рис. 2.1) и окно содержимого регистров (AVR CPU Registers, рис. 2.2).

На рис. 2.1 обозначены:

  •  1 – продолжить выполнение программы;
  •  2 – шаг без входа в подпрограмму;
  •  3 – шаг с входом в подпрограмму;
  •  4 – исполнять код до возврата из подпрограммы;
  •  5 – поставить/снять точку остановки;
  •  6 – текущая выполняемая строка.

Рис. 2.1 – Окно исходного кода (AVR Source Code)

Рис. 2.2 – Окно содержимого регистров (AVR CPU Registers)

На рис. 2.2 обозначены:

  •  1 – значение программного счетчик (PCProgram Counter);
  •  2 – флаги регистра состояния SREG;
  •  3 – содержимое регистра состояния SREG;
  •  4 – содержимое внутренних регистров R0-R31;
  •  5 – указатель стека.

2 Самостоятельная подготовка

  1.  Проработать раздел 1 «Теоретические сведения» к лабораторной работе.
  2.  Составить программу согласно заданию своего варианта (см. раздел 4).
  3.  Подготовить бланк отчета к лабораторной работе. Отчет должен содержать фамилию и группу студента, название, цель, порядок выполнения работы, а также документацию на микроконтроллер, задание, схему и программу согласно заданию своего варианта.

3 Порядок выполнения работы

  1.  Создать новый проект в среде ISIS Proteus.
  2.  Разместить необходимые компоненты в рабочем окне Proteus. В качестве микроконтроллера использовать ATMega8.
  3.  Собрать принципиальную схему в среде Proteus согласно заданию своего варианта (см. раздел 4).
  4.  Запрограммировать микроконтроллер, согласно заданию своего варианта (см. раздел 4).
    1.  В меню «Исходник» выбрать пункт «Добавить/удалить файлы исходника…».
    2.  В появившемся окне выбрать инструмент генерации кода (компилятор) – «AVRASM2» и целевой микропроцессор «ATMega8».
    3.  Указать компилятору файл-исходник, который подлежит компиляции. Для этого в поле «Имя файла исходника» нажать кнопку «Новый» и вписать имя файла-исходника «LW2.asm». На вопрос о создании файла ответить «да» и закрыть окно.
    4.  Открыть файл-исходник (меню «Исходник», пункт «LW2.asm») и набрать текст заранее подготовленной программы (микропрограммы).
    5.  Сохранить набранную программу и откомпилировать ее, выбрав пункт «Компоновать все» из меню «Исходник» или запустив моделирование схемы в среде Proteus.
  5.  Запустить проект, убедиться в правильности работы схемы и набранной микропрограммы.
  6.  Пронаблюдать работу микропрограммы в режиме отладки, убедиться в изменении содержимого регистров микроконтроллера.
    1.  Для входа в режим отладки можно использовать меню «Отладка», пункт «Запуск/Перезапуск отладки» либо сочетание клавиш Ctrl-F12.
    2.  Для отображения окна с исходным кодом микропрограммы использовать пункт «AVR Source Code» из меню «Отладка».
    3.  Для отображения окна с содержимым внутренних регистров микроконтроллера использовать пункт «AVR CPU Registers» из меню «Отладка».
  7.  Собрать схему, реализованную в среде Proteus, на лабораторном стенде. Собранную схему продемонстрировать преподавателю.
  8.  Запрограммировать микроконтроллер и пронаблюдать работу схемы на стенде.
    1.  Подключить программатор к компьютеру и к микроконтроллеру.
    2.  Для «прошивки» микроконтроллера запустить программу «USBASP_AVRDUDE_PROG.exe», в которой выбрать модель микроконтроллера ATMega8, после чего в разделе «Flash» указать откомпилированный файл прошивки «LW2.hex», находящийся в папке с файлом-исходником «LW2.asm».
    3.  Подать питание на стенд, проверить правильность соединения микроконтроллера с программатором, после чего «прошить» микроконтроллер, нажав кнопку «Программирование» и дождавшись окончания процесса.
  9.  Продемонстрировать работу схемы, после чего очистить память микроконтроллера, нажав в программе на ПК кнопку «Стереть все».


4 Варианты заданий

Номер варианта соответствует порядковому номеру студента по списку.

 вар-та

Задание

1

После включения устройства, в регистры R16 и R17 микроконтроллера заносятся значения 20 и 17 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит вычитание R16 – R17 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

2

После включения устройства, в регистры R20 и R21 микроконтроллера заносятся значения 5 и 12 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит вычитание R21 – R20 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

3

После включения устройства, в регистры R19 и R20 микроконтроллера заносятся значения 7 и 2 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит вычитание R19 – R20 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

4

После включения устройства, в регистры R16 и R17 микроконтроллера заносятся значения 128 и 122 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит вычитание R16 – R17 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

5

После включения устройства, в регистры R24 и R20 микроконтроллера заносятся значения 3 и 4 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит сложение R24 + R20 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

6

После включения устройства, в регистры R16 и R17 микроконтроллера заносятся двоичные значения 00001101 и 00000011 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит логическое сложение R16 OR R17 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

7

После включения устройства, в регистр R17 микроконтроллера заносится значение 20 и отображается в двоичной форме на красных светодиодах, после чего устройство ожидает замыкания ключа. Если ключ замыкается, от значения R17 отнимается число 16 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

8

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

9

После включения устройства, в регистры R16 и R17 микроконтроллера заносятся двоичные значения 00001101 и 00000011 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит логическое умножение R16 AND R17 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

10

После включения устройства, в регистры R20 и R21 микроконтроллера заносятся значения 1 и 4 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит сложение R21 + R20 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

11

После включения устройства, в регистры R21 и R22 микроконтроллера заносятся двоичные значения 00001000 и 00000001 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит логическое сложение R21 OR R22 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

12

После включения устройства, в регистры R22 и R23 микроконтроллера заносятся значения 254 и 247 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит вычитание R22 – R23 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

13

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

14

После включения устройства, в регистр R17 микроконтроллера заносится значение 2 и отображается в двоичной форме на красных светодиодах, после чего устройство ожидает замыкания ключа. Если ключ замыкается, к значению R17 добавляется число 3 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

15

После включения устройства, в регистры R16 и R17 микроконтроллера заносятся значения 2 и 5 соответственно, после чего устройство ожидает замыкания ключа. Если ключ замыкается, происходит сложение R16 + R17 и результат выводится в двоичной форме на красные светодиоды. После вывода загорается зеленый светодиод, сигнализируя об окончании работы.

16

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

17

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

18

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

19

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


5 КОНТРОЛЬНЫЕ ВОПРОСЫ

  1.  Основные назначения выводов микроконтроллера ATMega8.
  2.  Что представляет собой порт ввода-вывода микроконтроллера? Каково его назначение?
  3.  Способы тактирования микроконтроллеров.
  4.  Обозначение и разрядность портов ввода-вывода микроконтроллера ATMega8.
  5.  Режимы работы портов ввода-вывода.
  6.  Регистры управления портами ввода-вывода микроконтроллеров AVR.
  7.  Назначение регистра DDRx.
  8.  Дополнительные функции портов ввода-вывода.
  9.  Типовые схемы подключения внешних устройств к микроконтроллеру: кнопка, светодиод.
  10.  Как считать данные с внешних выводов микроконтроллера AVR?
  11.  Как вывести данные на внешние выводы микроконтроллера AVR?
  12.  Понятие «подтягивающего резистора», его назначение.
  13.  Каково входное сопротивление порта ввода-вывода в режиме считывания информации?
  14.  Что представляют собой средства отладки среды Proteus? Каково их назначение?


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

Использование внешних прерываний микроконтроллеров AVR

Цель работы: освоить принципы использования прерываний в микропроцессорных системах на примере микроконтроллера AVR; ознакомится со структурой микропрограммы, использующей прерывания; получить основные навыки проектирования микропроцессорных систем, использующих прерывания.

1 Теоретические сведения

Прерывание (interrupt) – это сигнал, сообщающий микропроцессору о наступлении какого-либо события. При поступлении такого сигнала выполнение основной программы приостанавливается, и управление передается подпрограмме-обработчику прерывания, после работы которого, продолжается выполнение основной программы.

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

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

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

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

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

С помощью данной таблицы векторов прерываний микроконтроллеру указано, что в случае сброса – необходимо перейти на метку RESET, в случае возникновения сигнала внешнего прерывания INT0 – перейти на метку ON_INT0, в случае возникновения сигнала внешнего прерывания INT1 – на метку ON_INT1, после завершения очередного преобразования АЦП – перейти на метку ON_ADCCOMPLETE.

Директива org устанавливает абсолютный адрес в памяти программ. Т.е. с помощью этой директивы мы можем задавать, в какой ячейке памяти программ расположить тот или иной участок кода. Например, запись «.org 0x40» означает, что все команды, идущие после директивы org, будут располагаться в памяти, начиная с ячейки с адресом 0х40.

Применение директивы org в таблице векторов прерываний обусловлено следующим. Механизм обработки прерываний в микроконтроллере устроен таким образом, что в случае возникновения прерывания, выполнение программы автоматически перемещается на участок кода, расположенный по определенному адресу. Этот адрес жестко закреплен за каждым типом прерывания. Например, при возникновении прерывания INT0 выполняется команда, расположенная по адресу $001 в памяти программ, при возникновении прерывания INT1 – команда, расположенная по адресу $002, и т.д. Эти адреса в различных моделях микроконтроллеров могут отличаться, но заданы они аппаратно и изменению не подлежат.

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

В листинге, приведенном выше, после применения директив org, команды rjmp располагаются в тех ячейках памяти, на которые микроконтроллер передаст управление при возникновении определенного прерывания.

Адреса векторов прерываний микроконтроллера ATMega8 приведены в приложении Д.

  1.  Структура AVR-программы с использованием прерываний

Общая структура AVR-программы, использующей прерывания, состоит из четырех основных секций (инициализация, таблица векторов прерываний, основная программа, обработчики прерываний) и выглядит следующим образом:

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

  •  обязательно описывать прерывание сброса и располагать текст основной программы после метки RESET;
  •  основную программу располагать в памяти по адресу не ниже 0x40 (поскольку начало памяти программ занимает таблица векторов прерываний);
  •  каждый обработчик прерывания должен завершаться командой reti.

  1.  Регистры настройки прерываний

Работу подсистемы прерываний микроконтроллера можно конфигурировать с помощью специальных внутренних регистров, которые позволяют разрешать/запрещать определенные прерывания, настраивать условия их срабатывания (по фронту, по спаду, по уровню) и пр.

За настройку внешних прерываний INT0, INT1 отвечают два регистра микроконтроллера:

  •  GICR (General Interrupt Control Register) позволяет разрешать/запрещать обработку внешних прерываний;

Когда седьмой бит INT1 регистра установлен (единица), внешние прерывания INT1 разрешены, если сброшен (ноль) – запрещены

Если шестой бит INT0 регистра установлен (единица), внешние прерывания INT0 разрешены, если сброшен (ноль) – запрещены.

Команда разрешения прерываний INT0 и INT1 будет выглядеть следующим образом:

  •  MCUCR (MCU Control Register) содержит биты, контролирующие условия срабатывания внешних прерываний INT0 и INT1

Различные комбинации битов ISCxx (Interrupt Sense Control) определяют условие срабатывания внешнего прерывания – по фронту, по спаду, по уровню. Подробные сведения приведены в таблицах 3.1 и 3.2:

Таблица 3.1

ISC11

ISC10

Условие срабатывания прерывания INT1

0

0

Низкий уровень сигнала на выводе INT1

0

1

Любое изменение логического уровня на выводе INT1

1

0

Спад сигнала на выводе INT1

1

1

Фронт сигнала на выводе INT1

Таблица 3.2

ISC01

ISC00

Условие срабатывания прерывания INT0

0

0

Низкий уровень сигнала на выводе INT0

0

1

Любое изменение логического уровня на выводе INT0

1

0

Спад сигнала на выводе INT0

1

1

Фронт сигнала на выводе INT0

По умолчанию все биты ISC сброшены (0).

Помимо регистров, на глобальную обработку прерываний влияют две команды:

  •  sei (set interrupt) – общее разрешение прерываний;
  •  cli (clear interrupt) – общий запрет прерываний.

2 описание проектируемого устройства

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

Для реализации данной задачи необходимы семисегментный индикатор (например, с общим катодом) и драйвер-дешифратор для него, кнопка, резисторы и микроконтроллер, который будет управлять работой описанных выше периферийных устройств.

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


Компоненты среды
Proteus, используемые в схеме:

  •  Микроконтроллер – ATMega8;
  •  Семисегментный индикатор с общим катодом – 7SEG-COM-CATHODE;
  •  СветодиодыLED-RED, LED-GREEN;
  •  Драйвер-дешифратор семисегментного индикатора 4511;
  •  Кнопка – BUTTON;
  •  Резистор – RES.

Для удобства написания микропрограммы индикатор и светодиоды подключены к различным портам микроконтроллера (первый – к порту «B», второй – к порту «C»). Так как во время работы устройство должно непрерывно выводить «бегущий огонь» на светодиодах, то основной частью программы будет сдвиг единицы и отправка каждого значения на порт «B»:

В случае нажатия кнопки, этот фрагмент программы должен прерваться, на втором семисегментном индикаторе должно отобразиться текущее количество нажатий, после чего, выполнение цикла main должно продолжиться с того места, с которого оно прервалось. Таким образом, в данном устройстве нажатие кнопки будет служить микроконтроллеру сигналом прерывания основной программы. Согласно схеме, приведенной на рис. 3.1, таким сигналом будет возникновение «0» на выводе PD2 микроконтроллера.

Таким образом, общая структура микропрограммы будет выглядеть следующим образом (см. раздел 1):


Окончательный вариант программы для проектируемого устройства может выглядеть следующим образом:


3 Самостоятельная подготовка

  1.  Внимательно проработать раздел 1 «Теоретические сведения» к лабораторной работе.
  2.  Знать назначение микросхемы HEF4511 и принцип работы семисегментного индикатора BS-C535RD.
  3.  Детально ознакомиться с принципом работы устройства и программы, описанных в разделе 2.
  4.  Дополнить схему устройства и текст программы согласно заданию своего варианта (см. раздел 5).
  5.  Подготовить бланк отчета к лабораторной работе. Отчет должен содержать фамилию и группу студента, название, цель, порядок выполнения работы, а также дополненный вариант схемы устройства и программы, согласно заданию своего варианта, документацию на используемые в работе микросхемы и семисегментный индикатор (см. приложения А, Б, В).

4 Порядок выполнения работы

  1.  Создать новый проект в среде ISIS Proteus и собрать схему устройства, описанного в разделе 2 лабораторной работы.
  2.  Запрограммировать микроконтроллер, набрав текст подготовленной программы, приведенный в разделе 2. В программе дописать отсутствующий код.
  3.  Запустить моделирование, проверить работу устройства.
  4.  Пронаблюдать процесс выполнения микроконтроллером программы в режиме отладки (меню «Отладка», пункт «Запуск/Перезапуск отладки»). Выяснить, как изменяется значение флага «I» регистра состояний SREG при выполнении кода обработчика события и при  выходе из него. Вывод зафиксировать в отчете.
  5.  Продемонстрировать результаты работы преподавателю.
  6.  Собрать схему, реализованную в среде Proteus, на лабораторном стенде. Запрограммировать микроконтроллер и пронаблюдать работу схемы.
  7.  Дополнить схему устройства и текст программы согласно заданию своего варианта (см. раздел 5).
  8.  Убедиться в правильности работы дополненной схемы в среде Proteus и на лабораторном стенде.
  9.  Продемонстрировать результаты работы преподавателю, после чего очистить память микроконтроллера, нажав в программе на ПК кнопку «Стереть все».


5 варианты заданий

Номер варианта соответствует порядковому номеру студента по списку.

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

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

6 КОНТРОЛЬНЫЕ ВОПРОСЫ

  1.  Каковы основные недостатки программного опроса кнопки/ключа?
  2.  Прерывания. Назначение прерываний.
  3.  Что такое подсистема прерываний?
  4.  Что такое таблица векторов прерываний?
  5.  Назначение директивы «org».
  6.  Принцип обработки прерываний в микроконтроллерах AVR.
  7.  Чем отличается структура программы микроконтроллера, использующей прерывания, от простой программы?
  8.  Какие регистры микроконтроллера ATMega8 отвечают за настройку внешних прерываний INT0, INT1?
  9.  Как разрешить/запретить обработку внешних прерываний микроконтроллером?
  10.  Что такое стек? Назначение стека.
  11.  В чем отличие программного стека от аппаратного?
  12.  В какой области памяти располагают программный стек и почему?
  13.  Регистр SREG микроконтроллеров AVR. Назначение бита «I» регистра SREG.


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

Применение таймеров в микропроцессорных системах. Таймер/счетчик микроконтроллера atmega8

Цель работы: ознакомиться с основными способами применения таймеров/счетчиков в микропроцессорных системах; изучить регистры, управляющие работой таймеров; получить навыки конфигурирования таймеров/счетчиков в составе микроконтроллера ATMega8.

1 Теоретические сведения

Любой таймер в микроконтроллере представляет собой простой двоичный счетчик, осуществляющий подсчет входных импульсов. Каждый счетчик имеет возможность предварительной загрузки значений и может работать от тактовой частоты процессора непосредственно, или поделенной на 8, 64, 256 и 1024, а также от внешнего сигнала.

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

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

Зная частоту и количество подсчитанных импульсов можно рассчитывать точные интервалы времени, используя двоичный счетчик как таймер.

  1.  Способы измерения временных интервалов с помощью таймера/счетчика

Основной способ измерения временных интервалов с помощью таймера/счетчика заключается в использовании прерывания, возникающего при его переполнении. Максимальное количество импульсов, которое может подсчитать восьмиразрядный таймер, составляет 256. После прихода 257-го импульса счетный регистр таймера TCNTx сбросится в 0 и возникнет прерывание, сигнализирующее о переполнении счетного регистра. Если таймер постоянно запущен, то код, написанный в обработчике этого прерывания, будет периодически повторяться с интервалом времени, равным:

,

где f – частота импульсов на входе таймера (см. рис. 4.1).

Рисунок 4.1 – Счет импульсов

Очевидно, что чем меньше частота f, тем больше интервал времени tп между прерываниями (рис. 4.1). Изменять длительность этого интервала можно путем изменения частоты импульсов f, либо изменяя начальное значение счетного регистра TCNTx.

Однако такой способ приемлем для соблюдения интервалов малой длительности. Наименьшая частота входных импульсов таймера f, которую можно получить, составляет

,

где fCLK - тактовая частота микроконтроллера;

1024 – коэффициент деления частоты (может быть равен 1, 8, 64, 256 или 1024).

Если микроконтроллер работает с тактовой частотой 1 МГц, то, выставив наибольший коэффициент деления, мы получим частоту на входе таймера fmin ≈ 976 Гц. Согласно формуле 4.1 подсчет 256 импульсов, следующих с такой частотой, займет время tп ≈ 262 мс.

Поэтому, для измерения больших интервалов времени применяют другой способ. Он заключается в том, что в программе считают не количество импульсов, а количество переполнений таймера, т.е. сколько раз таймер посчитал 256 импульсов (рис. 4.2).

Рисунок 4.2 – Счет количества переполнений

Исходя из требуемого интервала времени tп рассчитывают частоту f и необходимое количество переполнений X, а в обработчике события считают эти переполнения. При достижении рассчитанного значения (например, R16 = X) выполняют необходимые операции и начинают счет заново:

  1.  Алгоритм расчета параметров таймера/счетчика

Максимальный интервал времени, который может отмерять восьмиразрядный таймер, определяется по формуле:

,

где f – частота импульсов на входе таймера.

Для конфигурирования таймера/счетчика необходимо рассчитать коэффициент деления частоты и количество переполнений таймера, использование которых позволит получить необходимый интервал времени. Ниже приведен общий алгоритм расчета этих параметров на примере интервала времени 2 с.

  1.  Определяем необходимую частоту импульсов на входе таймера:

,

где tп – необходимый интервал времени.

Поскольку tп = 2, расчетная частота будет равна fнеобх = 32768 Гц.

  1.  Путем подбора определяем коэффициент деления частоты K, который позволит установить частоту (фактическую), максимально близкую к рассчитанной fнеобх.

,

где fCLK – тактовая частота микроконтроллера;

К – коэффициент деления частоты.

Коэффициент деления для большинства микроконтроллеров AVR может быть равен 1, 8, 64, 256 и 1024. Исходя из формулы 4.2, K = 64.

  1.  Определяем количество переполнений Х таймера по формуле:

Т.к. fCLK = 1000000 Гц, tп = 2с, К = 64, то необходимое количество переполнений Х ≈ 122.

  1.  Конфигурирование восьмиразрядного таймера/счетчика

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

Для настройки частоты служит регистр TCCR0 (Timer/Counter Control Register). Различные комбинации первых трех битов этого регистра позволяют задавать источник входного сигнала таймера (см. таблицу 4.1):

Таблица 4.1

CS02

CS01

CS00

Описание

0

0

0

Нет источника (таймер остановлен)

0

0

1

K = 1. На входе таймера импульсы частотой fCLK / 1

0

1

0

K = 8. На входе таймера импульсы частотой fCLK / 8

0

1

1

K = 64. На входе таймера импульсы частотой fCLK / 64

1

0

0

K = 256. На входе таймера импульсы частотой fCLK / 256

1

0

1

K=1024. На входе таймера импульсы частотой fCLK /1024

1

1

0

Внешний источник (вывод Т0). Срабатывание по спаду

1

1

1

Внешний источник (вывод Т0). Срабатывание по фронту

Команда установки коэффициента деления частоты K=256 будет выглядеть следующим образом:

Для разрешения/запрета прерываний от таймеров служит внутренний регистр TIMSK (Timer/Counter Interrupt Mask Register). Нулевой бит регистра отвечает за разрешение/запрет прерываний от восьмиразрядного таймера 0.

Когда нулевой бит TOIE0 регистра установлен (единица), прерывание при переполнении таймера 0 разрешено, если сброшен (ноль) – запрещено.

Команда разрешения прерываний от таймера/счетчика 0 будет выглядеть следующим образом:

2 описание проектируемого устройства

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

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

Принципиальную схему описанного устройства в среде Proteus можно собрать следующим образом (рис. 4.1):

Рисунок 4.1 – Принципиальная схема проектируемого устройства

В принципиальной схеме задействованы следующие компоненты среды Proteus:

  •  Микроконтроллер – ATmega8;
  •  Семисегментный индикатор – 7SEG-COM-CATHODE;
  •  Драйвер-дешифратор семисегментного индикатора 4511;
  •  Кнопка – BUTTON;
  •  Резистор – RES.

После создания принципиальной схемы необходимо продумать алгоритм работы микроконтроллера. Согласно заданию, микроконтроллер должен реагировать на нажатие кнопки и выводить числовые значения с определенным интервалом времени. Следовательно, в программе необходимо задействовать 2 прерывания: при возникновении низкого уровня сигнала на выводе PD2 (INT0) и при переполнении таймера/счетчика (для выдержки заданного интервала времени).  Адреса векторов данных прерываний хранятся в константах INT0addr и OVF0addr (см. приложение Д). Поскольку вне этих событий микроконтроллер не должен выполнять никаких операций, то основной частью его программы будет пустой бесконечный цикл:

С учетом вышесказанного, шаблон микропрограммы можно реализовать следующим образом:

До момента выполнения микроконтроллером строки «main: rjmp main» необходимо настроить все используемые периферийные устройства: сконфигурировать выводы порта «C» как выходы (регистр DDR), разрешить внешние прерывания INT0 (регистр GICR), настроить частоту восьмиразрядного таймера/счетчика (регистр TCCR0). В зависимости от задания, включение прерываний от таймера/счетчика (регистр TIMSK) необходимо производить либо до основного цикла, либо в обработчике нажатия кнопки.

3 Самостоятельная подготовка

  1.  Внимательно проработать раздел 1 «Теоретические сведения» к лабораторной работе.
  2.  Детально ознакомиться с принципом работы устройства и шаблоном программы, описанных в разделе 2.
  3.  Для своего варианта (см. раздел 5) рассчитать коэффициент деления частоты и количество переполнений таймера, необходимых для соблюдения заданного интервала времени. Частота работы микроконтроллера 1 МГц.
  4.  Составить текст программы микроконтроллера согласно заданию своего варианта (см. раздел 5). В качестве шаблона программы можно использовать листинг, приведенный  в разделе 2. В программе использовать параметры, рассчитанные в п.3.
  5.  Подготовить бланк отчета к лабораторной работе. Отчет должен содержать фамилию и группу студента, название, цель, порядок выполнения работы, а также документацию на используемые в работе микросхемы (приложения А, Б, В), расчет параметров таймера/счетчика (п.3) и текст составленной программы, согласно заданию своего варианта.

4 Порядок выполнения работы

  1.  Создать новый проект в среде ISIS Proteus и собрать схему устройства, описанного в разделе 2 лабораторной работы.
  2.  Запрограммировать микроконтроллер, набрав текст подготовленной программы, согласно заданию своего варианта (см. раздел 5).
  3.  Запустить моделирование, проверить работу устройства.
  4.  Пронаблюдать процесс выполнения микроконтроллером программы в режиме отладки (меню «Отладка», пункт «Запуск/Перезапуск отладки»). Выяснить, как изменяется значение флага «I» регистра состояний SREG при выполнении кода обработчика события ON_TIMER_OVERFLOW и при  выходе из него. Вывод зафиксировать в отчете.
  5.  Собрать схему, реализованную в среде Proteus, на лабораторном стенде. Запрограммировать микроконтроллер и пронаблюдать работу схемы.
  6.  Продемонстрировать результаты работы преподавателю, после чего очистить память микроконтроллера, нажав в программе на ПК кнопку «Стереть все».

5 варианты заданий

Номер варианта соответствует порядковому номеру студента по списку.

Таблица 4.1 – Варианты индивидуальных заданий

№ вар-та

Интервал времени

Текст задания

1, 11

0,5 с

Задание 1

2, 12

1 с

Задание 2

3, 13

1,5 с

Задание 1

4, 14

2 с

Задание 2

5, 15

2,5 с

Задание 1

6, 16

3 с

Задание 2

7, 17

3,5 с

Задание 1

8, 18

4 с

Задание 2

9, 10

4 с

Задание 1

Задание 1: после запуска семисегментный индикатор отображает «0», отображаемое значение не изменяется. В случае нажатия кнопки – устройство начинает последовательный счет числовых значений от «0» до «9», отображая каждое из них на семисегментном индикаторе. Интервал между изменениями чисел указан в таблице 4.1.

Задание 2: после запуска устройство ведет обратный отсчет числовых значений от «9» до «0», отображая каждое значение на семисегментном индикаторе. Интервал между изменением чисел указан в таблице 4.1. В случае нажатия кнопки – счет прекращается.


6 КОНТРОЛЬНЫЕ ВОПРОСЫ

  1.  Что представляет собой таймер-счетчик? Назначение таймера-счетчика.
  2.  Основные способы выдержки заданного интервала времени в микропроцессорных системах, их преимущества и недостатки.
  3.  В чем заключается принцип измерения времени с помощью таймера-счетчика?
  4.  Основные параметры таймера-счетчика. Что такое разрядность таймера?
  5.  Чем отличается таймер-счетчик от простого двоичного счетчика?
  6.  Какие прерывания способны вызывать таймеры-счетчики?
  7.  Какие разновидности таймеров-счетчиков существуют в микроконтроллере ATMega8?
  8.  В чем заключается принцип измерения малых интервалов времени с помощью 8-разрядного таймера-счетчика?
  9.  В чем заключается принцип измерения больших интервалов времени с помощью 8-разрядного таймера-счетчика?
  10.  Какие параметры могут влиять на интервал времени, отмеряемый таймером?
  11.  Как считать текущее состояние счетного регистра таймера?
  12.  Какие регистры микроконтроллера ATMega8 позволяют управлять таймером-счетчиком 0?


Приложение А

РАСПОЛОЖЕНИЕ ВЫВОДОВ МИКРОКОНТРОЛЛЕРА AVR ATMEGA8

Обозначение

Описание

VCC

Вывод для подачи напряжения питания

GND

Земля

Port B (PB7..PB0)

8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами

Port C (PC5..PC0)

7-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами


PC6/RESET

В зависимости от конфигурационных битов, бит PC6 порта «С» может использоваться либо как обычный вывод, либо как вход, отвечающий за сброс программы микроконтроллера

Port D (PD7..PD0)

8-битный двунаправленный порт ввода/вывода с внутренними подтягивающими резисторами

AVCC

Вывод для подачи напряжения питания встроенного АЦП

AREF

Опорное напряжение встроенного АЦП


Приложение Б

ОБЩИЕ ХАРАКТЕРИСТИКИ МИКРОСХЕМЫ HEF4511

Обозначение

Описание

VDD

Вывод для подачи напряжения питания

VSS

Земля

DA, DB, DC, DD

Входы данных. Число, которое необходимо отобразить на семисегментном индикаторе, подается на эти входы в двоичном виде.

Oa, Ob, Oc, Od, Oe, Of, Og

Выходы, подключаемые к сегментам A-G семисегментного индикатора соответственно

EL (Enable Latch)

Запомнить входные данные в регистре. Активный уровень «0».

BI (Blanking Input)

Погасить все сегменты индикатора, независимо от входных данных. Активный уровень «0».

LT (Lamp Test)

Засветить все сегменты индикатора, независимо от входных данных. Активный уровень «0».

Максимальный выходной ток – 25 мА.

Отображение символов:

Таблица истинности:


Приложение В

ХАРАКТЕРИСТИКИ СЕМИСЕГМЕНТНОГО ИНДИКАТОРА BS-C535RD


Приложение Г

Система команд микроконтроллеров AVR

Мнемо-ническое обозначе-ние

Операнды

Расшифровка

Описание

Операция

Кол-во тактов

1

2

3

4

5

6

АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ КОМАНДЫ

ADD

Rd, Rr

Add without Carry two Registers

Сложить два регистра

Rd ¬ Rd + Rr

1

ADC

Rd, Rr

Add with Carry two Registers

Сложить два регистра с учетом флага С

Rd ¬ Rd + Rr + C

1

ADIW

Rdl, K

Add Immediate to Word

Добавить к двухбайтовому регистру число K

Rdh:Rdl   Rdh:Rdl+K

2

SUB

Rd, Rr

Subtract  without Carry two Registers

Вычесть из одного регистра другой

Rd ¬ Rd - Rr

1

SUBI

Rd*, K

Subtract Constant from Register

Вычесть из регистра число K

Rd ¬ Rd - K

1

SBC

Rd, Rr

Subtract with Carry two Registers

Вычесть из одного регистра другой с учетом флага С

Rd ¬ Rd - Rr - C

1

SBCI

Rd*, K

Subtract with Carry Constant from Register

Вычесть из регистра число K с учетом флага C

Rd ¬ Rd - K - C

1

SBIW

Rdl, K

Subtract Immediate from Word

Вычесть из двухбайтового регистра число K

Rdh:Rdl ¬ Rdh:Rdl - K

2

AND

Rd, Rr

Logical AND Registers

Операция И между двумя регистрами

Rd ¬ Rd · Rr

1

ANDI

Rd*, K

Logical AND Register and Constant

Операция И между регистром и числом K

Rd ¬ Rd · K

1

OR

Rd, Rr

Logical OR Registers

Операция ИЛИ между двумя регистрами

Rd ¬ Rd v Rr

1

ORI

Rd*, K

Logical OR Register and Constant

Операция ИЛИ между регистром и числом K

Rd ¬ Rd v K

1

EOR

Rd, Rr

Exclusive OR Registers

Исключающее ИЛИ между двумя регистрами

Rd ¬ Rd Å Rr

1

1

2

3

4

5

6

COM

Rd

One’s Complement

Поразрядная инверсия регистра

Rd ¬ $FF - Rd

1

NEG

Rd

Two’s Complement

Изменения знака содержимого регистра

Rd ¬ $00 - Rd

1

SBR

Rd*, K

Set Bit(s) in Register

Установить биты в регистре по маске K

Rd ¬ Rd v K

1

CBR

Rd*, K

Clear Bit(s) in Register

Сбросить биты в регистре по маске K

Rd ¬ Rd · ($FF - K)

1

INC

Rd

Increment

Инкремент

Rd ¬ Rd + 1

1

DEC

Rd

Decrement

Декремент

Rd ¬ Rd - 1

1

TST

Rd

Test for Zero or Minus

Тестирование на ноль или минус

Rd ¬ Rd · Rd

1

CLR

Rd

Clear Register

Очистить регистр

Rd ¬ Rd Å Rd

1

SER

Rd

Set Register

Установить регистр

Rd ¬ $FF

1

CP

Rd, Rr

Compare

Сравнить два регистра

Rd - Rr

1

CPC

Rd, Rr

Compare with Carry

Сравнить два регистра с учетом флага С

Rd - Rr - C

1

CPI

Rd*, K

Compare Register with Immediate

Сравнить регистр с числом

Rd - K

1

КОМАНДЫ ВЕТВЛЕНИЯ

RJMP

k

Relative Jump

Перейти на метку K

PC ¬ PC + k + 1

2

IJMP

Indirect Jump to (Z)

Перейти на метку

PC ¬ Z

2

JMP

k

Jump

Перейти на метку K

PC k

3

RCALL

k

Relative Subroutine Call

Вызвать подпрограмму K

PC ¬ PC + k + 1

3

CALL

k

Call Subroutine

Вызвать подпрограмму K

PC k

4

ICALL

Indirect Call to (Z)

Вызвать подпрограмму

PC ¬ Z

3

RET

Subroutine Return

Возврат из подпрограммы

PC ¬ STACK

4

RETI

Interrupt Return

Возврат из подпрограммы

PC ¬ STACK

4

CPSE

Rd,Rr

Compare, Skip if Equal

Сравнить регистры, пропустить следующую команду, если они равны

if (Rd = Rr)PC ¬ PC + 2 or 3

1 / 2 / 3

SBRC

Rr, b

Skip if Bit in Register Cleared

Пропустить следующую команду, если бит b регистра сброшен

if (Rr(b)=0)PC ¬ PC + 2 or 3

1 / 2

1

2

3

4

5

6

SBRS

Rr, b

Skip if Bit in Register is Set

Пропустить следующую команду, если бит b регистра установлен

if (Rr(b)=1)PC ¬ PC + 2 or 3

1 / 2

SBIC

P*, b

Skip if Bit in I/O Register Cleared

Пропустить следующую команду, если бит b в регистре ввода-вывода сброшен

if (P(b)=0)PC ¬ PC + 2 or 3

1 / 2

SBIS

P*, b

Skip if Bit in I/O Register is Set

Пропустить следующую команду, если бит b в регистре ввода-вывода установлен

if (P(b)=1)PC ¬ PC + 2 or 3

1 / 2

BRBS

s, k

Branch if Status Flag Set

Перейти на метку k, если флаг с номером s регистра состояний SREG установлен

if (SREG(s) = 1) then PC¬PC+k + 1

1 / 2

BRBC

s, k

Branch if Status Flag Cleared

Перейти на метку k, если флаг с номером s регистра состояний SREG сброшен

if(SREG(s) = 0) then PC¬PC+k + 1

1 / 2

BREQ

k

Branch if Equal

Перейти на метку k, если равны

if (Z = 1) then PC ¬ PC + k + 1

1 / 2

BRCS

k

Branch if Carry Set

Перейти на метку k, если установлен флаг С

if (C = 1) then PC ¬ PC + k + 1

1 / 2

BRNE

k

Branch if Not Equal

Перейти на метку k, если не равны

if (Z = 0) then PC ¬ PC + k + 1

1 / 2

BRCC

k

Branch if Carry Cleared

Перейти на метку k, если флаг С сброшен

if (C = 0) then PC ¬ PC + k + 1

1 / 2

BRSH

k

Branch if Same or Higher

Перейти на метку k, если больше или равно

if (C = 0) then PC ¬ PC + k + 1

1 / 2

BRLO

k

Branch if Lower

Перейти на метку k, если меньше

if (C = 1) then PC ¬ PC + k + 1

1 / 2

BRMI

k

Branch if Minus

Перейти на метку k, если отрицательно

if (N = 1) then PC ¬ PC + k + 1

1 / 2

BRPL

k

Branch if Plus

Перейти на метку k, если положительно

if (N = 0) then PC ¬ PC + k + 1

1 / 2

BRGE

k

Branch if Greater or Equal, Signed

Перейти на метку k, если больше или равно

if (N Å V= 0) then PC ¬ PC + k + 1

1 / 2

1

2

3

4

5

6

BRLT

k

Branch if Less Than Zero, Signed

Перейти на метку k, если меньше нуля

if (N Å V= 1) then PC ¬ PC + k + 1

1 / 2

BRHS

k

Branch if Half Carry Flag Set

Перейти на метку k, если флаг H установлен

if (H = 1) then PC ¬ PC + k + 1

1 / 2

BRHC

k

Branch if Half Carry Flag Cleared

Перейти на метку k, если флаг H сброшен

if (H = 0) then PC ¬ PC + k + 1

BRTS

k

Branch if T Flag Set

Перейти на метку k, если флаг T установлен

if (T = 1) then PC ¬ PC + k + 1

1 / 2

BRTC

k

Branch if T Flag Cleared

Перейти на метку k, если флаг T сброшен

if (T = 0) then PC ¬ PC + k + 1

1 / 2

BRVS

k

Branch if Overflow Flag is Set

Перейти на метку k, если флаг V установлен

if (V = 1) then PC ¬ PC + k + 1

1 / 2

BRVC

k

Branch if Overflow Flag is Cleared

Перейти на метку k, если флаг V сброшен

if (V = 0) then PC ¬ PC + k + 1

1 / 2

BRIE

k

Branch if Interrupt Enabled

Перейти на метку k, если флаг I установлен

if ( I = 1) then PC ¬ PC + k + 1

1 / 2

BRID

k

Branch if Interrupt Disabled

Перейти на метку k, если флаг I сброшен

if ( I = 0) then PC ¬ PC + k + 1

1 / 2

КОМАНДЫ ПЕРЕДАЧИ ДАННЫХ

MOV

Rd, Rr

Move Between Registers

Передача между регистрами

Rd ¬ Rr

1

LDI

Rd*, K

Load Immediate

Загрузить в регистр число K

Rd ¬ K

1

LD

Rd, X

Load Indirect

Загрузить в регистр данные регистра Х

Rd ¬ (X)

2

LD

Rd, X+

Load Indirect and Post-Inc.

Загрузить в регистр данные регистра Х и увеличить на 1

Rd ¬ (X), X ¬ X + 1

2

LD

Rd, - X

Load Indirect and Pre-Dec.

Уменьшить на 1 и загрузить в регистр данные регистра Х

X ¬ X - 1, Rd ¬ (X)

2

LD

Rd, Y

Load Indirect

Загрузить в регистр данные регистра Y

Rd ¬ (Y)

2

LD

Rd, Y+

LDLoad Indirect and Post-Inc.

Загрузить в регистр данные регистра Y и увеличить на 1

Rd ¬ (Y), Y ¬ Y + 1

2

1

2

3

4

5

6

LD

Rd, - Y

Load Indirect and Pre-Dec.

Уменьшить на 1 и загрузить в регистр данные регистра Y

Y ¬ Y - 1, Rd ¬ (Y)

2

LDD

Rd,Y+q

Load Indirect with Displacement

Загрузить в регистр данные регистра Y со смещением q

Rd ¬ (Y + q)

2

LD

Rd, Z

Load Indirect

Загрузить в регистр данные регистра Z

Rd ¬ (Z)

2

LD

Rd, Z+

Load Indirect and Post-Inc.

Загрузить в регистр данные регистра Z и увеличить на 1

Rd ¬ (Z), Z ¬ Z+1

2

LD

Rd, -Z

Load Indirect and Pre-Dec

Уменьшить на 1 и загрузить в регистр данные регистра Z

Z ¬ Z - 1, Rd ¬ (Z)

2

LDD

Rd, Z+q

Load Indirect with Displacement

Загрузить в регистр данные регистра Z со смещением q

Rd ¬ (Z + q)

2

LDS

Rd, k

Load Direct from SRAM

Загрузить в регистр данные из внешней памяти

Rd ¬ (k)

2

ST

X, Rr

Store Indirect

Загрузить в Х данные регистра

(X) ¬ Rr

2

ST

X+, Rr

Store Indirect and Post-Inc.

Загрузить в Х данные регистра и увеличить на 1

ST (X) ¬ Rr, X ¬ X + 1

2

ST

- X, Rr

Store Indirect and Pre-Dec.

Уменьшить на 1 Х и загрузить данные регистра

X ¬ X - 1, (X) ¬ Rr

2

ST

Y, Rr

Store Indirect

Загрузить в Y данные регистра

(Y) ¬ Rr

2

ST

Y+, Rr

Store Indirect and Post-Inc.

Загрузить в Y данные регистра и увеличить на 1

(Y) ¬ Rr, Y ¬ Y + 1

2

ST

- Y, Rr

Store Indirect and Pre-Dec.

Уменьшить на 1 Y и загрузить данные регистра

Y ¬ Y - 1, (Y) ¬ Rr

2

STD

Y+q,Rr

Store Indirect with Displacement

Загрузить в Y данные регистра со смещением

(Y + q) ¬ Rr

2

ST

Z, Rr

Store Indirect

Загрузить в Z данные регистра

(Z) ¬ Rr

2

ST

Z+, Rr

Store Indirect and Post-Inc.

Загрузить в Z данные регистра и увеличить на 1

(Z) ¬ Rr, Z ¬ Z + 1

2

1

2

3

4

5

6

ST

-Z, Rr

Store Indirect and Pre-Dec

Уменьшить на 1 Z и загрузить данные регистра

Z ¬ Z - 1, (Z) ¬ Rr

2

STD

Z+q,Rr

Store Indirect with Displacement

Загрузить в Z данные регистра со смещением

(Z + q) ¬ Rr

2

STS

k, Rr

Store Direct to SRAM

Загрузить непосредственно в память данные регистра

(k) ¬ Rr

2

LPM

Load Program Memory

Загрузить память программ

R0 ¬ (Z)

3

ELPM

Load Program Memory

Загрузить память программ

R0 ¬ (RAMPZ: Z)

3

IN

Rd, P

In Port

Загрузить в регистр данные порта ввода-вывода

Rd ¬ P

1

OUT

P, Rr

Out Port

Загрузить в порт ввода-вывода данные регистра

P ¬ Rr

1

PUSH

Rr

Push Register on Stack

Записать регистр в стек

STACK ¬ Rr; SP¬ SP-1

2

POP

Rd

Pop Register from Stack

Извлечь регистр из стека

SP¬ SP+1, Rd ¬ STACK

2

КОМАНДЫ РАБОТЫ С БИТАМИ

SBI

P*,b

Set Bit in I/O Register

Установить бит b в регистре ввода-вывода

I/O(P,b) ¬ 1

2

CBI

P*,b

Clear Bit in I/O Register

Сбросить бит b в регистра ввода-вывода

I/O(P,b) ¬ 0

2

LSL

Rd

Logical Shift Left

Логический сдвиг влево

Rd(n+1) ¬ Rd(n), Rd(0) ¬ 0

1

LSR

Rd

Logical Shift Right

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

Rd(n) ¬ Rd(n+1), Rd(7) ¬ 0

1

ROL

Rd

Rotate Left Through Carry

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

Rd(0)¬C,Rd(n+1)¬ Rd(n), C¬Rd(7)

1

ROR

Rd

Rotate Right Through Carry

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

Rd(7)¬C,Rd(n)¬ Rd(n+1),C¬Rd(0)

1

ASR

Rd

Arithmetic Shift Right

Арифметический сдвиг вправо

Rd(n) ¬ Rd(n+1), n=0..6

1

SWAP

Rd

Swap Nibbles

Поменять местами тетрады регистра

Rd(3..0)¬Rd(7..4),Rd(7..4)¬Rd(3..0)

1

BSET

s

Flag Set

Установить флаг № s регистра состояний SREG

SREG(s) ¬ 1 SREG(s)

1

1

2

3

4

5

6

BCLR

s

Flag Clear

Сбросить флаг № s регистра состояний SREG

SREG(s) ¬ 0 SREG(s)

1

BLD

Rd, b

Bit load from T to Register

Установить бит b регистра равным значению флага T

Rd(b) ¬ T

1

BST

Rr, b

Bit Store from Register to T

Установить флаг T равным значению бита b регистра

T ¬ Rr(b)

1

SEC

Set Carry

Установить флаг

C ¬ 1

1

CLC

Clear Carry

Сбросить флаг

C ¬ 0

1

SEN

Set Negative Flag

Установить флаг

N ¬ 1

1

CLN

Clear Negative Flag

Сбросить флаг

N ¬ 0

1

SEZ

Set Zero Flag

Установить флаг

Z ¬ 1

1

CLZ

Clear Zero Flag

Сбросить флаг

Z ¬ 0

1

SEI

Global Interrupt Enable

Общее разрешение прерываний

I ¬ 1

1

CLI

Global Interrupt Disable

Общий сброс прерываний

I ¬ 0

1

SES

Set Signed Test Flag

Установить флаг

S ¬ 1

1

CLS

Clear Signed Test Flag

Сбросить флаг

S ¬ 0

1

SEV

Set Twos Complement Overflow

Установить флаг

V ¬ 1

1

CLV

Clear Twos Complement Overflow

Сбросить флаг

V ¬ 0

1

SET

Set T in SREG

Установить флаг

T ¬ 1

1

CLT

Clear T in SREG

Сбросить флаг

T ¬ 0

1

SEH

Set Half Carry Flag in SREG

Установить флаг

H ¬ 1

1

CLH

Clear Half Carry Flag in SREG

Сбросить флаг

H ¬ 0

1

NOP

No Operation

Пустая операция

None

1

SLEEP

Sleep (see specific description)

Спящий режим

None

3

WDR

Watchdog Reset

Сброс сторожевого таймера

None

1

Обозначения, используемые в приложении А:

  •  Rd – регистр-приемник результата, 0 ≤ d ≤  31;
  •  Rd* – регистр-приемник результата, 16 ≤  d ≤ 31;
  •  Rdl – регистры R24, R26, R28, R30;
  •  Rr – регистр-источник;
  •  P – адрес регистра ввода/вывода;
  •  P* – адрес побитно адресуемого регистра ввода/вывода (адреса $00-$1F);
  •  K –  символьная или численная константа (8 бит);
  •  k – адресная константа;
  •  b – номер бита в регистре (3 бита);
  •  s – номер бита в регистре статуса (3 бита);
  •  X,Y,Z – регистры косвенной адресации (X=R27:R26, Y=R29:R28; Z=R31:R30).

Разряды регистра состояния SREG:

  •  C – флаг переноса;
  •  Z – флаг нулевого значения;
  •  N – флаг отрицательного значения;
  •  V – флаг переполнения;
  •  S = N V – флаг для проверок со знаком при переполнении;
  •  H – флаг половинного переноса (переноса между третьим и четвёртым разрядами байта);
  •  T – флаг для команд пересылки;
  •  I – флаг глобального разрешения (запрещения) прерываний.


Приложение Д

Адреса векторов прерываний микроконтроллера ATmega8

Символическая константа

Адрес в памяти программ

Описание

Условие срабатывания

1

2

3

4

$000

Reset

Сброс микроконтроллера

INT0addr

$001

External Interrupt0

INT0 внешнее прерывание 0

INT1addr

$002

External Interrupt1

INT1 внешнее прерывание 1

OC2addr

$003

Output Compare2 Interrupt

Совпадение таймера/счетчика 2 с заданным значением

OVF2addr

$004

Overflow2 Interrupt

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

ICP1addr

$005

Input Capture1 Interrupt

Захват сигнала таймером/счетчиком 1

OC1Aaddr

$006

Output Compare1A Interrupt

Совпадение счетного регистра таймера/счетчика 1 со значением А

OC1Baddr

$007

Output Compare1B Interrupt

Совпадение счетного регистра таймера/счетчика 1 со значением B

OVF1addr

$008

Overflow1 Interrupt

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

OVF0addr

$009

Overflow0 Interrupt

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

SPIaddr

$00a

SPI Interrupt

Передача по интерфейсу SPI завершена

URXCaddr

$00b

USART Receive Complete Interrupt

Прием по USART завершен

1

2

3

4

UDREaddr

$00c

USART Data Register Empty Interrupt

Готовность регистра данных USART

UTXCaddr

$00d

USART Transmit Complete Interrupt

Передача по USART завершена

ADCCaddr

$00e

ADC Interrupt

Преобразование АЦП завершено

ERDYaddr

$00f

EEPROM Interrupt

Готовность EEPROM

ACIaddr

$010

Analog Comparator Interrupt

Срабатывание компаратора

TWIaddr

$011

Irq. vector address for Two-Wire Interface

Прерывание интерфейса TWI

SPMaddr

$012

SPM complete Interrupt

Готовность SPM

SPMRaddr

$012

SPM complete Interrupt

Готовность SPM




1. Лабораторная работа 3 по теме работа с файлами и каталогами Выполнил ст
2. Тема задания- Принцип возможных перемещений возможное перемещение 6
3. Дионисий
4. Зубодробительное правило 1
5. Beyond resonble doubt; but the plintiff in civil ction is required to prove his cse on the blnce of probbilities
6. Аутгоинговый туроператор специализируется на разработке продвижении и реализации выездных международны
7. Лабораторная работа 13 РАБОТА С ФАЙЛАМИ
8. Основание СНПЗ, люди завода 40е - 50е годы
9. Тема- Философия Древнего Китая Отличительные особенности философии Древнего Китая- Слабая связь с
10. Тема- Зовнішньополітичні пріоритети провідних країн світу 1.
11.  Знаки изгибающих моментов и поперечных сил такие же как и при расчёте на постоянную и снеговую на
12.  листопада 2013р
13. ТЕМА ДОБРОВОЛЬНОЙ СЕРТИФИКАЦИИ ЭКСПЕРТОВ СИСТЕМЫ СЕРТИФИКАЦИИ ГОСТ Р
14. Виды генных мутаций.html
15. Организационное обеспечение деятельности учреждений социальной защиты населения и органов Пенсионного фонда РФ
16. валлийский и галльский
17. ВосточноСибирский Государственный технологический университет ГОУ ВПО ВСГТУ РАСЧЕТ ОБ
18. тема представления мира основанная на том что человек ощущает связь с неким бытием высшим существованием и
19. татарское нашествие и иго 12231240
20. Часовые побережья