Uploaded by Marinad0

Лабораторный практикум AVR

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
РОССИЙСКОЙ ФЕДЕРАЦИИ
—————————————
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «МЭИ»
——————————————————————————————
В.А. Курдин
МИКРОКОНТРОЛЛЕРЫ С ЯДРОМ 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