Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 03.03.2010 | Доступ: свободный | Студентов: 5335 / 1307 | Оценка: 4.35 / 3.96 | Длительность: 24:14:00
ISBN: 978-5-9963-0267-3
Специальности: Разработчик аппаратуры
Лекция 14:

Архитектура однокристального микроконтроллера

< Лекция 13 || Лекция 14: 12345 || Лекция 15 >

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

Таймеры/счетчики (Т/С) предназначены для подсчета внешних событий, получения программно управляемых временных задержек и выполнения времязависимых функций.

В состав блока Т/С входят следующие основные элементы:

  • два 16-разрядных регистра Т/С0 и Т/С1,
  • 8-разрядный регистр режимов TMOD,
  • 8-разрядный регистр управления TCON,
  • схема инкремента,
  • схемы управления.

Регистры Т/С0 и Т/С1 выполняют функцию хранения текущего состояния счетчика. Каждый из них состоит из пары 8-разрядных регистров: (ТН0, TL0) для Т/С0 и (TH1, TL1) для Т/С1. Регистры ТН0 и TH1 содержат старшие, а регистры ТL0 и TL1 - младшие разряды регистров Т/С0 и Т/С1. Каждый из этих регистров программно доступен по записи и чтению.

Начальное значение счета заносится в регистры ТHx и TLx таймера/счетчика программно. В процессе счета содержимое регистров Т/С инкрементируется. Перенос, возникающий при выполнении счета, фиксируется в бите TFx регистра TCON и может быть использован в качестве запроса прерывания.

Назначение разрядов регистра режимов TMOD показано в табл. 14.8.

Таблица 14.8. Формат регистра TMOD
Позиция в регистре Мнемоника бита Функция
7 GATE1

Разрешение управления Т/С1 от внешнего входа IT1:

0 - управление запрещено

1 - управление разрешено

6 C/T1

0 - работа Т/С1 в режиме таймера

1 - работа Т/С1 в режиме счетчика внешних событий

5 M1.1

Номер режима работы Т/С1

(00 - режим 0, ..., 11 - режим 3)

4 M0.1

Номер режима работы Т/С1

(00 - режим 0, ..., 11 - режим 3)

3

2

1

0

GATE0

C/T0

M1.0

M0.0

Функции аналогичны битам 7-5,но для Т/С0

Включение/выключение таймера/счетчика в работу производится битами TR1 и TR0 регистра управления TCON. Они устанавливаются и сбрасываются программно, доступны по чтению. Установка бита в "1" приводит к включению в работу соответствующего таймера/счетчика, а сброс этого бита в "0" приводит к его остановке.

Таймеры/счетчики могут функционировать в одном из четырех режимов, определяемых разрядами M1.x и M0.x регистра TMOD. Режимы 0, 1, 2 полностью идентичны для обоих таймеров/счетчиков. Установка таймера/счетчика 0 в режим 3 влияет на режим работы таймера/счетчика 1.

Режим 0. Таймер/счетчик представляет собой устройство на основе 13-разрядного регистра, состоящего из 8-разрядного регистра TH и пяти младших разрядов регистра TL. Логика работы таймера/счетчика в режиме 0 показана на рис. 14.4 на примере T/C1. Влияние управляющих сигналов TR1, GATE1, C/T1 и сигнала внешнего управления INT1 на работу таймера/счетчика представлено в табл. 14.9.

Логика работы таймера/счетчика 1 в режиме 0

Рис. 14.4. Логика работы таймера/счетчика 1 в режиме 0
Таблица 14.9. Управление работой таймера/счетчика T/C1
TR1 GATE1 INT1 C/T1 Выполняемая функция
0 X X X Останов
1 0 X 1 Счет в режиме таймера
1 0 X 1 Счет в режиме счетчика внешних событий
1 1 1 X Останов
1 1 1 0 Счет в режиме таймера
1 1 1 1 Счет в режиме счетчика внешних событий

При работе таймера/счетчика в режиме счетчика внешних событий его содержимое увеличивается каждый раз при переключении из "1" в "0" сигнала на счетном входе микроконтроллера (вывод T0 (P3.4) для T/C0 и вывод T1 (P3.5) для T/C1). При этом частота изменения сигналов на счетном входе должна быть как минимум в 2 раза ниже внешней частоты синхронизации микроконтроллера.

Режим 1. Аналогичен режиму 0, за исключением того, что в этом режиме таймер/счетчик представляет собой устройство на основе не 13-разрядного, а 16-разрядного регистра, состоящего из регистров THx и TLx.

Логика работы таймера/счетчика в этом режиме полностью соответствует режиму 0.

Режим 2. Таймер/счетчик представляет собой устройство на основе 8-разрядного регистра TL. При каждом переполнении регистра TL, кроме установки в регистре TCON флага TF, происходит автоматическая перезагрузка содержимого регистра TL из регистра TH.

Логика работы таймера/счетчика в этом режиме также соответствует режиму 0.

Режим 3. В режиме 3 T/C1 заблокирован и просто сохраняет свое состояние.

Таймер/счетчик T/C0 в режиме 3 представляет собой два независимых устройства на основе 8-разрядных регистров TH0 и TL0. Устройство на основе регистра TL0 может работать как в режиме таймера, так и в режиме счетчика внешних событий. За ним сохраняются все биты управления T/C0, оно реагирует на воздействия по входам T0 и INT0. При переполнении TL0 устанавливается флаг TF0. Устройство на основе регистра TH0 может работать только в режиме таймера. Оно использует бит включения TR1, при переполнении TH0 устанавливается флаг TF1. Других битов управления устройство на основе TH0 в этом режиме не имеет. Логи ка работы T/C0 в режиме 3 показана на рис. 14.5.

Логика работы таймера/счетчика 0 в режиме 3

Рис. 14.5. Логика работы таймера/счетчика 0 в режиме 3

Установка T/C0 в режим 3 лишает T/C1 бита включения TR1. Поэтому T/C1 в режимах 0, 1, 2 при GATE1 = 0 всегда включен и при переполнении в режимах 0 и 1 T/C1 обнуляется, а в режиме 2 перезагружается, не устанавливая флаг, если IT/C0 находится в режиме 3. Управление от входов INT1, T1 и использование бит управления C/T1, GATE1 для T/C1 не зависят от режима IT/C0.

T/C1 аппаратно связан с блоком синхронизации последовательного интерфейса (ПИ). При работе в режимах 0, 1, 2 при переполнении T/C1 всегда вырабатывается импульс, который может использоваться для тактирования ПИ. Поэтому режим 3 для IT/C0 удобно применять тогда, когда требуется работа ПИ, тактируемого таймером/счетчиком 1, и двух таймеров/счетчиков или ПИ, таймера и счетчика.

Когда IT/C0 переведен в режим 3, T/C1 можно выключить, переведя его также в режим 3, использовать с последовательным портом для выработки импульсов тактирования или в любых других приложениях, не требующих прерывания.

В качестве примера использования блока таймеров/счетчиков рассмотрим следующую задачу.

Необходимо подсчитать количество деталей, прошедших по конвейеру за определенный промежуток времени, например, 1 минуту. При этом подсчет должен проводиться в фоновом режиме, не отвлекая основные ресурсы микроконтроллера от решения других задач, например, управления тем же самым конвейером. Кроме того, если конвейер остановлен, то для исключения ложных срабатываний датчиков подсчет в это время проводиться не должен. Вывод полученных значений проводится на порты P1 и P2 микроконтроллера.

Таймер/счетчик Т/С0 будем применять в режиме таймера для отсчета необходимого интервала времени. В режиме 1, использующем полную длину разрядной сетки, таймер/счетчик выдает запрос прерывания через каждые 216 машинных циклов, что при частоте внешней синхронизации fbq = 12 МГц составляет 65 536 мкс. Чтобы отсчитать интервал времени в 1 мин, необходимо примерно 915 входов в обработчик прерывания. Для отсчета этой величины используются регистр R0 с начальным значением 183 и регистр R1 с начальным значением 5.

Таймер/счетчик Т/С1 задействуем в режиме счета внешних событий с разрешением внешнего управления по входу INT1, на который подадим сигнал от двигателя конвейера. Для считывания его показаний без прекращения счета используется следующий прием. Сначала считывается значение из старшего байта TH1 таймера/счетчика, а затем из младшего байта TL1. После этого проверяется, не изменилось ли показание старшего байта за время чтения младшего, и лишь после этого результат считается принятым. Такой подход предохраняет от грубых ошибок при чтении работающего счетчика. Пусть, например, в начале чтения счетчик содержал следующее значение: TH1 = 00000000b, TL1 = 111111111b. Если за время чтения старшего байта счетчик увеличит свое значение на 1, то микроконтроллер, не использующий дополнительных проверок, получит результат: 00000000 00000000b.

Схема данного микропроцессорного устройства представлена на рис. 14.6.

МПС для подсчета количества деталей

Рис. 14.6. МПС для подсчета количества деталей

Программа решения этой задачи может выглядеть следующим обра зом:

.ORG 0
AJMP Begin ; на начало программы
.ORG 0Bh
AJMP Int_Time ; на обработчик таймера
.ORG 30h
Begin: MOV IE,#00001000b ; разрешение прерывания Т/С0
MOV TMOD,#00101100b ; настройка режимов счетчиков
MOV TH0,#0 ; сброс счетчика времени
MOV TL0,#0
MOV TH1,#0 ;сброс счетчика деталей
MOV TL1,#0
MOV R0,#183
MOV R1,#5
MOV TCON,#01010000b
SETB EA
AJMP $ ; фоновая задача
Int_Time: DJNZ R0,Out_Time ; обработчик Т/С0
MOV R0,#183 ; восстановление параметра счета
DJNZ R1,Out_Time ; выход, если не прошла 1 мин
Read: MOV A,TH1 ; чтение Т/С1
MOV R3,TL1
CJNE A,TH1,Read
MOV R4,A ; вывод результата
MOV P1,R3
MOV P2,R4
MOV TH1,#0 ; восстановление Т/С1
MOV TL1,#0
MOV R1,#5 ;восстановление параметра счета
Out_Time:RETI ;выход из обработчика Т/С0
.END
< Лекция 13 || Лекция 14: 12345 || Лекция 15 >
Владислав Салангин
Владислав Салангин

приветствую создателей курса и благодарю за доступ к информации! понимаю, что это уже никто не исправит, но, возможно, будут следующие версии и было бы неплохо дать расшифровку сокращений имен регистров итд, дабы закрепить понимание их роли в общем процессе. 

Михаил Королёв
Михаил Королёв