Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное_пособие.doc
Скачиваний:
70
Добавлен:
10.11.2019
Размер:
8.13 Mб
Скачать
    1. Организация памяти данных

Данные в вычислительных системах, над которыми выполняются операции, называют операндами.

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

Память данных микроконтроллера разделена на три части: оперативная память ОЗУ(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

Регистр управления и статуса аналогового компаратора