Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы по МП от Нефёдова.doc
Скачиваний:
184
Добавлен:
19.03.2015
Размер:
4.26 Mб
Скачать

Регистры сравнения а таймеров/счетчиков - ocRxA

7

6

5

4

3

2

1

0

MSB

OCRxAH

LSB

OCRxAL

Исходное значение

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Регистры сравнения В таймеров/счетчиков - OCRxВ

7

6

5

4

3

2

1

0

MSB

OCRxBH

LSB

OCRxBL

Исходное значение

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

Регистры сравнения C таймеров/счетчиков - OCRxC

7

6

5

4

3

2

1

0

MSB

OCRxCH

LSB

OCRxCL

Исходное значение

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

16-разрядные регистры сравнения выхода обеспечивают и чтение и запись.

Регистры сравнения таймера/счетчика хранят эталон, постоянно сравниваемый с состоянием таймера/счетчика. Действие, запускаемое совпадением при сравнении, определяется режимом работы блока сравнения таймера/счетчика. Совпадение при сравнении может произойти только, если таймер/счетчик досчитает до значения содержимого OCR.

Совпадение при сравнении устанавливает флаг прерывания в тактовом цикле процессора, следующем за самим совпадением.

Регистр захвата таймеров/счетчиков – ICRx.

7

6

5

4

3

2

1

0

MSB

ICRxH

LSB

ICRxL

Исходное значение

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

16-разрядный регистр захвата входа обеспечивает только чтение содержимого.

При обнаружении на выводе ICx нарастающего или cпадающего фронта сигнала (определяемого установкой ICESx в регистре TCCRxB) текущее состояние таймера/счетчика (значение регистра TCNTx) пересылается в регистр ICRx. Одновременно устанавливается флаг ICFx.

Обращение к 16-разрядным регистрам.

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

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

Для выполнения цикла чтения 16-разрядного регистра первым должен быть прочитан младший байт. При его чтении содержимое старшего байта помещается в регистр TEMP. При последующем чтении старшего байта воз­вращается значение, сохраненное в регистре TEMP. Исключение составля­ют только регистры сравнения OCR1A/B/C (OCR3A/B/C), при чтении ко­торых регистр TEMP не задействуется.

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