logo
МПТ_L_к

8.3. Функції часової витримки

Функції часової витримки або генерації часових інтервалів, необхідні при організації взаємодії МП з периферійними пристроями. Тактова частота МП завжди відома точно та разом з числом тактів , які необхідно на виконання команд в МП, може використовуватись для організації часової затримки. При цьому використовують 2 способи.

Для малих затримок може використовуватись команда пустої операції (NOP;), виконання якої займає фіксовану кількість тактів без виконання перетворення інформації. Наприклад, в МП К580 з тактовою частотою 2 МГц така команда виконується за 4 такти, тобто, за 2 мкс ( час виконання одного такту = 0,5 мкс). Послідовний запис у програмі декількох таких команд дозволяє дістати більший час витримки, але він буде обов’язково кратним часу виконання одної команди.

Другий спосіб організації програмної затримки в часі будується на

організації циклів виконання одної ділянки програми, число повторень якої і відповідно витримка в часі залежать від константи, що завчасно була занесена в лічильник. Наприклад:

MOV A, 40; 7 тактів, безпосередня загрузка акумулятора

TAJM: INX A ; 5 тактів, віднімання 1 від числа в акумуляторі

CZ BEG1 ; умовний перехід по нульовому результату та перехід

JMP TAJM; на початок, займають 10 тактів

Таким чином після виконання цієї послідовності команд дістаємо затримку в тактах 7 + 40 ( 5 + 10) = 607 тактів, та множимо на час одного такту (0,5 мкс) і отримуємо витримку 3,5 + 40 * 7,5 = 303,5 мкс.

Якщо витримка в часі потрібна рівно 300 мкс, то можна використати команди NOP (пуста операція) і програма буде мати вигляд:

MOV A, 39; 7 тактів, безпосередня загрузла акумулятора

TAJM: INX A ; 5 тактів, віднімання 1 від числа в акумуляторі

CZ BEG1 ; умовний перехід по нульовому результату та перехід

JMP TAJM; на початок, займають 10 тактів

BEG1 : NOP ; пуста операція

NOP ; пуста операція

…….. ; продовження програми.

Зальний час витримки = 3,5 + 39 * 7,5 + 2*2 = 300 мкс.

При організації витримки в часі в процесорі КР1816ВЕ51необхідно використовувати таймери/лічильники Т/С0 або Т/С1. Наприклад, підпрограма виконання витримки на 50 мс з похибкою не більше 2 мкс.

ZATRUM MOV TMOD, #0001H; налаштування лічильника Т/С0

MOV TH0, #HIGH (NOT (50000-16));

MOV TL0, #LOW (NOT (50000-16));

SETB TCON.4; старт лічильника Т/С0

VUTR JMB TCON.5, VUTR; чекання

ANL TCON, #NOT (30H); стоп та скид Т/С0

RET; повернення.