Таймери/лічильники
У початковій архітектурі MCS - 51 два 16-розрядні таймери/лічильника, Таймер 0 і Таймер 1. Кожен з них незалежно може бути запрограмований на роботу в якості або таймера(відлік часу через підрахунок внутрішніх імпульсів синхронізації), або лічильника(підрахунок подій на зовнішньому вході). У обох випадках перехід через заздалегідь встановлений рубіж призводить до формування запиту переривання.
Вибір режиму роботи кожного з таймерів робиться бітами З/Тх# (х = 0,1) регістра TMOD. Підрахунок подій робиться за допомогою інкремента програмно доступного регістра даних, який з¬стоїть з регістра молодшого байта TLx і регістра старшого байта ТНх.
При роботі в режимі таймера(З/Тх# = 0) регістр TLx нарощується в кожному машинному циклі і частота рахунку рівна Fosc/12.
У режимі лічильника(З/Тх# = 1) регістр TLx нарощується при пері¬ході сигналу на вході Тх з " 1" в " 0". Входи опитуються під час фази S5P2 кожного машинного циклу. При виявленні високого рівня сигналу в одному циклі і низького рівня в наступному циклі лічильник инкрементируется. Нове значення в регістрі з'являється під час фази S3P1 циклу, що йде за тим, в якому був виявлений перехід. По¬скольку на розпізнавання переходу йде два машинні цикли, максимальна частота рахунку складає Fosc/24. Обмежень на шпаруватість вхідного сигналу немає, але для упевненої фіксації перепаду сигнал повинен утримуватися в кожному значенні принаймні один машинний цикл.
Лічильники/таймери обслуговуються регістром режиму TMOD і регістром управління TCON.
Ім'я біта | Номер біта | Функція |
GATE1 | TMOD.7 | Біт управління Таймером 1. При GATE 1=1 Таймер 1 працює завжди при TR1=1. При GATE1=0 для роботи потрібна умова TR1=1 і INT1#=1. |
С/Т1# | TMOD.6 | Біт вибору типу подій для Таймера 1. При СД1#=1 він працює як лічильник, при СД1#=0 як таймер. |
М1.1 | TMOD.5 | Біт 1 визначення режиму роботи Таймера 1. |
М1.0 | TMOD.4 | Біт 0 визначень режиму роботи Таймера 1. |
GATE0 | TMOD.3 | Біт управління Таймером 0. При GATE0=1 Таймер 0 працює завжди при TR0=1. При GATE0=0 для роботи потрібна умова TR0=1 і INT0#=1. |
С/Т0# | TMOD.2 | Бит выбора типа событий для Таймера 0. При СД0#=1 он работает как счетчик, при как таймер. |
М1.0 | TMOD.1 | Біт 1 визначення режиму роботи Таймера 0. |
М0.0 | TMOD.0 | Біт 0 визначень режиму роботи Таймера 0. |
Біти Ml і МО таким чином визначають режими роботи таймерів/ лічильників :
М1 | МО | Режим роботи |
Режим 0. ТНх як 8-розрядний таймер/лічильник. TLx як 5-розрядного переддільника | ||
Режим 1. 16-разрядный таймер/лічильник. ТНх і TLx включені послідовно | ||
Режим 2. 8-разрядный таймер/лічильник TLx з автоперезавантаженням значенням з ТНх | ||
Режим 3. TL0 як 8-розрядний таймер/лічильник, керований бітами управління Таймера 0. TH0 як 8-розрядний таймер/лічильник, керований бітами управління Таймера 1. Таймер 1 не працює. |
Ім'я біта | Номер біта | Функція |
TF1 | TCON.7 | Прапор переповнювання Таймера 1. Встановлюється під час переходу рахункового регістра таймера із стану FFH в стан ООН. Очищається при передачі управління на процедуру обробки переривання. |
TR1 | TCON.6 | Біт запуску Таймера 1. При TR1=1 рахунок дозволений. |
TF0 | TCON.5 | Прапор переповнювання Таймера 0. Встановлюється під час переходу рахункового регістра таймера із стану FFH в стан ООН. Очищається при передачі управління на процедуру обробки переривання. |
TR0 | TCON.4 | Біт запуску Таймера 0. При TR0=1 рахунок дозволений. |
IE1 | TCON.3 | Прапор запиту переривання по вхід INT1#. |
IT1 | TCON.2 | Біт селектора типу активного сигналу на вході INT1#. При 1Т1=1 активним є перехід "Г - "0й, при 1Т1=0 активним являється низький рівень сигналу. |
1Е0 | TCON.1 | Прапор запиту переривання по вхід INT0#. |
IT0 | TCON.O | Біт селектора типу активного сигналу на вході INT0#. При 1Т0=1 активним є перехід "Г - " 0", при 1Т0=0 активним являється низький рівень сигналу. |
Вибір типу підраховуваних подій для Таймера 0 і Таймера 1, тобто призначення їм функції таймера або лічильника, визначається значенням біта управління З/Тх# регістра TMOD. Таймери здатні працювати в трьох режимах, вибір режиму для кожного таймера робиться комбінацією бітів Mix, Мох того ж регістра.
Рахунок дозволяється бітом TRx, якщо біт GATEx = 0. Коли рахункове значення переходить із стану все " 1" в стан все " 0", встановлюється прапор запиту переривання TFx. Установка біта GATEx = 1 дає можливість управляти таймером від входу INTx# і вимірювати таким чином ширину імпульсів. Установка бітів запуску не очищає рахункові регістри.
Режим 0. У цьому режимі має місце 13-розрядний рахунковий регістр, в якому регістр ТНх працює як 8-розрядний лічильник, а регістр TLx використовується як 5-бітового переддільника.
Режим 1. Цей режим аналогічний режиму 0, але використовуються усі 16 розрядів регістрів ТНх і TLx.
Режим 2. У цьому режимі регістр TLx працює 8-розрядний рахунковий регістр. Після переповнювання він автоматично перезавантажується значенням з регістра ТНх, який при цьому свого заздалегідь запрограмованого значення не втрачає.
Режим 3. Таймер 1 в цьому режимі блокований, начебто біт TR1 був скинутий.
Таймер 0 в режимі 3 працює як два незалежні рахункові регістри, причому регістр TL0 управляється бітами управління Таймера 0, а регістр ТНО управляється бітами управління Таймера 1.