
- •«Встроенные системы на микроконтроллере Atmega16»
- •Оглавление
- •Введение. Управляющие системы на микроконтроллерах.
- •Характеристика микроконтроллеров семейства avr
- •1.1 Особенности микроконтроллеров
- •1.2 Характеристики микроконтроллера aTмega16
- •1.3 Условное графическое обозначение микроконтроллера
- •2 Архитектура микроконтроллера
- •2.1 Структура микроконтроллера
- •2.2 Организация программной памяти
- •Организация памяти данных
- •2.4 Арифметико-логическое устройство и регистр состояния процессора
- •Методы адресации. Форматы команд
- •Система команд
- •2.6.1 Команды передачи данных (пересылки)
- •2.6.2 Команды передачи управления
- •2.6.3 Команды арифметики и логики (вычислительные)
- •2.6.4 Команды сдвигов и операций с битами
- •2.7 Функционирование конвейера
- •3 Встроенные устройства
- •3. 1 Параллельные порты ввода/вывода
- •Подсистема прерываний микроконтроллера
- •Регистр флагов прерываний таймеров/счетчиков – tifr
- •Таймеры/счетчики
- •Общие сведения
- •Таймер/счетчик т0.
- •3.3.3 Таймер/счетчик т1.
- •Сторожевой таймер (Watchdog Timer).
- •3.4 Последовательные интерфейсы -spi и uart
- •3.4.1 Последовательный периферийный интерфейс - spi
- •3.4.2 Uart - универсальный последовательный порт
- •3.5 Аналоговый компаратор и ацп
- •3.5.1 Аналоговый компаратор
- •3.5.2 Аналого-цифровой преобразователь
- •3.6 Энергонезависимая память данных
- •4 Понятия о языках программирования микроконтроллеров
- •4.1 Язык Ассемблер
- •4.2 Язык си
- •4.2.1 Типы данных, объявление данных
- •4.2.2 Операторы
- •4.2.3 Функции
- •4.2.4 Оператор if-else (ветвления )
- •{Группа операторов 1}
- •Пример:
- •4.2.5 Оператор switch
- •4.2.6 Операторы циклов
- •Оператор цикла for
- •Тело цикла
- •Оператор while
- •Операторы тела цикла
- •4.2.7 Указатели
- •4.2.8 Директивы препроцессора
- •5 Взаимодействие микроконтроллера с объектом управления
- •5.1 Формирование временных интервалов (задержек)
- •5.1.1 Программный способ формирования временных интервалов на языке Ассемблер
- •Ext_l: ldi r17, X ;х – число внутренних циклов
- •Ext_l: ldi r17, 53 ;Загрузка в r17 константы внутреннего цикла
- •Программный способ формирования временных интервалов на языке си
- •5.2 Генерация импульсных сигналов управления с использованием программных задержек
- •5.2.1 Генерация последовательности импульсов с использованием программных задержек
- •5.2.2 Генерация пакета импульсов
- •5.2.3 Генератор заданного числа пакетов импульсов
- •Формирование импульсных сигналов управления с использованием таймеров микроконтроллера
- •5.4 Ожидание внешних событий
- •5.5 Обработка динамического дисплея
- •5.6 Особенности схемы дисплея в учебной системе управления.
- •5.7 Часы
- •5.8 Измерение временных параметров импульсов
- •5.9 Обработка клавиатуры
- •Дубров ф.И. Встроенные системы управления на микроконтроллере aTmega16
Организация памяти данных
Данные в вычислительных системах, над которыми выполняются операции, называют операндами.
Память данных предназначена для временного хранения операндов и результатов операций. (Исходные операнды поступают в микроконтроллер из портов ввода, а выходные значения выдаются в порты вывода).
Память данных микроконтроллера разделена на три части: оперативная память ОЗУ(RAM), регистровая память (регистры общего назначения – РОН и регистры ввода-вывода) и энергонезависимая память (EEPROM). Емкость оперативной памяти данных (ОЗУ) составляет 1Кбайт. Запись и считывание содержимого ячеек ОЗУ производится по 8-разрядной шине данных микроконтроллера. Адрес ячейки ОЗУ подается либо из регистра команд, либо одного из регистров X,Z,Y (см. ниже).
В ОЗУ может быть организован стек - область ОЗУ для формально безадресного хранения данных, т.е. стековая команда не содержит адрес ячейки памяти, но она определяет, что адрес стековой ячейки ОЗУ хранится в специальном регистре - указателе стека (SP). Аппаратно указатель стека представляет собой реверсивный счетчик. Для адресации ячеек стека используется постдекрементный/прединкрементный способ, т.е. после загрузки в ячейку стека содержимое SP автоматически уменьшается на единицу, а перед чтением из стека происходит увеличение SP на единицу. Стек «растет» в сторону младших адресов. По сигналу сброса устанавливается SP=0.
Начальное значение указателя стека (адрес начала стека) должен задаваться программно, если программа содержит подпрограммы, в том числе, и прерываний. Так как стек является областью ОЗУ, то начальное значение указателя стек должно быть больше $60. Целесообразно выбирать адрес начала стека равный адресу последней ячейки ОЗУ (45F – см. ниже).
Число используемых разрядов указателя стека равно 10, в соответствии с емкостью ОЗУ микроконтроллера (1Кбайт=1024=210 ). Указатель стека физически состоит из двух восьмиразрядных регистров: регистра старших разрядов SPH и регистра младших разрядов SPL.
Регистровая память микроконтроллеров семейства AVR представляет собой 32 регистра общего применения (РОН) R0 – R31 и до 64-х регистров ввода/вывода в зависимости от типа микроконтроллера. Регистры РОН используются, в основном, для хранения операндов, над которыми выполняются арифметические и логические операции, и результатов операций. Регистры РОН подключены непосредственно к арифметико-логическому устройству, в котором выполняются соответствующие команды. Выбор конкретного регистра РОН производится из регистра команд (специальными разрядами команды). Команды обращения к регистрам РОН занимают одну ячейку программной памяти и выполняются за один машинный цикл. Машинный цикл равен периоду частоты тактового генератора микроконтроллера.
Шесть регистров R26 – R31 регистрового файла могут использоваться для хранения не только данных, но и для хранения адресов ячеек ОЗУ, т.е. реализуется косвенный регистровый способ адресации. В этом случае регистры объединяются в пары, образуя три адресных 16-разрядных регистра X,Y,Z. Регистры R27 и R26 образуют регистр X, регистры R29 и R28 образуют регистр Y, регистры R31 и R30 образуют регистр Z. Регистр Z используется также в качестве адресного регистра при считывании констант из программной памяти. Описание РОН приведено в таблице 2.
В области регистров ввода – вывода расположены различные служебные регистры (указатель стека, регистр состояния и др.), а также регистры встроенных периферийных устройств (таймеры, подсистема прерываний и др.), входящими в состав микроконтроллера, а также регистры управления этими периферийными устройствами. Описание и адреса регистров ввода – вывода приведено в таблице 3.
Регистры РОН, ввода-вывода и ОЗУ размещены в одном адресном пространстве. Распределение адресного пространства приведено на рис.4. . Адреса 0 – 1FН занимают регистры РОН, адреса 20Н – 5FН занимают регистры ввода – вывода, адреса 60Н – 45FH занимают ячейки ОЗУ.
Таким образом, все адресное пространство памяти данных составляет 32+64+512=608 байт.
Обращение к регистрам РОН может осуществляться как к ячейкам памяти со значениями адресов соответствующими рис.2. Обращение к регистрам ввода/вывода командами ввода/вывода IN adr и OUT adr производится, если адреса регистров ввода/вывода в этих командах от 20
Рисунок 4 Организация памяти микроконтроллера
до 1F (таблица 3 значения адресов в скобках).
Энергонезависимая память данных микроконтроллера EEPROM имеет отдельное адресное пространство 0 – 1FF.
Таблица 2
Имя регистра РОН |
Адрес |
Описание |
R31 или ZH |
$1F |
Старший байт регистра Z |
R30 или ZL |
$1E |
Младший байт регистра Z |
R29 или YH |
$1D |
Старший байт регистра Y |
R28 или YL |
$1C |
Младший байт регистра Y |
R27 или XH |
$1B |
Старший байт регистра X |
R26 или XL |
$1A |
Младший байт регистра X |
R25-R17 |
$19-$11 |
Регистры R25-R17 |
R16-R0 |
$10-$00 |
Регистры R16-R0 |
Таблица 3
Адрес I/O (адрес RAM) |
Имя регистра |
Функция регистра |
$05($25) |
ADCH |
Регистр данных АЦП (старший байт) |
$04($24) |
ADCL |
Регистр данных АЦП (младший байт) |
$06($26) |
ADCSR |
Регистр управления и состояния АЦП |
$07($27) |
ADMUX |
Регистр управления мультиплексором АЦП |
$1A($3A) |
DDRA |
Регистр направления порта А |
$1B($3B) |
PORTA |
Регистр данных порта A |
$19($39) |
PINA |
Выводы входов порта A |
$17($37) |
DDRB |
Регистр направления данных порта В |
$18($38) |
PORTB |
Регистр данных порта В |
$16($36) |
PINB |
Выводы входов порта В |
$14($34) |
DDRC |
Регистр направления данных порта C |
$15($35) |
PORTC |
Регистр данных порта C |
$13($33) |
PINC |
Выводы входов порта C |
$11($31) |
DDRD |
Регистр направления данных порта D |
$12($32) |
PORTD |
Регистр данных порта D |
$10($30) |
PIND |
Выводы входов порта D |
$35($55) |
MCUCR |
Общий регистр управления микроконтроллером |
$34($54) |
MCUSR |
Регистр состояния микроконтроллера |
$3F($5F) |
SREG |
Регистр состояния (статуса) процессора |
$3A($5A) |
GIFR |
Общий регистр флагов прерываний |
$3B($5B) |
GIMSK |
Общий регистр маски прерываний |
$38($58) |
TIFR |
Регистр флагов прерываний от таймеров/счетчиков |
$39($59) |
TIMSK |
Регистр маски прерываний от таймеров/счетчиков |
$3E($5E) |
SPH |
Старший байт указателя стека |
$3D($5D) |
SPL |
Младший байт указателя стека |
$33($53) |
TCCR0 |
Регистр управления таймером/счетчиком Т0 |
$32($52) |
TCNT0 |
Таймер/счетчик Т0 |
$2F($4F) |
TCCR1A |
Регистр управления А таймера/счетчика Т1 |
$2E($4E) |
TCCR1B |
Регистр управления В таймера/счетчика Т1 |
$2D($4D) |
TCNT1H |
Старший байт таймера/счетчика Т1 |
$2C($4C) |
TCNT1L |
Младший байт таймера/счетчика Т1 |
$2B($4B) |
OCR1AH |
Старший байт регистра А сравнения выхода таймера/счетчика Т1 |
$2A($4A) |
OCR1AL |
Младший байт регистра А сравнения выхода таймера/счетчика Т1 |
$29($49) |
OCR1BH |
Регистр совпадения выхода В (старший байт) |
$28($48) |
OCR1BL |
Регистр совпадения выхода В (младший байт) |
$27($47) |
ICR1H |
Регистр захвата таймера/счетчика Т1(старший байт) |
$26($46) |
ICR1L |
Регистр захвата таймера/счетчика Т1(младший байт) |
$24($44) |
TCNT2 |
Таймер Т2 |
$25($45) |
TCCR2 |
Регистр управления таймером Т2 |
$23($43) |
OCR2 |
Регистр совпадения выхода таймера/счетчика Т2 |
$07($27) |
ASSR |
Регистр состояния асинхронного режима |
$1F($3F) |
EEARH |
Старший байт регистра адреса EEPROM |
$1E($3E) |
EEARL |
Младший байт регистра адреса EEPROM |
$1D($3D) |
EEDR |
Регистр данных EEPROM |
$1C($3C) |
EECR |
Регистр управления EEPROM |
$0E($2E) |
SPSR |
Регистр состояния SPI |
$0D($2D) |
SPCR |
Регистр управления SPI |
$0F(02F) |
CPDR |
Регистр данных SPI |
$0C($2C) |
UDR |
Регистр данных порта UART |
$OB($2B) |
USR |
Регистр статуса порта UART |
$OA($2A) |
UCR |
Регистр управления порта UART |
$09($29) |
UBRR |
Регистр управления скоростью порта UART |
$21 ($41) |
WDTCR |
Регистр управления сторожевого таймера |
$08{$28) |
ACSR |
Регистр управления и статуса аналогового компаратора |