Исследование таймеров-счетчиков микроконтроллера

реклама
К а ф е д р а «Робототехнические системы»
Исследование таймеров-счетчиков
микроконтроллера TSC8OC31.
Программное формирование
временных интервалов.
Методические указания
к лабораторной работе
Самара 2002
Составитель: А.Д. АБРАМОВ.
УДК 681.3.06
Исследование таймеров-счетчиков микроконтроллера
TSC8OC31.
Программное
формирование
временных
интервалов: Метод. указ. к лаб. раб. / Самар. гос. техн. ун-т; Сост.
А.Д. Абрамов. Самара, 2001. 12с.
Исследуются
таймеры-счетчики
микроконтроллера
TSC8OC31 и на их основе программно формируются интервалы
различной длительности.
Методические указания рассчитаны на студентов
специальностей 210300, 220600, 075400, 230200, 201500 и других
родственных специальностей.
Табл. 1. Ил. 3. Библиогр.: 2 назв.
Печатается по решению редакционно - издательского совета СамГТУ
ЦЕЛЬ РАБОТЫ
Целью работы является исследование режимов работы таймеровсчетчиков микроконтроллера TSC80C31 и программное формирование
временных интервалов на их основе.
Теоретические сведения
Микроконтроллер TSC80C31 имеет два шестнадцатиразрядных
таймера-счетчика Т/С0 и Т/С1. Каждый из них независимо может быть
запрограммирован на работу в режиме таймера, либо счетчика. При
работе в качестве таймера отсчет времени происходит через подсчет
внутренних импульсов синхронизации. При работе в качестве счетчика
происходит подсчет событий, на внешнем входе. Выбор режима работы
каждого Т/С производится битами С/Т0 и С/Т1 регистра режимов
TMOD. Каждый из таймеров-счетчиков состоит из пары
восьмиразрядных регистров ТН0, TL0 и ТН1, TL1. Регистры ТНх –
старшие, а регистры TLх – младшие (х=0,1). Все эти восьмиразрядные
регистры имеют свой адрес и могут быть использованы как РОН, если
соответствующий таймер-счетчик не используется по назначению. При
работе в режиме таймера (С/Тх=0) регистр TLх наращивается в каждом
машинном цикле и частота счета равна FOSC/12. При FOSC=12 МГц
Тсчета=1мкс.
В режиме счетчика (С/Тх=1) регистр TLx наращивается при
переходе сигнала на входе Тх из «1» в «0». Входы опрашиваются во
время фазы S5P2 каждого машинного цикла. При обнаружении
высокого уровня сигнала в одном цикле и низкого уровня в следующем
цикле счетчик инкрементируется. Новое значение в регистре появляется
во время фазы S3P1 цикла, следующего за тем, в котором был
обнаружен переход. Поскольку на распознавание перехода уходит два
машинных цикла, максимальная частота счета составляет FOSC/24.
Ограничений на скважность входного сигнала нет, но для уверенной
фиксации перехода сигнал должен удерживаться в каждом значении по
крайней мере один машинный цикл.
Отметим, что код величины начального счета заносится в регистры
TLx и THx программно. При начальном сбросе в эти регистры
записываются нули. Признаком окончания счета, как правило, является
переполнение таймера-счетчика, то есть переход его содержимого из
состояния все «единицы» в состояние все «нули». Этот переход
фиксируется аппаратной
установкой флага TFх в единицу и
формированию запроса прерывания. Все регистры ТНх и TLх доступны
по чтению и, при необходимости, контроль достижения требуемой
величины счета выполняется программно.
Счетчики/таймеры обслуживаются регистром режима TMOD и
регистром управления TCON. Приведем формат регистра TMOD:
GATE1
C/T1
M1.1
M1.0
GATE0
C/T0
M0.1
M0.0
В этом регистре младшие четыре бита обслуживают Т/С0,
а старшие четыре бита – Т/С1. Биты Мх.1 и Мх.0 задают
режимы работы для каждого таймера-счетчика в
соответствии с таблицей 1.
Таблица 1.
Режимы работы таймера-счетчика.
Мх.1
0
0
1
1
Мх.0
0
1
0
1
Режим
0
1
2
3
Если биты С/Т0 и С/Т1 равны «0», то таймеры-счетчики работают в
качестве таймера, а если С/Т0 и С/Т1 равны «1» – то в качестве
счетчика.
Бит GATEх разрешает управлять работой таймера от внешнего
вывода INTх. При GATEх = 0, таймер работает всегда при TRх = 1. При
GATEх = 1 для работы необходимо условие TRх = 1 и INTx =1.
Регистр управления TCON предназначен для приема и хранения
кода управляющего слова. Приведем обозначение разрядов этого
регистра:
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Последние цифры в обозначениях разрядов указывают на
принадлежность либо к Т/С1 либо к Т/С0. Флаги переполнения TFx
устанавливаются аппаратно при переполнении соответствующих
таймеров-счетчиков. Если при этом разрешено прерывание от
соответствующего таймера-счетчика, то произойдет обращение к
подпрограмме обслуживания этого прерывания и флаги TFх
автоматически сбросятся.
Флаги TF0 и TF1 программно доступны, то есть могут быть
установлены и сброшены программой независимо от состояния Т/Сх.
Отметим одну важную особенность. Если произошло переполнение
и флаг TFx установился в «1», то таймер-счетчик останавливается.
Чтобы продолжить работу таймер-счетчика флаг TFx нужно
обязательно сбросить.
Биты TRx используются для включения таймеров-счетчиков. При
TRx = 0 –выключение. Отмеченные биты устанавливаются и
сбрасываются программно и доступны по чтению.
Биты IE0 и IE1 – это флаги запросов прерываний по входам INT0 и
INT1, которые устанавливаются аппаратно от внешних источников.
Установка их в «1» инициирует вызов подпрограммы обработки
соответствующего прерывания. Сброс этих флагов выполняется
аппаратно при обслуживании прерывания, если прерывание было
вызвано переходом сигнала с «1» на «0». В этом случае флаг ITx
должен быть программно установлен в «1». Если же флаг ITx был
установлен в «0», то прерывание по входу INTx вызывается низким
уровнем сигнала и соответствующий флаг IEx должен юыть сброшен
программно при обращении к подпрограмме обработки прерывания.
Рассмотрим режим работы таймеров-счетчиков.
Режим 0.
В этом режиме таймер-счетчик представляет собой 13- разрядный
счетный регистр, в котором регистр ТНх работает как 8-разрядный
счетчик, а регистр TLx используется как 5-битный предделитель (рис.1).
Р и с 1. Схема работы таймер-счетчика в режиме 0.
Таким образом, на вход восьмиразрядного таймера ТНх поступают
импульсы счета с частотой Fosc/12*32. При Fosc=12МГц Fсч=31,25кГц
и Тсч=0,032мсек. Следовательно флаг переполнения таймера TFх будет
установлен в единицу через Т=8,192 мсек при начальной установке ТНх
в нуль.
Режим 1.
Этот режим аналогичен режиму 0, но используются все 16 разрядов
регистров ТНх и ТНL. В этом случае число устойчивых состояний
таймер-счетчика будет равно 65536 и при частоте fсч=1МГц временной
интервал установления флага таймера TFх в единицу будет равен
65,536мсек.
Режим 2. В этом режиме регистр TLх работает как
восьмиразрядный счетный регистр. После переполнения он
автоматически перезагружается значением из регистра ТНх, который
при этом своего предварительно запрограммированного значения не
теряет. Схема работы таймер-счетчика в этом режиме приведена на
рисунке 2.
Р и с 2. Схема работы таймер-счетчика в режиме 2.
Режим 3.
Таймер-счетчик 1 в этом режиме блокирован, как если бы бит TR1
был бы сброшен.
Таймер-счетчик 0 в режиме 3 представляет собой два независимых
устройства на основе восьмиразрядных регистров TL0 и ТН0, как
показано на рисунке 3.
Р и с 3. Схема работы таймер-счетчика в режиме 3.
Устройство на основе регистра TL0 может работать в режиме
таймера и режиме счетчика. За ним сохраняются все биты управления
Т/С0. При переполнении TL0 устанавливается в единицу флаг TF0.
Устройство на основе регистра ТН0 может работать только в
режиме таймера и запускается в работу битом TR1=1.
Переполнение ТН0 фиксируется флагом TF1=1. Других битов
управления устройство на основе ТН0 в этом режиме не имеет.
При Fosc=12МГц переполнение таймеров ТН0 и TL0 произойдет
через 0,256мсек, если счет начинается с нуля.
Установка таймер-счетчика 0 в режим 3 лишает таймер-счетчик 1
бита включения TR1. В связи с этим при GATE1=0 Т/С1 всегда
включен, если он находится в режимах 0,1 и 2. При переполнении в
режимах 0 и 1 Т/С1 обнуляется, а в режиме 2 перезагружается не
устанавливая флаг TF1 в единицу. Установка битов С/Т1, GATE1 и
работа по входам Т1 и INT1 не зависят от режима работы таймерсчетчика 0 . Отметим также, что таймер-счетчик 1 аппаратно связан с
блоком синхронизации последовательного интерфейса (ПИ) и при
работе в режимах 0, 1, 2 вырабатывается импульс тактировки ПИ, если
происходит переполнение таймера 1. Поэтому третий режим для
таймер-счетчика 0 удобно применять тогда, когда требуется работа ПИ
и двух таймеров ТН0 и ТL0 или ПИ, таймера ТНО и счетчика TL0.
Таким образом, когда Т/С0 переведен в режим 3, Т/С1 можно
выключить, переведя его также в режим 3, либо использовать его с
последовательным портом или в любых других приложениях, не
требующих прерывания.
Выключение таймеров-счетчиков с помощью битов TR0, TR1 или с
помощью входов INT0 и INT1 при GATEх=1 не искажает код,
находящийся в регистрах Т/С0 И Т/С1. Таймеры-счетчики можно
выключить, через произвольное время вновь включить, и счет начнется
с той же величины, которая была в регистре Т/Сх на момент включения,
если Т/Сх не перезаписывался после выключения.
Новая загрузка таймеров-счетчиков сразу же означает новую
величину счета, а старая при этом теряется. Очередность загрузки
регистров ТL0, ТН0, TL1 и ТН1 – произвольная.
Если прерывания от таймеров-счетчиков разрешены, то есть биты
ЕА – общее разрешение прерываний, ЕТ1 – прерывание от Т/С1 и ЕТ0 –
прерывание от Т/С0 в регистре IE установлены в единицу, то при
переполнении Т/С0 происходит передача управления в ячейку ØØØВН,
а при переполнении Т/С1 – в ячейку ØØ13Н программной памяти. В
этих ячейках должны располагаться первые команды подпрограмм
обработки данных прерываний. Подпрограммы обработки прерываний
по входам INT0 и INT1 начинаются с ячеек ØØØ3Н и ØØ1ВН,
соответственно. Прерывание от последовательного порта приводит к
обращению в ячейку ØØ23Н программной памяти. Каждая
подпрограмма должна заканчиваться командой RETI. Возвращение из
подпрограммы в основную программу происходит по адресу той
команды, перед которой произошло обращение к подпрограмме.
Приведем полностью формат регистра разрешения прерываний IE:
ЕА
Х
Х
ES
ЕТ1
ЕХ1
ЕТØ
ЕХØ
В этом регистре бит ES – управление прерыванием от
последовательного порта, ЕХ1 – управление прерыванием по входу
INT1, ЕХ0 – управление прерыванием по входу INT0.
Установить биты ЕА, ЕТ1 и ЕТ0 в единицу можно командой SETB,
применяя ее к каждому биту. Этой же командой можно включать биты
TR0 и TR1. Выключить отмеченные биты можно командой CLR.
Применив команду: MOV IE, #10001010B, также можно разрешить
прерывания от таймеров-счетчиков 1 и 2.
В конце данного раздела отметим, что временные интервалы
различной длительности можно программно формировать и на основе
обычных регистров, например, R0,…,R7 любого банка. Зная время
выполнения каждой команды, составляющих определенный фрагмент
программы, можно подсчитать общее время выполнения этого
фрагмента. Так например, циклический участок программы:
MOV
R1,# ØFFH
;2 байта, 12 тактов, 1мкс
M2: DJNZ
R1,M2
;2 байта, 24 такта, 2мкс
будет выполнен за время равное:
Т = 1мкс + 2мкс * 255 = 511 мкс.
Если же применить конструкцию вида:
M1:
M2:
MOV
MOV
DJNZ
DJNZ
R0,# ØFFH
R1,# ØFFH
R1,M2
RO,M1
то получим временной интервал, равный:
;1мкс
511мкс
; 2мкс*255 раз
255 раз
Т = 1мкс + 511мкс * 255 + 2мкс * 255 = 130,816 мсек.
Таким образом, задавая различные константы,
предварительно загружаемые в регистры и применяя
различное количество вложенных циклов, можно
формировать широкий спектр временных интервалов. Еще
большую гибкость в формировании временных интервалов
можно получить, комбинируя отмеченный выше способ и
таймеры счетчики.
ЗАДАНИЕ НА ВЫПОЛНЕНИЕ ЛАБОРАТОРНОЙ РАБОТЫ
1. Исследовать работу таймера 0 в режиме 0
Программа исследования должна отражать следующий алгоритм.
1. Задается режим работы 0 для таймера-счетчика 0. Таймер-счетчик
1 в данной лабораторной работе использоваться не будет, поэтому его
режим работы не важен. Таймер-счетчик 0 должен работать в качестве
таймера и на его работу состояние входа INT0 не должно влиять.
Прерывание при установке флага TF0 в единицу запрещено.
2. В любой из регистров внутренней памяти данных, например, R0
банка 0 записывается число повторений работы таймера от нулевого
состояния до его переполнения. Пусть это число будет максимально
возможным. Таким образом, организуется счетчик циклов и программно
формируется временной интервал. Этот интервал времени
просчитывается теоретически.
3. Включаются светодиодные индикаторы 1HL1,…,1HL8.
4. Запускается таймер 0.
5. Опрашивается состояние флага TF0.
6. При установке флага TF0 в единицу выключается таймер и
сбрасывается флаг TF0.
7. Из регистра, выбранного для счетчика циклов, вычитается
единица. Если содержимое регистра –счетчика циклов не равно нулю,
то выполняется переход к п.4. В противном случае содержимое
регистра ТН0 выдается на светодиодные индикаторы. Отмечается
состояние индикаторов.
8. С приходом положительного импульса по входу Т1 на
светодиодные индикаторы выдается содержимое регистра TL0.
9. Рассмотренный алгоритм должен многократно выполняться с
приходом положительного импульса по входу Т0. При выполнении
программы необходимо отметить по секундомеру временной интервал
между включением и выключением светодиодных индикаторов.
Сравнить этот результат с теоретическим расчетом временного
интервала. Особо отметить состояние индикаторов при выдаче на них
содержимого регистра TL0. Объяснить полученные результаты.
Определить будет ли работать таймер при установленном флаге TF0 в
единицу, то есть в п.6 рассмотренного алгоритма флаг TF0 не
сбрасывать.
2. Исследовать работу таймера 0 в режиме 1
Программа исследования должна повторить алгоритм, приведенный
в разделе 1 за исключением режима работы таймера-счетчика 0.
Сравнить временные интервалы, полученные в разделах 1 и 2.
Увеличить временной интервал между включением и выключением
светодиодных индикаторов. Модифицировать программу таким
образом, чтобы работа таймера 0 зависела от состояния входа INT0.
3. Исследовать работу таймера 0 в режиме 1 с использованием
механизма аппаратного прерывания при переполнении.
Программа исследования, также как и предыдущие, должна
включать и выключать светодиодные индикаторы через заданный
промежуток времени. В отличие от предыдущих программ в данной
должно происходить аппаратное прерывание при установке флага TF0 в
единицу и обращение основной программы в ячейку ØØØВН. В этой
ячейке должна располагаться первая команда подпрограммы обработки
данного прерывания. Так как при переходе к подпрограмме флаг TF0
автоматически сбрасывается и таймер начинает счет, то первой
командой в подпрограмме должна быть команда остановки таймера. За
этой командой должна следовать команда декрементирования счетчика
циклов. Если содержимое регистра-счетчика циклов не равно нулю, то
сразу же осуществляется возврат из подпрограммы. При нулевом
содержимом регистра-счетчика циклов перед возвращением в основную
программу устанавливается в единицу флаг пользователя F0. Тогда в
основной программе после запуска таймера необходимо опрашивать
флаг пользователя и при его установке в единицу прекращать работу
таймера в цикле. Учитывая тот факт, что прерывание происходит в
момент действия одной команды, а возврат на следующую команду, в
целом фрагмент программы по запуску таймера и опросу флага F0
должен иметь вид:
M1: SETB
JNB
CLR
TRØ
FØ, M1
TRØ
За этим фрагментом должно идти окончание программы, в котором
на светодиодные индикаторы выдается содержимое регистра ТН0,
опрашивается вход Т1 и с получением положительного импульса по
этому входу на индикаторы выдается содержимое регистра TL0. Далее
программа должна повторяться при формировании положительного
импульса на входе Т0. Также как и в предыдущих исследованиях, здесь
теоретически просчитывается временной интервал между включением и
выключением индикаторов и фиксируется этот интервал при
выполнении программы. Отмечается состояние индикаторов при
выдаче на них содержимого регистров ТН0 и TL0.
4. Исследовать работу таймера 0 в режиме 2 при GATE0 = 1 и
аппаратном прерывании TF0= 1
Программа исследования должна отражать следующий алгоритм.
1. Задается режим работы 2 для таймера 0. Работа таймера зависит
от сигнала на входе INT0. Разрешается прерывание при установке флага
TF0 в единицу.
2. Выбирается регистр, например, R0 из банка 0 и в него
записывается число повторений работы таймера 0 до переполнения.
3. Обнуляется регистр TL0.
4. С переключателей 1SB1,…,1SB8 вводится двоичный код и
записывается в регистр ТН0.
5. Включаются светодиодные индикаторы 1HL1,…,1HL8.
6. Включается таймер и опрашивается флаг пользователя F0.
7. При установке в подпрограмме прерывания флага F0 в единицу
выключается таймер и содержимое регистров ТН0 и ТL0
последовательно выдается на светодиодные индикаторы.
8. Работа программы должна многократно повторяться при
получении положительного импульса по входу Т0.
При выполнении данной программы отметить состояние регистров
ТН0 и ТL0 и сравнить их содержимое с введенным кодом с
переключателей 1SB1,…,1SB8.
Работу микропроцессорного модуля при выполнении каждой
программы обязательно показывать преподавателю.
ТРЕБОВАНИЕ К ОТЧЕТУ
Отчет о работе должен содержать:



Название лабораторной работы, фамилию и инициалы студента,
номер группы;
Функциональные схемы работы таймеров-счетчиков в
различных режимах;
Программ, реализующих задания по п.п. 1,…,4.
 Теоретические расчеты временных интервалов.
Контрольные вопросы
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Из каких регистров состоят таймеры счетчики микроконтроллера TSC80C31?
Доступны ли программно регистры таймеров-счетчиков?
Как фиксируется переполнение таймера-счетчика?
Какие два регистра управляют работой таймеров-счетчиков?
В каких режимах могут работать таймеры-счетчики и как задаются эти
режимы?
Как управляется таймер-счетчик сигналом по входу INTх?
Каким битом запускается в работу таймер-счетчик и где располагается этот
бит?
Как происходит прерывание таймера-счетчика при переполнении?
Сбрасывается ли флаг переполнения аппаратно при переходе к подпрограмме
обработки прерывания?
Можно ли продолжить работу таймера-счетчика при установленном флаге
TFх?
Как работает таймер-счетчик в режиме 0?
Как работает таймер-счетчик в режиме 1?
Как работает таймер-счетчик в режиме 2?
Как работает таймер-счетчик в режиме 3?
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1.
2.
Бродин
В.Б.,
Шагурин
М.И.
Микроконтроллеры.
Архитектура,
программирование, интерфейс. – М.: ЭКОМ, 1999. – 400с.
Боборыкин А.В. Ликовецкий Т.П. Однокристальные микроЭВМ. – М.:
МИКАП, 1994. – 400с.
ДЛЯ ЗАМЕТОК:
Исследование таймеров-счетчиков микроконтроллера
TSC8OC31. Программное формирование временных интервалов
Составитель: АБРАМОВ Алексей Дмитриевич
Редакторы Н.В.Б е г а н о в а
Технический редактор Г.Н.Ш а н ь к о в а
Подписано в печать
Формат 60 х 84 1/12. Бум. Типогр. №1.
Печать офсетная.
Усл. п.л. 0,70. Усл. кр.-отт. 0,70. Уч.-изд.л. 0,65.
Тираж 50 экз. С-321.
Самарский государственный технический университет.
443100 г. Самара, ул. Молодогвардейская, 244
Скачать