В мікроконтролерах сімейства MCS-51 звичайно є два 16-бітних таймера/лічильника T/C0 і T/C1, які можуть бути використані як в якості таймерів, так і в якості лічильників зовнішніх подій. Кожен з них складається з двох 8-бітних регістрів даних TH0 (старший байт) і TL0 (молодший байт) для таймера ТС0 або TH1 і TL1 для таймера ТС1.
У режимі таймера вміст цих регістрів інкрементується в кожному машинному циклі, через кожні 12 періодів коливань кварцового резонатора.
У режимі лічильника вміст регістрів інкрементується у разі переходу з «1» в «0» зовнішнього вхідного сигналу, що подається на виводи мікроконтролера T0 або T1. Так як на розпізнавання такого переходу потрібні два машинних цикли, максимальна частота підрахунку вхідних сигналів дорівнює 1/24 частоти резонатора. Для гарантованого прочитання вхідний сигнал повинен утримувати значення «0» та «1», як мінімум, протягом одного машинного циклу мікроконтролера.
Таймер/лічильник ТС1 також використовується для встановлення швидкості передачі послідовного порту.
Структурні схеми таймерів/лічильників ТС0 і ТС1, за винятком одного режиму, ідентичні. Таймер/лічильники можуть включатися і виключатися як програмно, за допомогою біт керування TR0/TR1 (за умови GATE0/GATE1 = 0), так і апаратно, шляхом подачі керуючого сигналу на входи INT0/INT1 (за умови одночасного виконання GATE0/GATE1 = 1 та TR0/TR1 =1). Слід зазначити, що після включення і після скидання мікроконтролера роботу таймерів/лічильників.
Для роботи з цими таймерами/лічильниками використовуються два регістри керування TMOD та TCON.
На рис. 5.1 представлено бітову структуру регістру TMOD. Призначення окремих біт керування описано в табл. 5.1. Всі біти цього регістру доступні як для читання, так і для запису. При включенні мікроконтролера до регістру TMOD записується нульове значення.
| GATE1 | C/T1 | M1 | M0 | GATE0 | C/T0 | M1 | M0 |
Рис.5.1
Таблиця 5.1.
| Біт | Позиція | Призначення |
| GATE1 | TMOD.7 | Управління включенням таймера ТС1. «1» – зовнішнє включення. Таймер працює якщо одночасно виконуються умови INT1 = 1 і TR1 = 1. «0» – програмний запуск. Таймер працює якщо TR1 = 1. |
C/ 1
| TMOD.6 | Біт вибору типу роботи для таймера TC1: «0» - працює як таймер; «1» - працює як лічильник. |
| M1.1 | TMOD.5 | Визначення режиму роботи ТС1. |
| M1.0 | TMOD.4 | Визначення режиму роботи ТС1. |
| GATE0 | TMOD.3 | Управління включенням таймера ТС0. «1» – зовнішнє включення. Таймер працює якщо одночасно виконуються умови INT0 = 1 і TR0 = 1. «0» – програмний запуск. Таймер працює якщо TR0 = 1. |
C/ 0
| TMOD.2 | Біт вибору типу роботи для таймера TC0: «0» - працює як таймер; «1» - працює як лічильник. |
| M0.1 | TMOD.1 | Визначення режиму роботи ТС0. |
| M0.0 | TMOD.0 | Визначення режиму роботи ТС0. |
На рис. 5.2 представлено бітову структуру регістру TCON. У табл. 5.2 описано призначення окремих біт керування. Для контролю стану та керування режимами роботи таймерів/лічильників використовуються старші чотири біти цього регістру – TF1, TR1, TF0, TR0. Біти керування молодшої тетради відповідають за налаштування режимів роботи зовнішніх переривань по входам INT0 та INT1.
Всі біти цього регістру доступні як для читання, так і для запису. При включенні мікроконтролера до регістру TCON записується нульове значення.
| TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
Рис.5.2
Таблиця 5.2.
| Біт | Позиція | Призначення |
| TF1 | TCON.7 | Прапор переповнення таймера ТС1. Встановлюється при переповненні. Скидається при обслуговуванні переривання апаратно. |
| TR1 | TCON.6 | Біт запуску/зупинки таймера ТС1. Встановлюється/скидається програмно. |
| TF0 | TCON.5 | Прапор переповнення таймера ТС0. Встановлюється при переповненні. Скидається при обслуговуванні переривання апаратно. |
| TR0 | TCON.4 | Біт запуску/зупинки таймера ТС0. Встановлюється/скидається програмно. |
| IE1 | TCON.3 | Прапор зовнішнього переривання по входу INT1. Встановлюється апаратно відповідним сигналом на вході INT1.Скидається апаратно при обслуговуванні переривання, або програмно. |
| IT1 | TCON.2 | Біт управління типом сигнала, що викликає переривання: IT1 = 0 – переривання по низькому рівню сигнала; IT1 = 1 – переривання по зрізу сигнала. Встановлюється/скидається програмно. |
| IE0 | TCON.1 | Прапор зовнішнього переривання по входу INT0. Встановлюється апаратно відповідним сигналом на вході INT0.Скидається апаратно при обслуговуванні переривання, або програмно. |
| IT0 | TCON.0 | Біт управління типом сигнала, що викликає переривання: IT1 = 0 – переривання по низькому рівню сигнала; IT1 = 1 – переривання по зрізу сигнала. Встановлюється/скидається програмно. |
Обидва таймера/лічильника можуть налаштовуватися для роботи в чотирьох режимах:
· режим 0 - 13-бітний таймер;
· режим 1 - 16-бітний таймер;
· режим 2 - 8-бітний автоперезавантажувальний таймер;
· режим 3 - таймер ТС0, як два роздільних 8-бітних таймера.
У табл. 5.3 приведено відповідність між станом біт керування М0.0, М0.1 (М1.0, М1.1) та режимами роботи таймерів/лічильників.
Таблиця 5.3
| Режим | М1 | М0 | Опис режиму роботи |
| 13-бітний таймер/лічильник | |||
| 16-бітний таймер/лічильник | |||
| 8-бітний таймер/лічильник з автоперезавантажуванням | |||
| ТС0, як два 8-бітних таймера/лічильник |
1






