Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МПСУ новая 2.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
5 Мб
Скачать
☆

Регистры общего назначения

Все регистры общего назначения объединены в файл. Как уже было сказано, в микроконтроллерах AVR все 32 РОН непосредственно доступны АЛУ. Благодаря этому любой РОН может использоваться в командах и как операнд источник и как операнд-приемник.

Шесть регистров общего назначения R26 -R31 (X, Y, Z) используется в качестве указателей при косвенной адресации памяти данных.

Каждый регистр файла имеет свой собственный адрес в пространстве памяти данных. Поэтому к ним можно обращаться как к памяти, несмотря на то, что физически эти регистры не являются ячейками ОЗУ.

Регистры ввода/вывода

Регистры ввода/вывода располагаются в так называемом пространстве ввода/вывода размером 64 байта. Все РВВ можно разделить на две группы: служебные регистры микроконтроллера и регистры, относящиеся к периферийным устройствам (в т.ч. порты ввода/вывода). Размер каждого регистра - 8 разрядов.

Так же, как и к РОН, к регистрам ввода/вывода можно обращаться двумя способами: как собственно к регистрам (с помощью команд IN и OUT) и как к ячейкам ОЗУ. В первом случае используются адреса РВВ, принадлежащие пространству ввода/вывода ($00...$3F). Во втором случае адрес РВВ необходимо увеличить на $20 (в таблицах и далее в книге при указании адресов РВВ в скобках указываются соответствующие им адреса ячеек ОЗУ).

Каждый бит регистров ввода/вывода с адресами $00…$1F имеет свой адрес, т.е. по отношению к ним можно использовать команды операций с битами.

Адреса регистров ввода/вывода AT90S8515 приведены в табл. 5.18.

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

Как уже было сказано, микроконтроллеры AVR семейства Classic имеют в своем составе энергонезависимую память (EEPROM). Объем этой памяти в МК AT90S8515 составляет 512 байт. EEPROM-память расположена в своем адресном пространстве и также, как и ОЗУ, организована линейно.

Для обращения к EEPROM-памяти используются три регистра: регистр адреса, регистр данных и регистр управления.

Таблица 5.18. Адреса регистров ввода/вывода AT90S8515

Адрес

регистра

Адрес SRAM

Наименование

Обозначение бит в регистрах

7 6 5 4 3 2 1 0

Комментарий

$00-

-$07

Байтовая и битовая адресация в регистрах

$20-$27

Резерв

$08

$28

ACSR

ACD - ACO ACI ACIE ACIC ACIS1 ACIS0

Управление аналоговым

компаратором и регистр статуса

$09

$29

UBRR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Регистр скорости UART (бод)

$0A

$2A

UCR

RXCIE TXCIE UDRIE RXEN TXEN CHR9 RXB8 TXB8

Регистр управления UART

$0B

$2B

USR

RXC TXC UDRE FE OR - - -

Регистр статуса UART

$0C

$2C

UDR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Регистр вв/выв данных UART

$0D

$2D

SPCR

SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0

Регистр управления SPI

$0E

$2E

SPSR

SPIF WCOL - - - - - -

Регистр статуса SPI

$0F

$2F

SPDR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Регистр вв/выв данных SPI

$10

$30

PIND

PIND7 - - - - - - PIND0

Буфер ввода порта D

$11

$31

DDRD

DDD7 - - - - - - DDD0

Регистр задания направления передачи данных, порт D

$12

$32

PORTD

PORTD7 - - - - - - PORTD0

Регистр данных, порт D

$13

$33

PINC

PINС7 - - - - - - PINС0

Буфер ввода порта C

$14

$34

DDRC

DDС7 - - - - - - DDС0

Регистр задания направления передачи данных, порт C

$15

$35

PORTC

PORTС7 - - - - - - PORTС0

Регистр данных, порт C

$16

$36

PINB

PINВ7 - - - - - - PINВ0

Буфер ввода порта B

$17

$37

DDRB

DDВ7 - - - - - - DDВ0

Регистр задания направления передачи данных, порт B

$18

$38

PORTB

PORTВ7 - - - - - - PORTВ0

Регистр данных, порт B

$19

$39

PINA

PINA7 - - - - - - PINA0

Буфер ввода порта A

$1A

$3A

DDRA

DDA7 - - - - - - DDA0

Регистр задания направления передачи данных, порт A

$1B

$3B

PORTA

PORTA7 - - - - - - PORTA0

Регистр данных, порт A

$1C

$3C

EECR

- - - - - EEMWE EEWE EERE

Регистр управления EEPROM

$1D

$3D

EEDR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Регистр данных EEPROM

$1E

$3E

EEARL

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Регистр адреса младшего байта EEPROM

$1F

$3F

EEARH

- - - - - - - EEAR8

Регистр адреса старшего байта EEPROM (только AT90S8515)

$20

Байтовая адресация

$40

Резерв

…

…

$21

$41

WDTCR

- - - WDTOE WDE WDP2 WDP1 WDP0

Регистр управления сторожевым таймером (Watchdog)

…

…

Резерв

…

…

$24

$44

ICR1L

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Входной регистр захвата

младшего байта T/C1

$25

$45

ICR1H

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Входной регистр захвата

старшего байта T/C1

…

…

Резерв

…

…

$28

$48

OCR1BL

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Выходной регистр сравнения “В” Т/С1, младший байт

$29

$49

OCR1BH

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Выходной регистр сравнения “В” Т/С1, старший байт

$2A

$4A

OCR1AL

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Выходной регистр сравнения “А” Т/С1, младший байт

$2B

$4B

OCR1AH

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Выходной регистр сравнения “А” Т/С1, старший байт

$2C

$4C

TCNT1L

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Таймер/счётчик 1, мл. байт

$2D

$4D

TCNT1H

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Таймер/счётчик 1, ст. байт

$2E

$4E

TCCR1B

ICNC1 ICES1 - - CTC1 CS12 CS11 CS10

Регистр управления B Т/С1

$2F

$4F

TCCR1A

COM1A1 COM1A0 COM1B1 COM1B0 - - PWM11 PWM10

Регистр управления A Т/С1

…

…

Резерв

…

…

$32

$52

TCNT0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Таймер/счётчик 0 (8 бит)

$33

$53

TCCR0

- - - - - CS02 CS01 CS00

Регистр управления Т/С0

$34

$54

Резерв

$35

$55

MCUCR

SRE SRW SE SM ISC11 ISC10 ISC01 ISC00

Регистр управления MCU

$36

$56

Резерв

$37

$57

Резерв

$38

$58

TIFR

TOV1 OCF1A OCF1B - ICF1 - TOV0 -

Регистр флагов прерываний Т/С

$39

$59

TIMSK

TOIE1 OCIE1A OCIE1B - TICIE1 - TOIE0 -

Регистр маски прерываний Т/С

$3A

$5A

GIFR

INTF1 INTF0 - - - - - -

Общий регистр флагов прерываний

$3B

$5B

GIMSK

INT1 INT0 - - - - - -

Общий регистр маски прерываний

$3C

$5C

Резерв

$3D

$5D

SPL

SP7 SP6 SP5 SP4 SP3 SP2 SP1 SP0

Младший байт указателя стека

$3E

$5E

SPH

SP15 SP14 SP13 SP12 SP11 SP10 SP9 SP8

Старший байт указателя стека

$3F

$5F

SREG

I T H S V N Z C

Регистр состояния

В регистр адреса загружается адрес ячейки, к которой будет производится обращение. Регистр реализован на двух РВВ - EEARH (старший байт адреса) и EEARL (младший байт адреса). Эти регистры расположены по адресам $1F ($3F) и $1E ($3E) соответственно и доступны как для записи, так и для чтения.

Регистр ввода/вывода, являющийся регистром данных EEPROM-памяти называется EEDR (EEPROM Data Register), и расположен по адресу $1D ($3D). При записи в этот регистр загружаются данные, которые должны быть помещены в EEPROM по адресу, находящемуся в регистре EEAR (регистрах EEARH и EEARL). При чтении в этом регистре находятся данные, считанные из EEPROM по адресу, находящемуся в регистре EEAR (EEARH и EEARL).

Регистр управления EECR (EEPROM Control Register) используется для управления доступом к EEPROM-памяти и расположен по адресу $1С ($3С).

Порты ввода/вывода

Как и любые другие микроконтроллеры, микроконтроллеры AVR семейства Classic имеют порты ввода/вывода. Каждый порт состоит из определенного числа выводов, через которые микроконтроллер может принимать или передавать цифровые сигналы. Конфигурирование каждой линии порта (задание направления передачи данных) может быть произведено программно в любой момент времени. Для линий, сконфигурированных как входные, также имеется возможность подключения внутреннего подтягивающего резистора сопротивлением 35... 120 кОм между входом и проводом питания VDD. Кроме того, если вывод (вход) с подключенным внутренним подтягивающим резистором подключить к общему проводу, он может служить источником тока.

Максимальная нагрузочная способность выходных буферов портов ввода/вывода при логическом «0» на выходе составляет 20 мА. Благодаря этому микроконтроллер может непосредственно управлять светодиодными индикаторами.

Обращение к портам ввода/вывода

Обращение к портам производится через регистры ввода/вывода, причем под каждый порт в адресном пространстве ввода/вывода зарезервировано по 3 адреса. По этим адресам размещаются три регистра: регистр данных порта PORTx, регистр направления данных DDRx и регистр выводов порта PINx. Разряды этих регистров имеют названия: Px7...Px0 - для регистров PORTx, DDx7...DDx0 - для регистров DDRx и PINx7...PINx0 - для регистров PINx. Действительные назва­ния регистров (и их разрядов) получаются подстановкой названия порта вместо символа «x», соответственно для порта A регистры называются PORTA, DDRA, PINA, для порта В - PORTB, DDRB, PINB и т.д. При сбросе микроконтроллера регистры DDRx и PORTx очищаются, а все выводы портов после сброса устанавливаются в третье (высокоимпедансное) состояние.

«Регистры» PINx на самом деле регистрами не являются (их можно рассматривать как входные буферы), по этим адресам осуществляется доступ к физическим значениям сигналов на выводах порта. Соответственно, они доступны только для чтения, тогда как регистры PORTx и DDRx доступны и для чтения, и для записи.

Конфигурирование портов ввода/вывода

Направление передачи данных определяется содержимым регистра DDRx. Если разряд DDxn этого регистра установлен в «1», соответствующий n-й вывод порта является выходом. Если же разряд DDxn этого регистра сброшен в «0», соответствующий вывод порта является входом.

Управление подтягивающим резистором осуществляется с помощью регистра данных порта PORTx. Если разряд Pxn регистра PORTx установлен в «1» и соответствующий вывод порта является входом, между этим выводом и проводом питания подключается подтягивающий резистор. Чтобы отключить подтягивающий резистор, необходимо либо сбросить соответствующий разряд регистра PORTx, либо сделать вывод порта выходом.

В табл. 5.19 приведены все возможные конфигурации выводов портов ввода/вывода.

Таймеры/счётчики

Микроконтроллер AT90S8515 имеет в своем составе два таймера/счетчика общего назначения.

Первый таймер (Т0, 8-разрядный), имеющийся во всех моделях, может использоваться только для отсчета и измерения временных интервалов или как счетчик внешних событий. При переполнении счетного регистра таймера генерируется запрос на прерывание. Другой таймер (T1, 16-разрядный). Таймер может генерировать запрос на прерывание не только при переполнении счетного регистра, но и при наступлении ряда других событий. Таймер может использоваться в качестве широтноимпульсного модулятора.

Таблица. 5.19. Конфигурирование портов ввода/вывода

DDxn

Pxn

Функция

вывода

Резистор

Примечания

0

0

вход

отключен

Третье состояние (Hi-Z)

0

1

вход

подключен

При подключении вывода к общему проводу он является источником тока

1

0

выход

отключен

Выход установлен в «0»

1

1

выход

отключен

Выход установлен в «1»

Примечание: n = 7...0 - номер вывода (разряд порта).

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

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

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

Таблица 5.20. Выводы, используемые таймерами/счетчиками общего назначения

Название

AT90S8515

Описание

T0

PB0

Вход внешнего сигнала таймера T0

T1

PB1

Вход внешнего сигнала таймера T1

ICP

ICP*

Вход захвата таймера T1

OC1

-

Выход схемы сравнения таймера T1

OC1A

PD5

То же

OC1B

OC1B*

То же

TOSC1

-

Вход для подключения резонатора

TOSC2

-

Выход для подключения резонатора

* Выделенный вывод микроконтроллера (не линия порта ввода/вывода)

Таймер/счетчик Т0

Таймер/счетчик Т0 (8-разрядный) может использоваться для формирования временных интервалов или для подсчета числа внешних событий. В состав Т0 входят 2 регистра: регистр управления TCCR0 и счетный регистр TCNT0, а также блок управления таймером. Флаг переполнения счетного регистра таймера TOV0 находится в регистре флагов прерываний от таймеров TIFR. Разрешение и запрещение прерываний от таймера осуществляются установкой/сбросом флага TOIE0 регистра TIMSK.

Таймер/счетчик Т0 может работать в двух режимах:

1. Режим таймера. В этом режиме на вход таймера/счетчика поступают импульсы тактового сигнала микроконтроллера (непосредственно или через предделитель);

2. Режим счетчика событий. В этом режиме инкремент содержимого счетного регистра производится по активному фронту сигнала на входе Т0 микроконтроллера.

Выбор режима работы (источника тактового сигнала), а также запуск и остановка таймера/счетчика осуществляются с помощью разрядов СS02...СS00 регистра управления таймером TCCR0, расположенного по адресу $33 ($53). Соответствие между состоянием этих разрядов и режимом работы таймера/счетчика приведено в табл. 5.21. Остальные разряды регистра доступны только для чтения и содержат «0».

Таймер/счетчик Т1

Таймер/счетчик Т1 (16-разрядный) также как и таймер/счетчик Т0, может использоваться для формирования временных интервалов или для подсчета числа внешних событий. Во-вторых, таймер/счетчик Т1 может по внешнему сигналу сохранять свое текущее состояние в отдельном РВВ. В-третьих, он может выполнять определенные действия при равенстве содержимого счетного регистра заданному значению. И наконец, он может работать как широтно-импульсный модулятор. Причем генерация сигнала с ШИМ «вынесена» в отдельный режим работы таймера/счетчика, в котором недоступны остальные функции (кроме генерации прерываний).

Таблица 5.21. Выбор источника тактового сигнала для таймера/счетчика Т0

СS02

СS01

СS00

Источник тактового сигнала

0

0

0

Таймер/счетчик остановлен

0

0

1

СК (тактовый сигнал микроконтроллера)

0

1

0

СК/8

0

1

1

СК/64

1

0

0

СК/256

1

0

1

СК/1024

1

1

0

Вывод Т0, инкремент счетчика производится по спадающему фронту импульсов

1

1

1

Вывод Т0, инкремент счетчика производится по нарастающему фронту импульсов

При записи старшего байта значения в регистр TCNT1H он помещается в регистр ТЕМР. Далее, при записи младшего байта в регистр TCNT1L он объединяется с содержимым регистра ТЕМР и оба байта записываются в регистр TCNT1 одновременно. Из сказанного следует, что для выполнения полного цикла записи в 16-разрядный регистр первым должен быть загружен старший байт (регистр TCNT1H).

При чтении регистра TCNT1L (младший байт) содержимое регистра TCNT1H пересылается в регистр ТЕМР. А при последующем чтении регистра TCNT1H возвращается значение, сохраненное в регистре ТЕМР. Следовательно, для выполнения полной операции чтения 16-разрядного регистра первым должен быть прочитан младший байт (регистр TCNT1L).

Управление таймером/счетчиком Т1 осуществляется с помощью двух регистров управления TCCR1A и TCCR1B.