Аппаратные и программные средства встраиваемых систем



Pdf көрінісі
бет70/268
Дата07.01.2022
өлшемі3,23 Mb.
#18255
1   ...   66   67   68   69   70   71   72   73   ...   268
Символ  Позиция 
Назначение 
TF1 TCON.7 
Флаг переполнения таймера 1. Устанавливается аппаратно при 
переполнении таймера/счетчика. Сбрасывается при обслуживании 
прерывания аппаратно. 
TR1 TCON.6 
Бит управления таймера 1. Устанавливается/сбрасывается 
программой для пуска/останова. 
TF0 TCON.5 
Флаг переполнения таймера 0. Устанавливается аппаратурно. 
Сбрасывается при обслуживании прерывания 
TR0 TCON.4 
Бит управления таймера 0. Устанавливается / сбрасывается 
программой для пуска/останова таймера/счетчика. 
IE1 TCON.3 
Флаг внешнего прерывания 1. Устанавливается аппаратно, когда 
детектируется срез внешнего сигнала INT1. Сбрасывается при 
обслуживании прерывания. 
IT1 TCON.2 
Бит управления типом прерывания 1. Устанавливается / 
сбрасывается программно для определения типа запроса 
прерывания INT1 (по спаду/по низкому уровню). 
IE0 TCON.1 
Флаг внешнего прерывания 0. Устанавливается по срезу сигнала 
INT0. Сбрасывается при обслуживании прерывания. 
IT1 TCON.0 
Бит управления типом прерывания 0. Устанавливается / 
сбрасывается программно для определения типа  запроса 
прерывания INT0 (по спаду/по низкому уровню). 
 
Режим 0 (13-битный Таймер/Счетчик) 
В  данном  режиме  Таймер X работает  как 13-битный  суммирующий 
таймер/счётчик. Этот таймер/счётчик состоит из 8 бит регистра ТНх и младших 
5  бит  регистра TLx, где x в  обозначении  регистра  заменяется  на 0 или 1 в 
зависимости  от  того  таймера,  которым  мы  управляем.  Старшие 3 бита 
регистров TLx не  определены  и  игнорируются.  Таким  образом,  этот  режим 
можно трактовать как 8-битный таймер/счетчик с предварительным делителем 
(на 32) на  входе.  Установка  запускающего  таймер  флага TR0 или TR1 не 


 
80 
очищает  эти  регистры.  Работе  таймера 0 или  таймера 1 в  режиме 0 
соответствует схема: 
 
Рисунок 29. Работа таймера в режиме 0. 
Когда  содержимое  счетчика  изменяется  из  состояния  все "1" в  состояние 
все "0" , то устанавливается (принимает значение "1") флаг прерывания таймера 
TF0 или TF1. 
 
Режим 1 (16-битный Таймер/Счетчик) 
В  первом  режиме  работы  Таймер X работает  как  шестнадцатиразрядный 
таймер/счётчик.  Режим 1 похож  на  режим 0, за  исключением  того,  что  в 
регистрах таймера использует все 16 бит. В этом режиме регистры ТНх и TLx 
также  включены  друг  за  другом.  Работе  таймера 0 или  таймера 1 в  режиме 1 
соответствует схема: 
 
Рисунок 30. Работа таймера в режиме 1. 
Нулевой  и  первый  режимы  работы  Таймеров 0 и 1 предназначены  для 
формирования одиночного интервала  времени.  Если возникает необходимость 
формировать  последовательность  интервалов  времени  для  периодических 
процессов,  то  загрузка  регистров TH0 и TL0 для  задания  нужного  интервала 
времени  производится  программно,  что  для  коротких  интервалов  времени 
может привести к значительным затратам процессорного времени. 


 
81 
Для  формирования  последовательности  одинаковых  интервалов  времени 
используется режим работы таймера с автоперезагрузкой – режим 2. 
Режим 2 (8-битный Таймер/Счетчик с автоперезагрузкой) 
В  режиме 2 регистр  таймера TLx работает  как 8-битный  счетчик  с 
автоматической перезагрузкой начального значения из регистра ТНх в регистр 
TLx.  Переполнение  регистра TLx не  только  устанавливает  флаг TFx, но  и 
загружает  регистр TLx содержимым  регистра  ТНх,  который  предварительно 
инициализируется программно. Перезагрузка не изменяет содержимое регистра 
ТНх. Работе таймера 0 или таймера 1 в режиме 2 соответствует схема: 
 
Рисунок 31. Работа таймера в режиме 2. 
Режим 3 (Два 8-битных Таймера/Счетчика) 
Работа  в  режиме 3 имеет  отличия  для  таймеров 0 и 1. Таймер 1 в  этом 
режиме просто останавливает свой счет. Тот же эффект даст установка TR1=0. 
Логика работы таймера 0 в режиме 3 показана на схеме: 
 
Рисунок 32. Работа таймера в режиме 3. 
Таймер 0 в  режиме 3 устанавливает TL0 и TH0 как  два  разных  счетчика. 
Счетчик на базе TL0 использует биты управления таймера 0: C/T, GATE, TR0, 
INT0, TF0. TH0 зафиксирован  в  режиме  таймера  (считающего  машинные 


 
82 
циклы),  и  использует  для  управления  биты TR1 и TF1 таймера 1. Таким 
образом, прерывание от переполнения регистра TH0, будет обозначено флагом 
TF1. 
Режим 3 предназначен  для  приложений,  которым  нужен  дополнительный 
8-битный таймер/счетчик. Когда таймер 0 работает в режиме 3, таймер 1 может 
быть  выключен  установкой  его  в  режим 3, или  может  быть  оставлен 
включенным для использования в качестве генератора тактовых импульсов для 
последовательного  интерфейса,  или  для  любого  приложения,  которому  не 
требуется прерывание именно от таймера 1. 
 
Настройка таймера на заданную частоту 
Задача настройки таймера на заданную частоту во встраиваемых системах 
обычно связана с организацией системного времени
В  нашем  случае  под  этим  подразумевается  настройка  таймера  в  режиме 
«таймер»  таким  образом,  чтобы  его  переполнения  происходили  через 
одинаковые  интервалы  времени (1 мс, 5 мс, 10 мс  и  т.д.),  так  называемые 
кванты времени. 
Расчет  необходимой  частоты  работы  таймера  может  быть  произведен  по 
следующей формуле: 
Counts
f
F
osc

=
12

где  F – необходимая  частота,  f
osc
 – частота  микроконтроллера  (в  стенде 
SDK-1.1  f
osc
 = 11,0592 МГц),  Counts – количество  тиков  (счетов)  таймера  для 
достижения частоты F
Так  как  таймеры  у  нас  суммирующие,  то  регистры  таймера (THx, TLx) 
нужно инициализировать следующих кодом: 
Counts
Counts
T
timer

=
max

где  Counts
max
 – максимальное  количество  тиков  в  таймере,  которое 
определяется  по  разрядности  таймера,  его  режиму  работы.  Например,  если 
таймер 16-битный (режим 1), то Counts
max
 = 65536. 
Если  в  стенде SDK-1.1 необходимо  настроить  Таймер 0 на  частоту 
1000 Гц,  то  для  этого  нужно  использовать 16-битный  таймер  (режим 1). По 
формулам получится, что Counts = 921 (чуть больше) и T
timer
 = 64615 (FC67h). 
Таким образом, регистры Таймера 0 должны быть инициализированы так: TH0 
= FCh, TL0 = 67h. В  подразделе 6.4 приведен  пример  программирования 
таймера 0 в стенде SDK-1.1. 
 


 
83 
Использование таймера в качестве измерителя ширины импульсов 
Известно,  что  измерение  длительности  импульса  можно  произвести, 
подсчитав  импульсы  эталонной  частоты.  Принцип  измерения  длительности 
импульсов иллюстрируется рисунком [51]: 
 
Рисунок 33. Принцип измерения длительности импульсов 
Для  измерения  длительности  импульса  измеряемый  сигнал  подаётся  на 
вывод  микроконтроллера INTx и  в  бит  управления GATE записывается 
разрешающий  сигнал  логической  единицы.  Таймер/счётчик  настраивается  в 
режим  таймера  записью  в  бит C/Tx логического  нуля.  Содержимое  таймера 
обнуляется. 
Если  теперь  на  вход  микроконтроллера INT0 подать  импульс  с 
неизвестной  длительностью,  то  в  регистрах TH0 и TL0 будет  записана  его 
длительность в микросекундах. 
 
Использование таймера в качестве частотомера 
Известно,  что  измерение  частоты  можно  произвести,  подсчитав 
количество  периодов  неизвестной  частоты  за  единицу  времени.  Принцип 
измерения частоты иллюстрируется рисунком [51]: 
 
Рисунок 34. Принцип измерения частоты 
Для  измерения  частоты  измеряемый  сигнал  подаётся  на  вывод 
микроконтроллера Tx. Таймер/счётчик  настраивается  в  режим  счётчика 
записью  в  бит C/Tx логической  единицы.  Содержимое  таймера  обнуляется. 
Таймер включается на строго определённый интервал времени. Этот интервал 
задаётся оставшимся таймером. 


 
84 
Если  теперь  на  вход  микроконтроллера T0 подать  сигнал  с  неизвестной 
частотой, то в регистрах TH0 и TL0 будет записана его частота в килогерцах. 
 


Достарыңызбен бөлісу:
1   ...   66   67   68   69   70   71   72   73   ...   268




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет