МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ————————————— НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «МЭИ» —————————————————————————————— В.А. Курдин МИКРОКОНТРОЛЛЕРЫ С ЯДРОМ AVR ЛАБОРАТОРНЫЙ ПРАКТИКУМ по курсу «Микропроцессорные системы» для студентов, обучающихся по направлению «Информатика и вычислительная техника» Москва Издательство МЭИ 2017 УДК 621.398 ББК 32.973.26-04 К 93 Утверждено учебным управлением МЭИ Подготовлено на кафедре вычислительной техники Рецензент: канд. техн. наук, проф. В.А. Логинов Курдин В.А. К 93 Микроконтроллеры с ядром AVR: лабораторный практикум / В.А. Курдин. — М.: Издательство МЭИ, 2017. — 28 с. Приведены задания для лабораторных работ, посвященных разработке и отладке ПО для микроконтроллеров с ядром AVR. Все работы проводятся на стенде “МК ATtiny26L”, описание которого содержится в тексте. Продолжительность лабораторных занятий – 4 ч. Для студентов профиля САПР, обучающихся по направлению «Информатика и вычислительная техника». УДК 621.398 ББК 32.973.26-04 © Национальный исследовательский университет «МЭИ», 2017 Предисловие Целью данного комплекса лабораторных работ является практическое изучение микроконтроллеров фирмы Atmel с ядром AVR. В ходе выполнения предлагаемых работ студенты ознакомятся с RISCархитектурой данных микроконтроллеров, овладеют навыками разработки и отладки ПО для них, а также получат опыт работы с некоторыми периферийными блоками МК семейства Tiny. Общий объем работ рассчитан на 4 лабораторных занятия. Продолжительность лабораторных занятий – 4 часа. Комплекс лабораторных работ состоит из четырех частей: «Изучение лабораторного стенда на базе микроконтроллера AtTiny26L», «Работа с EEPROM микроконтроллеров AVR», «Программная реализация UART, работа с COM-портом», «Использование прерываний от таймера». Все работы выполняются на стенде “МК ATtiny26L”, разработанном на кафедре вычислительной техники НИУ “МЭИ”. 3 Лабораторная работа №1 Изучение лабораторного стенда на базе микроконтроллера AtTiny26L Схема стенда На Рис. 1.1 приведена структурная схема стенда “МК ATtiny26L”. Стенд состоит из персонального компьютера (ПК) и модуля с установленным микроконтроллером (МК) ATtiny26L фирмы Atmel. Питание на плату МК подается с порта USB ПК. Программирование МК осуществляется с помощью программатора Altera ByteBlaster, который подключается к МК по шине SPI (Serial Peripheral Interface, последовательный периферийный интерфейс), а к ПК – через параллельный порт (LPT). Для обмена данными между ПК и МК используется протокол универсального асинхронного приемопередатчика (UART, Universal Asynchronous Receiver-Transmitter). При этом для согласования уровней между последовательным портом (COM) ПК и выводами МК используется преобразователь уровней. Рис. 1.1. Структурная схема стенда “МК ATtiny26L” Функциональная электрическая схема модуля МК ATtiny26L приведена на Рис. 1.2. Выводы 1 и 3 микроконтроллера реализуют интерфейс I2C и используются для подключения внешней flash-памяти. Выводы 1, 2, 3 и 7 используются для программирования микроконтроллера по интерфейсу SPI. Вывод аппаратного сброса RESET через подтягивающий резистор подключен к цепи питания. Питание микроконтроллера осуществляется от стабилизатора 3.3 В (не показан на схеме). К выводам 12 и 13 микроконтроллера (PORTA5 и PORTA6) подключается преобразователь уровней, связывающий микроконтроллер с последовательным портом ПК. 4 Вывод 11 (PORTA7) используется для управления состоянием светодиода (LED, Light-Emitting Diode). Как видно из схемы, высокий уровень напряжения на данном выходе выключает (гасит) светодиод, а низкий уровень включает его. Резистор, подключенный последовательно co светодиодом, служит для ограничения тока, протекающего через светодиод, что необходимо для защиты светодиода от повреждения. Рис. 1.2. Функциональная схема модуля МК ATtiny26L Разработка и загрузка ПО для AVR Разработка программ для МК с ядром AVR осуществляется в бесплатной среде Atmel AVR Studio (более поздние версии имеют название Atmel Studio). В данной среде возможна разработка на языке ассемблер микроконтроллеров AVR или на C (необходим внешний компилятор AVR-GCC). Также AVR Studio предоставляет возможность 5 отладки проектов при помощи встроенного симулятора, что может быть удобно при домашней подготовке. Среда разработки AVR Studio не поддерживает в качестве инструмента загрузки ПО программатор Altera ByteBlaster, поэтому для загрузки полученных после сборки проекта бинарных файлов используется бесплатная утилита AVReal. Утилита не имеет графического интерфейса, управление ей осуществляется через параметры командной строки. Пример ключей запуска программы показан ниже: avreal32.exe +tiny26 -p1 -ab -o250kHz -e -w -v -fCKSEL=1 test.hex В данном случае, утилита будет осуществлять загрузку ПО в МК ATtiny26 (+tiny26) при помощи программатора ByteBlaster (-ab), подключенному к порту LPT1 (-p1). Осуществляются операции “стирание кристалла” (-e), запись ПО в flash-память и верификация (-w -v), а также изменение конфигурационных битов, имеющих название CKSEL и отвечающих за тактовую частоту МК (-fCKSEL=1). Параметр -o задает частоту тактового сигнала SPI (SCK), т.е. влияет на скорость загрузки ПО. Более подробную информацию о ключах запуска приложения можно получить из внутренней справки. Внимание! Работоспособными вариантами конфигурационных битов CKSEL для данного стенда являются значения 1, 2, 3 и 4, соответствующие тактовой частоте МК 1, 2, 4 и 8 МГц. После записи в данные ячейки других значений модуль МК (временно) утратит работоспособность. Это связано с тем, что перечисленные варианты соответствуют схеме тактирования с внутренней RC-цепочкой, тогда как остальные варианты требуют оборудования, отсутствующего в составе модуля. Более подробно о схемах тактирования МК будет рассказано в рамках лекционного курса. Текст программы “Hello world” Ниже приведен пример программы для МК ATtiny26L, осуществляющей мигание светодиодом. Подобные программы в мире микроконтроллеров являются аналогами классических учебных программ “Hello world”. В дальнейшем будем называть так же и приведенную ниже программу. ;**** Includes **** .include "tn26def.inc" .equ LED = 7 ;объявление символьной константы LED, равной 7 ;**** Global Register Variables **** .def temp = r20 ;присвоение регистру r20 имени temp 6 .def medium = r23 ;присвоение регистру r23 имени medium .def coarse = r24 ;присвоение регистру r24 имени coarse .def hard = r25 ;присвоение регистру r25 имени hard ;**** Таблица векторов прерываний **** .cseg ;все, что идет после этой директивы, находится в памяти программ .org 0 ;адрес следующей строки кода указан в данной директиве (0000) rjmp RESET ;Вектор сброса reti ;rjmp EXT_INT0 вектор внешнего прерывания reti ;rjmp PIN_CHANGE ;вектор прерывания по изменению состояния выводов reti ;rjmp TIM1_CMP1A ;вектор прерывания по совпадению с A таймера T1 reti ;rjmp TIM1_CMP1B ;вектор прерывания по совпадению с B таймера T1 reti ;rjmp TIM1_OVF ;вектор прерывания по переполнению таймера T1 reti ;rjmp TIM0_OVF ;вектор прерывания по переполнению таймера T0 reti ;rjmp USI_STRT ;вектор прерывания по обнаружению условия старта USI reti ;rjmp USI_OVF ;вектор прерывания по переполнению USI reti ;rjmp EE_RDY ;вектор прерывания по готовности EEPROM reti ;rjmp ANA_COMP ;вектор прерывания от аналогового компаратора reti ;rjmp ADC ;вектор прерывания по завершению преобразования АЦП ;*** подпрограмма задержки *** delay: ldi coarse, 0x0f ;загружаем в регистр coarse (r24) число 0x0f crs: ldi medium, 0x7f ;загружаем в регистр medium (r23) число 0x7f med: ldi hard, 0xff ;загружаем в регистр hard (r25) число 0xff hrd: dec hard ;декрементируем значение в регистре hard brne hrd ;если не 0, то на метку hrd dec medium ;декрементируем значение в регистре medium brne med ;если не 0, то на метку med dec coarse ;декрементируем значение в регистре coarse brne crs ;если не 0, то на метку crs ret ;возврат из подпрограммы ;*** подпрограмма мигания LED *** flash: sbi PORTA, LED ;выставляем 1 в разряде LED (7) регистра PORTA rcall delay ;вызываем подпрограмму delay cbi PORTA, LED ;выставляем 0 в разряде LED (7) регистра PORTA rcall delay ;вызываем подпрограмму delay ret ;возврат из подпрограммы ;*** подпрограмма начальной инициализации *** RESET: ;инициализация стека ldi temp,RAMEND ;загружаем в temp (r20) константу RAMEND 7 out SP, Temp ;записываем в РВВ SP содержимое регистра temp ;все выводы порта A конфигурируются как выходы ldi temp,0xff ;загружаем в регистр temp (r20) число 0xff out DDRA,temp ;записываем в регистр DDRA содержимое temp ;выключаем компаратор для экономии sbi ACSR,ACD ;выставляем 1 в разряде ACD регистра ACSR rjmp main ;переходим на метку main ;*** основная подпрограмма *** main: rcall flash ;вызываем подпрограмму flash rjmp main ;переходим обратно на main ;**** End of File **** Продолжительность задержки в процессорных циклах можно вычислить по формуле 𝐷𝑒𝑙𝑎𝑦𝐶𝑌𝐶𝐿𝐸𝑆 = ((3 × ℎ𝑎𝑟𝑑 − 1 + 1 + 2 + 1) × 𝑚𝑒𝑑𝑖𝑢𝑚 − 1 + 1 + 2 + 1) × 𝑐𝑜𝑎𝑟𝑠𝑒 + 3 + 4 = ((3 × ℎ𝑎𝑟𝑑 + 3) × 𝑚𝑒𝑑𝑖𝑢𝑚 + 3) × 𝑐𝑜𝑎𝑟𝑠𝑒 + 7 (для вывода этой формулы необходимо воспользоваться информацией о времени выполнении команд, приведенной в Приложении 1). При coarse >> medium >> hard выражение можно упростить до 𝐷𝑒𝑙𝑎𝑦𝐶𝑌𝐶𝐿𝐸𝑆 ≈ 3 × ℎ𝑎𝑟𝑑 × 𝑚𝑒𝑑𝑖𝑢𝑚 × 𝑐𝑜𝑎𝑟𝑠𝑒. 𝐷𝑒𝑙𝑎𝑦𝐶𝑌𝐶𝐿𝐸𝑆 Соответственно, время задержки 𝑡𝑑𝑒𝑙𝑎𝑦 = . 𝑓𝐶𝐿𝐾 Кратко о регистрах В программе “Hello world” можно увидеть два вида регистров МК с ядром AVR. Для нужд программиста в МК имеется 32 регистра общего назначения (РОН) R0 – R31. В приведенной выше программе они фигурируют под символьными именами temp, hard, medium и coarse, объявленными с помощью директив .def. Второй вид регистров – регистры ввода-вывода (далее РВВ), которые используются для управления работой МК и его периферийных блоков. В программе используются РВВ DDRA (Data Direction Register A), PORTA (Port A), ACSR (Analog Comparator Status Register) и SP (Stack Pointer). РОН и РВВ имеют различные механизмы обращения, хотя расположены в едином адресном пространстве памяти данных. Подробнее регистры и способы обращения к ним будут рассмотрены в рамках лекционного курса. Кратко о портах ввода-вывода Микроконтроллер ATtiny26L содержит два 8-разрядных порта ввода-вывода (не путать с регистрами ввода-вывода!): порт A и порт B. Таким образом, у программиста имеется в распоряжении 16 8 пользовательских линий ввода-вывода (GPIO, General Purpose InputOutput). Для работы с каждым из двух портов ввода-вывода имеется по три регистра ввода-вывода – DDRx (регистр направления данных порта x), PORTx (регистр данных порта x) и PINx (регистр состояния выводов порта x), где x – имя порта (A или B). Соответственно, каждому выводу порта соответствуют три разряда регистров: PORTxn, DDRxn и PINxn, где x – имя порта (A или B), а n – номер вывода порта. Для работы вывода как выхода необходимо записать в разряд DDRxn “1” и, меняя значение разряда PORTxn, изменять значение сигнала на выходе. Для работы вывода как входа необходимо записать в разряд DDRxn “0” и считывать значение PlNxn, чтобы получить значение сигнала на входе. 1. 2. 3. 4. 5. 6. Задание на лабораторную работу №1 Изучите схему стенда (Рис. 1.1, Рис. 1.2). Изучите пример программы “Hello world”, приведенный выше. Создайте в среде разработки AVR Studio проект, включающий в себя файл с примером. В качестве платформы для отладки (Debug platform) при создании проекта используйте симулятор AVR (AVR Simulator), что позволит в дальнейшем отлаживать работу программы на встроенном симуляторе. Произведите сборку проекта и загрузите полученный файл hex в микроконтроллер с помощью утилиты AVReal (пример ключей запуска утилиты приведен выше). Измените тактовую частоту микроконтроллера (далее fCLK), изменив конфигурационные биты CKSEL. Проконтролируйте изменение частоты светодиода (далее fLED). При помощи значений, загружаемых в регистры coarse, medium и hard, подстройте fLED как можно ближе к значению, соответствующему варианту бригады (Табл. 1.1). При этом тактовую частоту МК также необходимо взять из Табл. 1.1. 9 Таблица 1.1 Варианты заданий лабораторной работы №1 Вариант fCLK, МГц fLED, Гц 1 1 0.125 2 2 0.125 3 4 0.125 4 1 0.25 5 2 0.25 6 4 0.25 7 1 0.5 8 2 0.5 9 4 0.5 10 8 0.5 11 1 1 12 2 1 13 4 1 14 8 1 15 1 2 16 2 2 17 4 2 18 8 2 Лабораторная работа №2 Работа с EEPROM микроконтроллеров AVR Память микроконтроллеров с ядром AVR МК с ядром AVR имеют гарвардскую архитектуру, которая характеризуется раздельной памятью команд и памятью данных, шины доступа к ним также различны. Память данных состоит из трех областей – регистровой памяти, оперативной памяти и энергонезависимого ЭСППЗУ (электрически стираемого программируемого постоянного запоминающего устройства, EEPROM, Electrically Erasable Programmable Read-Only Memory). Карта памяти микроконтроллеров с ядром AVR семейства Tiny приведена на Рис. 2.1. 10 Рис. 2.1. Карта памяти МК семейства Tiny Как видно из приведенной карты памяти, РОН и РВВ находятся в одном адресном пространстве с ОЗУ. Обращение к ним возможно как с помощью специализированных команд, предназначенных для доступа к РОН или РВВ, так и с помощью команд доступа к ОЗУ. EEPROM имеет отдельное от ОЗУ и регистровой памяти адресное пространство и специальные механизмы обращения. Рассмотрим эти механизмы подробнее. Механизмы обращения к EEPROM Для обращения к EEPROM используются три регистра вводавывода: регистр адреса EEAR (EEPROM Address Register), регистр данных EEDR (EEPROM Data Register) и регистр управления EECR (EEPROM Control Register). В регистр EEAR загружается адрес ячейки, к которой будет производиться обращение. Назначение регистра EEDR меняется в зависимости от задачи. При записи в этот регистр загружаются данные, которые должны быть помещены в EEPROM, а при чтении из этого регистра считываются данные, извлеченные из EEPROM. Регистр EECR используется для управления доступом к EEPROM-памяти, формат этого регистра приведен на Рис. 2.2, а назначение различных разрядов этого регистра приведено в Табл. 2.1. Рис. 2.2. Формат регистра EECR 11 Таблица 2.1 Назначение разрядов регистра EECR Разряд Название Описание 7…4 – Не используются 3 EERIE Разрешение прерывания от EEPROM. Управляет генерацией прерывания, возникающего при завершении цикла записи в EEPROM. Если “1”, то прерывания разрешены (если флаг I регистра SREG также установлен в “1”). 2 EEMWE Управление разрешением записи в EEPROM. Если “1”, то при записи в разряд EEWE “1” происходит запись данных в EEPROM. В противном случае установка EEWE в “1” не производит никакого эффекта. После программной установки этот разряд сбрасывается аппаратно через 4 машинных цикла 1 EEWE Разрешение записи в EEPROM. При установке этого разряда в “1” происходит запись данных в EEPROM (если EEMWE равен “1”). Сбрасывается аппаратно. 0 EERE Разрешение чтения из EEPROM. После установки этого разряда в “1” выполняется чтение данных из EEPROM. По окончании чтения этот разряд сбрасывается аппаратно. Таким образом, процедура записи в EEPROM должна выглядеть следующим образом: 1. Дождаться готовности EEPROM к записи данных (ждать пока не сбросится флаг EEWE (EEPROM Write Enable) регистра EECR). 2. Запретить прерывания (если они разрешены). 3. Загрузить байт данных в регистр EEDR, а требуемый адрес — в регистр EEAR. 4. Установить в “1” флаг EEMWE (EEPROM Memory Write Enable) регистра EECR. 5. В течение 4-х машинных циклов после установки флага EEMWE записать «1» в разряд EEWE регистра EECR. 6. Разрешить прерывания (если были запрещены). Процедура чтения из EEPROM проще и состоит из следующих шагов: 1. Дождаться завершения процесса записи (ждать пока не сбросится флаг EEWE (EEPROM Write Enable) регистра EECR). 2. Загрузить адрес ячейки памяти, к которой будет происходить обращение, в регистр EEAR. 3. Установить в “1” флаг EERE (EEPROM Read Enable) регистра EECR. 4. Скопировать считанный из EEPROM байт из регистра EEDR (чтение из EEPROM всегда выполняется за один цикл, к тому же, процессор автоматически пропускает 4 машинных цикла после установки разряда EERE в “1”). 12 Задание на лабораторную работу №2 На основе программы “Hello world”, приведенной в описании к лабораторной работе №1, написать на ассемблере микроконтроллера ATtiny26L программу, реализующую мигание светодиодом с частотой, значение которой меняется при каждом новом запуске микроконтроллера. При первом включении частота мигания должна быть равна fLED1, при втором – fLED2, при третьем – fLED3, при четвертом – снова fLED1 и т.д. Для реализации поставленной задачи необходимо сохранять в EEPROM текущий номер частоты, который должен считываться при инициализации микроконтроллера, инкрементироваться и записываться обратно в EEPROM. Тактовая частота МК fCLK и значения частот fLED1, fLED2 и fLED3 для различных вариантов приведены в Табл. 2.2. Таблица 2.2 Варианты заданий лабораторной работы №2 Вариант fCLK, МГц fLED1, Гц fLED2, Гц fLED2, Гц 1 1 0.25 0.5 1 2 2 0.25 0.5 1 3 4 0.25 0.5 1 4 1 0.5 1 2 5 2 0.5 1 2 6 4 0.5 1 2 7 1 1 2 4 8 2 1 2 4 9 4 1 2 4 10 1 0.25 1 2 11 2 0.25 1 2 12 4 0.25 1 2 13 1 0.5 2 4 14 2 0.5 2 4 15 4 0.5 2 4 16 1 0.25 0.5 2 17 2 0.25 0.5 2 18 4 0.25 0.5 2 13 Лабораторная работа №3 Программная реализация UART, работа с COM-портом Протокол UART UART – универсальный асинхронный приемопередатчик, интерфейс для связи цифровых устройств, предназначенный для передачи данных в последовательной форме. Распространённым стандартом физического уровня для UART является RS-232, реализованный в последовательном порте ПК. Стандарт RS-232 описывает требования к логическим уровням сигналов, тогда как UART – это протокол взаимодействия, не описывающий подобных требований. Данные по протоколу UART передаются последовательно, побитно, в виде кадров, каждый из которых содержит старт-бит, биты данных, опциональный бит четности и один или несколько стоп-битов. На Рис. 3.1 показан формат кадра, соответствующий передаче данных с параметрами 8 бит, 1 стоп-бит, бит четности отсутствует. Рис. 3.1. Формат кадра UART В состоянии ожидания линия удерживается в “1”. Перед передачей данных передается так называемый старт-бит (S), вызывающий переход состояния линии из “1” в “0”. Приемник по переходу линии из “1” в “0” обнаруживает начало передачи нового кадра. Далее побитно передаются данные, начиная с младших разрядов, разрядность передаваемых данных может быть равна 8 или 9. Затем передается один или несколько стопбитов (P), которые представляют собой логическую “1”, переводящую линию обратно в исходное состояние до передачи очередного старт-бита. Должен быть по крайней мере один стоп-бит, чтобы переход из “1” в “0”, показывающий приход очередного старт-бита, мог быть обнаружен. Также перед стоп-битом может передаваться бит четности. Одним из самых важных параметров UART является скорость 1 передачи (baudrate), измеряемая в бит/с. Обратная величина T= baudrate определяет время передачи одного символа. Для того, чтобы данные были получены правильно, приемник должен знать значение T и анализировать линию данных в середине передачи каждого из битов. Приемник синхронизируется с передатчиком по срезу старт-бита и ждет время 1.5T, после чего с интервалом T считывает биты данных, приходящие от передатчика. 14 Алгоритмы приема и передачи символа через UART Для облегчения программной реализации UART на Рис. 3.2 приведены структурные схемы алгоритмов приема (getchar) и передачи (putchar) символа через UART. Рис. 3.2. Структурные схемы алгоритмов передачи и приема символа через UART При написании программы с использованием приведенных алгоритмов наиболее важной является реализация подпрограммы задержки 0.5 бита (на время 0.5T). Для этого предлагается воспользоваться подпрограммой задержки UART_delay, приведенной ниже. 15 UART_delay: UART_delay1: ldi temp,b dec temp brne UART_delay1 ret Для того, чтобы подобрать коэффициент b, отвечающий за продолжительность задержки, можно воспользоваться следующими соображениями. 𝑓𝐶𝐿𝐾 Время передачи одного бита в тактах 𝑐 = . Необходимую 𝑏𝑎𝑢𝑑𝑟𝑎𝑡𝑒 продолжительность задержки 0.5 бита, соответственно, можно вычислить 𝑐−𝑥 как 𝑑 = , где x – число тактов, нужное для выполнения блоков между 2 пунктирными линиями структурных схем без задержки. С другой стороны, время выполнения вышеприведенной подпрограммы задержки 𝑑 = 1 + (3𝑏 − 1) + 4 = 3𝑏 + 4, и 3 такта уйдет на вызов самой подпрограммы задержки. Таким образом, 3𝑏 + 7 = 𝑓𝐶𝐿𝐾 −𝑥−14 𝑏𝑎𝑢𝑑𝑟𝑎𝑡𝑒 𝑓𝐶𝐿𝐾 −𝑥 𝑏𝑎𝑢𝑑𝑟𝑎𝑡𝑒 2 , и, следовательно, 𝑏 = . Подсчитав x, т.е. количество циклов, 6 необходимое на “полезные” действия на каждой итерации, можно вычислить константу b и подставить ее значение в подпрограмму задержки. 1. 2. 3. 4. Задание на лабораторную работу №3 Написать на ассемблере микроконтроллера ATtiny26L программу, содержащую процедуры отправки символа на UART и приема символа с UART (8 бит, 1 стоп-бит, без бита четности, тактовая частота МК и скорость передачи указаны в Табл. 3.1). Реализовать вывод принятых символов обратно на UART (в конце подпрограммы getchar запускаем подпрограмму putchar). В теле основной программы зациклить вызов подпрограммы getchar. Удостовериться в правильном отображении вводимых в терминальной программе символов. Таблица 3.1 Варианты задания для лабораторной работы №3 Вариант fCLK baudrate 1 1 МГц 1200 2 1 МГц 2400 3 2 МГц 9600 4 2 МГц 19200 5 4 МГц 4800 6 4 МГц 9600 7 8 МГц 38400 8 8 МГц 57600 16 Лабораторная работа №4 Использование прерываний от таймера Общие сведения о прерываниях в МК с ядром AVR Прерывание прекращает нормальный ход программы для выполнения приоритетной задачи, определяемой внутренним или внешним событием микроконтроллера. При возникновении прерывания микроконтроллер сохраняет в стеке содержимое счетчика команд PC и загружает в него адрес соответствующего вектора прерывания. По этому адресу должна находиться команда относительного перехода к подпрограмме обработки прерывания. Последней командой подпрограммы обработки прерывания должна быть команда RETI, которая обеспечивает возврат в основную программу и восстановление предварительно сохраненного счетчика команд. Для общего разрешения прерываний флаг I регистра SREG должен быть установлен в “1”. Разрешение или запрещение (маскирование) отдельных прерываний производится установкой или сбросом соответствующих разрядов регистров масок прерываний Таймеры и прерывания от них в МК ATtiny26L В составе МК ATtiny26L имеется два 8-разрядных таймера/счетчика общего назначения. Первый таймер (таймер Т0) может использоваться либо для отсчета и измерения временных интервалов, либо для счета внешних импульсов. При переполнении счетного регистра таймера генерируется запрос на прерывание. Второй таймер (таймер Т1) может генерировать запрос на прерывание не только при переполнении счетного регистра, но и при достижении счетным регистром заданного значения. Кроме того, этот таймер может использоваться для генерации сигнала с ШИМ. Также в составе МК имеется сторожевой таймер, который используется для предотвращения зацикливания программы. Для управления прерываниями от таймеров используется регистр TIMSK (Timer/Counter Interrupt MaSK – регистр маски прерываний от таймеров/счетчиков), его формат показан на Рис. 4.1, а назначение разрядов описано в Табл. 4.1. Рис. 4.1. Формат регистра TIMSK 17 Таблица 4.1 Назначение разрядов регистра TIMSK Разряд Название Описание 7 – Не используется 6 OCIE1A Флаг разрешения прерывания по событию “совпадение с A” таймера/счетчика T1 5 OCIE1B Флаг разрешения прерывания по событию “совпадение с B” таймера/счетчика T1 4…3 – Не используются 2 TOIE1 Флаг разрешения прерывания по переполнению таймера/счетчика T1 1 TOIE0 Флаг разрешения прерывания по переполнению таймера/счетчика T0 0 – Не используется Регистр TIFR (Timer/Counter Interrupt Flag Register – регистр флагов прерываний от таймеров/счетчиков) предназначен для индикации наступления прерываний от таймеров. Каждый флаг этого регистра сбрасывается аппаратно при запуске подпрограммы обработки соответствующего прерывания или программно записью в него “1”. Рис. 4.2. Формат регистра TIFR Таблица 4.2 Назначение разрядов регистра TIFR Разряд Название Описание 7 – Не используется 6 OCF1A Флаг устанавливается в “1” при наступлении события “совпадение с A” таймера/счетчика T1 5 OCF1B Флаг устанавливается в “1” при наступлении события “совпадение с B” таймера/счетчика T1 4…3 – Не используются 2 TOV1 Флаг устанавливается в “1” при переполнении таймера/счетчика T1 1 TOV0 Флаг устанавливается в “1” при переполнении таймера/счетчика T0 0 – Не используется Таймер/счетчик T0 В состав T0 входят 2 регистра (регистр управления TCCR0 и счетный регистр TCNT0), а также блок управления таймером. Флаг переполнения счетного регистра таймера TOV0 находится в регистре TIFR. Разрешение/запрещение прерываний от таймера осуществляется установкой/сбросом флага TOIE0 регистра TIMSK. 18 Счетный регистр TCNT0 доступен в любой момент времени как для чтения, так и для записи. После подачи напряжения питания в регистре TCNT0 находится нулевое значение. При переходе таймера/счетчика из состояния 0xFF в состояние 0x00 устанавливается флаг TOV0 регистра TIFR и генерируется запрос на прерывание. Разрешение прерывания осуществляется установкой в “1” разряда TOIE0 регистра TIMSК при условии, что флаг общего разрешения прерываний I регистра SREG также установлен в “1”. Управление таймером/счетчиком Т0 осуществляется с помощью регистра управления таймером TCCR0. Формат этого регистра приведен на Рис 4.3 и в Табл.4.3. Рис. 4.3. Формат регистра TCCR0 Таблица 4.3 Разряд 7…4 3 2…0 Назначение разрядов регистра TCCR0 Описание Не используются Сброс предделителя таймера/счетчика Т0. При установке в “1” происходит сброс предделителя Т0. Бит сбрасывается аппаратно после завершения операции. CS02…CS00 Выбор источника тактового сигнала (см. Табл. 4.4) Название – PSR0 Таблица 4.4 Источники тактового сигнала таймера/счетчика T0 CS02 CS01 CS00 Источник тактового сигнала 0 0 0 Таймер/счетчик остановлен 0 0 1 CK (тактовый сигнал МК) 0 1 0 CK/8 0 1 1 CK/64 1 0 0 CK/256 1 0 1 CK/1024 1 1 0 Вывод Т0, по фронту 1 1 1 Вывод Т0, по срезу Таймер/счетчик T1 Таймер/счетчик Т1 имеет два режима тактирования: синхронный и асинхронный. Синхронный режим использует в качестве базовой частоты тактовую частоту микроконтроллера (CK), а асинхронный – периферийную частоту PCK, равную 64 МГц. 19 В состав Таймера/счетчика Т1 входят счетный регистр TCNT1, два регистра управления TCCR1A и TCCR1B, три регистра сравнения OCR1A, OCR1B и OCR1C, три 8-разрядных компаратора, а также блок управления таймером. В регистрах OCR1A и OCR1B находятся значения, с которыми сравнивается содержимое счетного регистра для генерации прерывания по совпадению с A и B соответственно. OCR1C содержит максимально возможное значение счетного регистра, т.е. значение, за которым последует генерация прерывания по переполнению счетчика и сброс счетного регистра в 0x00. Для этого разряд CTC1 регистра TCCR1B должен быть установлен в “1”. Регистр TCCR1A содержит информацию для управления ШИМ и альтернативными функциями таймера, связанными с управлением рядом выходов. Управление нужными в рамках данной лабораторной работы функциями Т1 осуществляется с помощью регистра управления таймером TCCR1B. Формат этого регистра приведен на Рис. 4.4 и в Табл. 4.5. Рис. 4.4. Формат регистра TCCR1B Таблица 4.5 Разряд 7 6 5…4 3…0 Назначение разрядов регистра TCCR1B Название Описание CTC1 Очистка таймера/счетчика Т1 при совпадении с C. Если установлен в “1”, то в следующем цикле после совпадения содержимого T1 с OCR1C он сбрасывается в 0x00, при этом генерируется запрос на прерывание по переполнению T1. PSR1 Сброс предделителя таймера/счетчика Т1. Аналогичен PSR0. – Не используются CS13…CS10 Выбор источника тактового сигнала (см. Табл. 4.6) 20 Таблица 4.6 Источники тактового сигнала таймера/счетчика T0 CS13 CS12 CS11 CS10 Источник тактового Источник тактового сигнала в асинхронном сигнала в синхронном режиме режиме 0 0 0 0 Таймер/счетчик остановлен Таймер/счетчик остановлен 0 0 0 1 PCK (периферийный CK (тактовый сигнал МК) тактовый сигнал МК) 0 0 1 0 PCK/2 CK/2 0 0 1 1 PCK/4 CK/4 0 1 0 0 PCK/8 CK/8 0 1 0 1 PCK/16 CK/16 0 1 1 0 PCK/32 CK/32 0 1 1 1 PCK/64 CK/64 1 0 0 0 PCK/128 CK/128 1 0 0 1 PCK/256 CK/256 1 0 1 0 PCK/512 CK/512 1 0 1 1 PCK/1024 CK/1024 1 1 0 0 PCK/2048 CK/2048 1 1 0 1 PCK/4096 CK/4096 1 1 1 0 PCK/8192 CK/8192 1 1 1 1 PCK/16384 CK/16384 Выбор режима работы МК (асинхронный или синхронный) осуществляется с помощью разряда PCKE регистра PLLCSR, по умолчанию включен синхронный режим. Задание на лабораторную работу №4 Написать на ассемблере микроконтроллера ATtiny26L программу, реализующую мигание светодиодом с указанной частотой. Для этого необходимо использовать прерывания от указанного в задании таймера, входящего в состав микроконтроллера. Варианты задания приведены в Табл. 21 Таблица 4.7 Варианты задания на лабораторную работу №4 Вариант fCLK, МГц fLED, Гц Прерывание 1 2 1 Переполнение T0 2 2 1 Переполнение T1 3 2 1 Совпадение с A T1 4 2 1 Совпадение с B T1 5 2 1/3 Переполнение T0 6 2 1/3 Переполнение T1 7 2 1/3 Совпадение с A T1 8 2 1/3 Совпадение с B T1 9 1 0.5 Переполнение T0 10 1 0.5 Переполнение T1 11 1 0.5 Совпадение с A T1 12 1 0.5 Совпадение с B T1 13 4 1 Переполнение T0 14 4 1 Переполнение T1 15 4 1 Совпадение с A T1 16 4 1 Совпадение с B T1 17 4 1/3 Переполнение T0 18 4 1/3 Переполнение T1 22 Приложение 1. Система команд МК ATtiny26L Мнемоника MOV Rd, Rr LDI Rd, K LD Rd, X LD Rd, X+ LD Rd, -X LD Rd, Y LD Rd, Y+ LD Rd, -Y LDD Rd,Y+q LD Rd, Z LD Rd, Z+ LD Rd, -Z LDD Rd, Z+q LDS Rd, k ST X, Rr ST X+, Rr ST -X, Rr ST Y, Rr ST Y+, Rr ST -Y, Rr STD Y+q, Rr ST Z, Rr ST Z+, Rr ST -Z, Rr STD Z+q, Rr STS k, Rr LPM LPM Rd, Z IN Rd, P OUT P, Rr PUSH Rr POP Rd Pop ADD Rd, Rr ADC Rd, Rr ADIW Rdl, K SUB Rd, Rr SUBI Rd, K SBC Rd, Rr SBCI Rd, K SBIW Rdl, K CP Rd, Rr CPC Rd, Rr CPI Rd, K TST Rd AND Rd, Rr ANDI Rd, K OR Rd, Rr ORI Rd, K Описание Операция Команды пересылки данных Пересылка между РОН Rd ← Rr Загрузка константы в РОН Rd ← K Косвенное чтение Rd ← (X) Косвенное чтение с постинкрементом Rd ← (X), X ← X + 1 Косвенное чтение с преддекрементом X ← X - 1, Rd ← (X) Косвенное чтение Rd ← (Y) Косвенное чтение с постинкрементом Rd ← (Y), Y ← Y + 1 Косвенное чтение с преддекрементом Y ← Y - 1, Rd ← (Y) Флаги Циклы – – – – – – – – 1 1 2 2 2 2 2 2 Косвенное относительное чтение Rd ← (Y + q) – 2 Косвенное чтение Косвенное чтение с постинкрементом Косвенное чтение с преддекрементом Rd ← (Z) Rd ← (Z), Z ← Z + 1 Z ← Z - 1, Rd ← (Z) – – – 2 2 2 Косвенное относительное чтение Rd ← (Z + q) – 2 – – – – – – – – – – – – – – – – – – – 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 1 1 2 2 Z,C,N,V,H Z,C,N,V,H 1 1 Z,C,N,V,S 2 Z,C,N,V,H Z,C,N,V,H Z,C,N,V,H 1 1 1 Z,C,N,V,H 1 Z,C,N,V,S 2 Z,N,V,C,H Z,N,V,C,H Z,N,V,C,H 1 1 1 Z,N,V 1 Z,N,V Z,N,V Z,N,V Z,N,V 1 1 1 1 Непосредственное чтение из ОЗУ Rd ← (k) Косвенная запись (X) ← Rr Косвенная запись с постинкрементом (X) ← Rr, X ← X + 1 Косвенная запись с преддекрементом X ← X - 1, (X) ← Rr Косвенная запись (Y) ← Rr Косвенная запись с постинкрементом (Y) ← Rr, Y ← Y + 1 Косвенная запись с преддекрементом Y ← Y - 1, (Y) ← Rr Косвенная относительная запись (Y + q) ← Rr Косвенная запись (Z) ← Rr Косвенная запись с постинкрементом (Z) ← Rr, Z ← Z + 1 Косвенная запись с преддекрементом Z ← Z - 1, (Z) ← Rr Косвенная относительная запись (Z + q) ← Rr Непосредственная запись в ОЗУ (k) ← Rr Загрузка данных из памяти программ R0 ← (Z) Загрузка данных из памяти программ Rd ← (Z) Пересылка из РВВ в РОН Rd ← P Пересылка из РОН в РВВ P ← Rr Сохранение байта в стеке STACK ← Rr Извлечение байта из стека Rd ← STACK Команды арифметических и логических операций Сложение двух РОН Rd ← Rd + Rr Сложение двух РОН с переносом Rd ← Rd + Rr + C Сложение регистровой пары с Rdh:Rdl ← Rdh:Rdl константой +K Вычитание двух РОН Rd ← Rd - Rr Вычитание константы из РОН Rd ← Rd - K Вычитание двух РОН с заемом Rd ← Rd - Rr - C Вычитание константы из РОН с Rd ← Rd - K - C заемом Вычитание константы из регистровой Rdh:Rdl ← Rdh:Rdl пары K Сравнение РОН Rd - Rr Сравнение РОН с учетом переноса Rd - Rr - C Сравнение РОН с константой Rd - K Проверка РОН на отрицательное или Rd ← Rd • Rd нулевое значение Логическое И двух РОН Rd ← Rd • Rr Логическое И РОН и константы Rd ← Rd • K Логическое ИЛИ двух РОН Rd ← Rd v Rr Логическое ИЛИ РОН и константы Rd ← Rd v K 23 EOR Rd, Rr COM Rd NEG Rd INC Rd DEC Rd LSL Rd LSR Rd ROL Rd ROR Rd ASR Rd SWAP Rd CLR Rd SER Rd RJMP k IJMP RCALL k ICALL RET RETI CPSE Rd, Rr SBRC Rr, b SBRS Rr, b SBIC P, b SBIS P, b BRBC s, k BRBS s, k BREQ k BRNE k BRCS k BRCC k BRSH k BRLO k BRMI k BRPL k BRGE k Rd ← Rd Rr Rd ← $FF - Rd Rd ← $00 - Rd Rd ← Rd + 1 Rd ← Rd - 1 Rd(n+1) ← Rd(n), Логический сдвиг влево Rd(0) ← 0 Rd(n) ← Rd(n+1), Логический сдвиг вправо Rd(7) ← 0 Rd(0) ← C, Rd(n+1) Сдвиг влево через перенос ← Rd(n), C ← Rd(7) Rd(7) ← C, Rd(n) ← Сдвиг вправо через перенос Rd(n+1), C ← Rd(0) Rd(n) ← Rd(n+1), n = Арифметический сдвиг вправо 0..6 Rd(3..0) ← Rd(7..4), Обмен местами тетрад в РОН Rd(7..4) ← Rd(3..0) Сброс всех разрядов РОН Rd ← Rd Rd Установка всех разрядов РОН Rd ← $FF Команды передачи управления Относительный безусловный переход PC ← PC + k + 1 Косвенный безусловный переход PC ← Z Относительный вызов подпрограммы PC ← PC + k + 1 Косвенный вызов подпрограммы PC ← Z Возврат из подпрограммы PC ← STACK Возврат из подпрограммы обработки PC ← STACK прерывания Сравнение и пропуск следующей Если (Rd = Rr), то PC команды при равенстве ← PC + 2 (3) Пропуск следующей команды, если Если (Rr.b = 0), то разряд РОН сброшен PC ← PC + 2 (3) Пропуск следующей команды, если Если (Rr.b = 1) , то разряд РОН установлен PC ← PC + 2 (3) Пропуск следующей команды, если Если (P.b = 0) , то PC разряд РВВ сброшен ← PC + 2 (3) Пропуск следующей команды, если Если (P.b = 1), то PC разряд РВВ установлен ← PC + 2 (3) Переход, если флаг s регистра SREG Если (SREG.s = 0), сброшен то PC ← PC + k + 1 Переход, если флаг s регистра SREG Если (SREG.s = 1), установлен то PC ← PC + k + 1 Если (Z = 1), то PC Переход по равенству ← PC + k + 1 Если (Z = 0), то PC Переход по неравенству ← PC + k + 1 Если (C = 1), то PC Переход по переносу ← PC + k + 1 Если (C = 0), то PC Переход, если нет переноса ← PC + k + 1 Если (C = 0), то PC Переход по “больше или равно” ← PC + k + 1 Если (C = 1), то PC Переход по “меньше” ← PC + k + 1 Если (N = 1), то PC Переход по отрицательному значению ← PC + k + 1 Переход по положительному Если (N = 0), то PC значению ← PC + k + 1 Переход по “больше или равно” (числа Если (N V = 0), то со знаком) PC ← PC + k + 1 Исключающее ИЛИ двух РОН Перевод в обратный код Перевод в дополнительный код Инкремент РОН Декремент РОН 24 Z,N,V Z,C,N,V Z,C,N,V,H Z,N,V Z,N,V 1 1 1 1 1 Z,C,N,V 1 Z,C,N,V 1 Z,C,N,V 1 Z,C,N,V 1 Z,C,N,V 1 – 1 Z,N,V – 1 1 – – – – – 2 2 3 3 4 I 4 – 1/2/3 – 1/2/3 – 1/2/3 – 1/2/3 – 1/2/3 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 BRLT k BRHS k BRHC k BRTS k BRTC k BRVS k BRVC k BRIE k BRID k SBR Rd, K CBR Rd, K SBI P, b CBI P, b BSET s BCLR s BST Rr, b BLD Rd, b SEC CLC SEN CLN SEZ CLZ SEI CLI SES CLS SEV CLV SET CLT SEH CLH NOP SLEEP WDR Если (N V = 1), то PC ← PC + k + 1 Если (H = 1), то PC Переход по половинному переносу ← PC + k + 1 Переход, если нет половинного Если (H = 0), то PC переноса ← PC + k + 1 Если (T = 1), то PC Переход, если флаг T установлен ← PC + k + 1 Если (T = 0), то PC Переход, если флаг T сброшен ← PC + k + 1 Переход по переполнению Если (V = 1), то PC дополнительного кода ← PC + k + 1 Переход, если нет переполнения Если (V = 0), то PC дополнительного кода ← PC + k + 1 Если (I = 1), то PC ← Переход, если прерывания разрешены PC + k + 1 Если (I = 0), то PC ← Переход, если прерывания запрещены PC + k + 1 Команда операций с битами Установка разряда(ов) РОН Rd ← Rd v K Сброс разряда(ов) РОН Rd ← Rd • ($FF - K) Установка разряда РВВ P.b ← 1 Сброс разряда РВВ P.b ← 0 Установка флага s регистра SREG SREG.s ← 1 Сброс флага s регистра SREG SREG.s ← 0 Запись разряда РОН в флаг T T ← Rr.b Загрузка разряда РОН из флага T Rd.b ← T Установка флага переноса C←1 Сброс флага переноса C←0 Установка флага отрицательного N←1 числа Сброс флага отрицательного числа N←0 Установка флага нуля Z←1 Сброс флага нуля Z←0 Общее разрешение прерываний I←1 Общее запрещение прерываний I←0 Установка флага знака S←1 Сброс флага знака S←0 Установка флага переполнения V←1 дополнительного кода Сброс флага переполнения V←0 дополнительного кода Установка флага T T←1 Сброс флага T T←0 Установка флага половинного H←1 переноса Сброс флага половинного переноса H←0 Служебные команды Нет операции Переход в спящий режим Сброс сторожевого таймера Переход по “меньше нуля” (числа со знаком) 25 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 – 1/2 Z,N,V Z,N,V – – SREG.s SREG.s T – C C 1 1 2 2 1 1 1 1 1 1 N 1 N Z Z I I S S 1 1 1 1 1 1 1 V 1 V 1 T T 1 1 H 1 H 1 – – – 1 1 1 Приложение 2. Регистры ввода-вывода МК ATtiny26L Адрес Имя регистра $3F ($5F) SREG $3E ($5E) Зарезервирован $3D ($5D) SP $3C ($5C) Зарезервирован $3B ($5B) GIMSK $3A ($5A) GIFR $39 ($59) TIMSK $38 ($58) TIFR $37 ($57) Зарезервирован $36 ($56) Зарезервирован $35 ($55) MCUCR $34 ($54) MCUSR $33 ($53) TCCR0 $32 ($52) TCNT0 $31 ($51) OSCCAL $30 ($50) TCCR1A $2F ($4F) TCCR1B $2E ($4E) TCNT1 $2D ($4D) OCR1A $2C ($4C) OCR1B $2B ($4B) OCR1C $2A ($4A) Зарезервирован $29 ($49) PLLCSR $28 ($48) Зарезервирован $27 ($47) Зарезервирован $26 ($46) Зарезервирован $25 ($45) Зарезервирован $24 ($44) Зарезервирован $23 ($43) Зарезервирован $22 ($42) Зарезервирован $21 ($41) WDTCR $20 ($40) Зарезервирован $1F ($3F) Зарезервирован $1E ($3E) EEAR $1D ($3D) EEDR $1C ($3C) EECR $1B ($3B) PORTA $1A ($3A) DDRA $19 ($39) PINA $18 ($38) PORTB $17 ($37) DDRB $16 ($36) PINB $15 ($35) Зарезервирован $14 ($34) Зарезервирован $13 ($33) Зарезервирован $12 ($32) Зарезервирован $11 ($31) Зарезервирован $10 ($30) Зарезервирован $0F ($2F) USIDR $0E ($2E) USISR $0D ($2D) USICR $0C ($2C) Зарезервирован $0B ($2B) Зарезервирован $0A ($2A) Зарезервирован $09 ($29) Зарезервирован $08 ($28) ACSR $07 ($27) ADMUX $06 ($26) ADCSR $05 ($25) ADCH $04 ($24) ADCL $03 ($23) Зарезервирован $02 ($22) Зарезервирован $01 ($21) Зарезервирован $00 ($20) Зарезервирован Бит 7 I SP7 - Бит 6 Бит 5 Бит 4 Бит 3 Бит 2 Бит 1 Бит 0 T H S V N Z C SP6 SP5 SP4 SP3 SP2 SP1 SP0 INT0 PCIE1 PCIE0 INTF0 PCIF OCIE1A OCIE1B TOIE1 TOIE0 OCF1A OCF1B TOV1 TOV0 PUD SE SM1 SM0 ISC01 ISC00 WDRF BORF EXTRF PORF PSR0 CS02 CS01 CS00 Счетный регистр Таймера/счетчика0 Регистр калибровки тактового генератора COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B PWM1A PWM1B CTC1 PSR1 CS13 CS12 CS11 CS10 Счетный регистр Таймера/счетчика1 Регистр совпадения с A Таймера/счетчика1 Регистр совпадения с B Таймера/счетчика1 Регистр совпадения с C Таймера/счетчика1 PCKE PLLE PLOCK WDCE WDE WDP2 WDP1 WDP0 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR1 EEAR0 Регистр данных EEPROM EERIE EEMWE EEWE EERE PORTA7 PORTA6 PORTA5 PORTA4 PORTA3 PORTA2 PORTA1 PORTA0 DDA7 DDA6 DDA5 DDA4 DDA3 DDA2 DDA1 DDA0 PINA7 PINA6 PINA5 PINA4 PINA3 PINA2 PINA1 PINA0 PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 DDB7 DDB6 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 Регистр данных универсального последовательного интерфейса (USI) USISIF USIOIF USIPF USIDC USICNT3 USICNT2 USICNT1 USICNT0 USISIE USIOIE USIWM1 USIWM0 USICS1 USICS0 USICLK USITC ACD ACBG ACO ACI ACIE ACME ACIS1 ACIS0 REFS1 REFS0 ADLAR MUX4 MUX3 MUX2 MUX1 MUX0 ADEN ADSC ADFR ADIF ADIE ADPS2 ADPS1 ADPS0 Регистр данных АЦП, старший байт Регистр данных АЦП, младший байт - 26 Список литературы 1. Техническая документация на микроконтроллеры tinyAVR фирмы Atmel. ‒ URL: http://www.atmel.com/ru/ru/products/microcontrollers/avr/tinyavr.aspx (дата обращения 31.03.2017). 2. Евстифеев А.В. Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel /А.В. Евстифеев. – М.: Издательский дом “Додэка-XXI”, 2005. 3. Таненбаум Э. Архитектура компьютера / Э. Таненбаум. – 5-е издание. – СПб.: Питер, 2007. Содержание Предисловие 3 Лабораторная работа №1. Изучение лабораторного стенда на базе микроконтроллера AtTiny26L 4 Лабораторная работа №2. Работа с EEPROM микроконтроллеров AVR 10 Лабораторная работа №3. Программная реализация UART, работа с COM-портом 14 Лабораторная работа №4. Использование прерываний от таймера 17 Приложение 1. Система команд МК ATtiny26L 23 Приложение 2. Регистры ввода-вывода МК ATtiny26 26 27 Учебное издание Курдин Владимир Александрович МИКРОКОНТРОЛЛЕРЫ С ЯДРОМ AVR ЛАБОРАТОРНЫЙ ПРАКТИКУМ по курсу «Микропроцессорные системы» для студентов, обучающихся по направлению «Информатика и вычислительная техника» Редактор издательства *** Компьютерная верстка *** Темплан издания МЭИ 2017 Подписано в печать *** Печать офсетная Формат 60×84/16 Физ.печ.л. 1,75 Тираж 100 Изд.№ 16-045 Заказ ___ Оригинал-макет подготовлен в РИО НИУ «МЭИ». 111250, Москва, Красноказарменная ул., д.14. Отпечатано в типографии НИУ «МЭИ». 111250, Москва, Красноказарменная ул., д.13. 28