
- •Передмова
- •Intel 430lx
- •Intel 430nx
- •Intel 430fx
- •Intel 430hx
- •Intel 430vx
- •Intel 430tx
- •Intel 450gx/kx
- •Intel 440fx
- •Intel 440lx agPset
- •Intel 440ex
- •Intel 440bx agPset
- •Заняття 1. Поняття про систему переривання пеом
- •Принципи організації системи переривання програм
- •Слово стану процесора (програми)
- •Характеристики системи переривання
- •Організація переходу до перериваючої програми та пріоритетне обслуговування запитів переривання
- •Процедура переривання з опитуванням джерел (прапорців) переривання
- •Програмно-керований пріоритет перериваючих програм
- •Методи використання механізму переривань
- •Класи переривань пеом
- •Призначення контролера апаратних переривань пеом
- •Опис основних елементів і8259а
- •Стани програмованого контролера переривань
- •Заняття 5. Керування режимами роботи пкп
- •Void main (void){
- •Int mask;
- •Заняття 6. Керування пріоритетами переривань
- •Install proc near
- •Заняття 8. Особливості практичного використання апаратних та програмних переривань
- •Volatile long ticks;
- •Void main(void) {
- •Void _interrupt _far timer(void) {
- •Int8 proc near cli
- •Int09 proc near
- •Розділ 3. Підсистема таймера та годинника реального часу
- •Заняття 3. Системні засоби програмного доступу до ресурсів таймера
- •Void tm_delay(int ticks) {
- •Void main (void){
- •Void main(void){
- •Заняття 4. Приклади використання функціональних можливостей таймера в прикладних задачах
- •Void main(void){ int Frac; char k;
- •Void tm_sound(int freq, int time) {
- •Void tm_delay(int ticks) {
- •Void tm_sound(int freq, int time){
- •Void main(){
- •Void main() { int I,j; clrscr();
- •Заняття 5. Архітектура та принципи функціонування годинника реального часу
Розділ 3. Підсистема таймера та годинника реального часу
Заняття 2. Методи програмного керування таймером.
Заняття 3. Системні засоби програмного доступу до ресурсів таймера.
Заняття 4. Приклади використання функціональних можливостей таймера в
прикладних задачах.
Заняття 5. Архітектура та принципи функціонування годинника реального
часу.
Заняття 6. Використання функціональних можливостей годинника реального
часу в прикладних програмах.
Закріплення матеріалу.
Ви приступаєте до вивчення розділу 3 «Підсистема таймера та годинника реального часу». Він присвячений вивченню архітектури та принципів функціонування пристроїв, що дозволяють формувати часові інтервали, незалежні від швидкості роботи процесора та відстежувати календарний (астрономічний) час. Галузь застосування цих пристроїв достатньо широка і містить:
переривання операційної системи з розділенням часу через рівні інтервали, для здійснення перемикання програм;
вивід точних часових сигналів з програмованими періодами в пристрої вводу/виводу (наприклад, в аналого-цифровий перетворювач);
програмні задання швидкості передачі даних;
вимірювання часової затримки між зовнішніми подіями;
підрахунок числа появи подій в зовнішньому експерименті та ввід показника в комп'ютер;
переривання процесора після появи запрограмованого числа зовнішніх подій;
формування календарного часу енергонезалежною підсистемою;
зберігання інформації про конфігурацію ПЕОМ;
формування календаря;
формування програмно заданих періодів апаратних переривань.
Тут Ви дізнаєтесь, як змусити Вашу ПЕОМ виконувати запропоновані Вами дії в точно визначені моменти часу, видавати звукові сигнали та музику, формувати послідовності псевдовипадкових чисел.
Ви побачите, що потрібно зробити для задання конфігурації ПЕОМ та вивчите системні засоби програмного керування таймером та годинником реального часу.
Прикладні задачі
Ви спробуєте сформулювати рекомендації відносно коректного використання каналів таймера та годинника реального часу в прикладних задачах.
Розв'яжіть проблему
У цій частині Ви самостійно розв'яжете проблему перетворення клавіатури Вашого ПК у клавіатуру ФОНО.
Заняття 1. Архітектура та принципи функціонування таймера
Тема заняття
Архітектура та принципи функціонування таймера.
Мета заняття
Отримати уявлення про галузь практичного вико ристання таймера та режимів його функціонування.
Вивчити спосіб підключення таймера до системної шини, отримати уявлення про внутрішню архітектуру таймера.
Вивчити призначення, характеристики та прин ципи функціонування програмно доступних регістрів та лічильників таймера.
Зрозуміти та засвоїти призначення вхідних та вихідних сигналів таймера.
Призначення таймера
Програмувальний таймер призначений для отримання програмно керованих часових затримок та генерації функцій, що задають час. Таймер дозволяє підняти ефективність програмування процесів керування та синхронізації зовнішніх пристроїв. Програмувальні інтервальні таймери дозволяють формувати задані інтервали часу незалежно від швидкодії обчислювальної системи та є одним із засобів забезпечення роботи ПЕОМ у реальному масштабі часу та виконують:
вимір часових затримок між подіями;
підрахунок числа зовнішніх подій, переривання процесора при досягненні їх запрограмованого числа;
керування процедурою ввімкнення/вимкнення мотора пристрою;
програмування швидкостей передачі даних між пристроями;
розділення часу між програмами.
Архітектура та принципи функціонування таймера
Архітектура ПЕОМ PC AT використовує підсистему триканального 16-розрядного таймера i8254 в якості системного таймера. Таймер містить три незалежні канали, кожний з яких може бути запрограмований на роботу в одному з шести режимів для двійкового або двійково-десяткового рахунку. На кожний канал можуть подаватись вхідні синхросигнали, а на виході буде отримано сигнал, частота якого дорівнює частоті вхідного сигналу, поділеної на довільне 16-розрядне число. В ПЕОМ PC AT вхідні синхросигнали для всіх трьох каналів надходять від єдиного джерела з частотою 1,19 Мгц. Кожний канал може програмуватись для роботи в одному з шести можливих режимів:
Режим 0 - переривання термінального рахунку;
Режим 1 - програмований очікуючий мультивібратор;
Режим 2 - імпульсний генератор частоти;
Режим 3 - генератор меандра;
Режим 4 - програмно формований строб;
Режим 5 - апаратно формований строб.
Режими 0 та 4 забезпечують одноразове виконання функцій; режими 1 та 5 - роботу з перезапуском; режими 2 та 3 - роботу з автозапуском. Вихід каналу 0 (OUT0) зв'язаний зі входом IRQ0 контролера переривань (І8259А) та забезпечує переривання системного таймера для формування показника годинника реального часу в робочій області BIOS, використовуючи режим 3. Вихід каналу 1 (OUT1) генерує сигнал запиту регенерації динамічного ОЗП, використовуючи режим 2. Вихід каналу 2 (OUT2) формує тональний сигнал для динаміка, використовуючи режим 3. Блок-схема підсистеми таймера в архітектурі ПЕОМ PC AT наведена на рис. 3.1.
Типова внутрішня архітектура таймера/лічильника подій наведена на рис. 3.2. Функціональне призначення виводів таймера вказано в табл. 3.1.
Таймер складається з буфера даних, схеми читання/ запису та апаратури каналів.
Буфер даних містить вісім двонаправлених буферів, призначених для сполучення таймера із системною шиною ПЕОМ. Дані приймаються, або передаються цими буферами при виконанні команд читання або запису.
Схема читання/запису приймає вхідні сигнали з системної шини та генерує керуючі сигнали для інших функціональних блоків таймера.
Сигнали А1 та АО вибирають один з трьох лічильників або регістр керування (CWR) для читання або запису.
Для виконання операцій читання або запису повинні виконуватись такі умови: -CS=O, -RD=O або -CS=O, -WR=O відповідно. Сигнали -WR, -RD без активного CS ігноруються.
Схеми каналів 0,1,2 ідентичні.
Таблиця 3.1. Призначення виводів таймера
Познач, виводу |
Тип виводу |
Функціональне призначення |
D0-D7 |
Вх-вих |
Шина даних |
CLKO, CLK1, CLK2 |
Вхід |
СИНХРОВХОДИ каналів 0-2 таймера |
OUT0, OUT1, OUT2 |
Вихід |
ВИХОДИ каналів 0-2 таймера |
GATEO, GATE1, GATE2 |
Вхід |
ДОЗВІЛ РАХУНКУ каналів 0-2, активний рівень — високий |
-CS |
Вхід |
ВИБІР ТАЙМЕРА. Активний рівень — низький |
-WR |
Вхід |
ЗАПИС. Активний рівень — низький. Дозволяє запис у регістри контролера, якщо CS=O |
-RD |
Вхід |
ЧИТАННЯ. Активний рівень — низький. Дозволяє зчитування регістрів контролера в процесор, якщо CS=O |
Al, A0 |
Вхід |
АДРЕСА. Використовується для вибору лічильників або керуючого слова для читання або запису |
Кожний канал містить у собі 16-розрядну вихідну защіпку OL, необхідну для запам'ятовування та зберігання вмісту лічильника СЕ за командами «читання на льоту» та «обернене читання». Після виконання цих команд вміст OL може бути зчитаний без зупинки рахунку; 16-розрядний лічильник/таймер СЕ працює в режимі віднімання.
Лічильник виконує обрахункові операції в двійковому або двійково-десятковому коді з однобайтовими або двобай-товими числами. Максимальне число рахунку в двійковому коді — 216, в двійково-десятковому коді — 104. Лічильники трьох каналів не залежать один від одного та можуть мати різні режими роботи та різні типи рахунку (двійковий або двійково-десятковий).
16-розрядний регістр CR призначений для зберігання констант рахунку в режимі автозапуску. Вміст регістра змінюється тільки при перезавантаженні лічильника або при перепрограмуванні режиму його роботи (запис керуючого слова). В останньому випадку CR встановлюється на нуль. При завантаженні тільки одного з байтів лічильника (молодшого CR1 або старшого CRm) другий байт буде нульовим. Обидва байти CR передаються для рахунку в СЕ одночасно.
8-розрядний регістр стану RSTAT містить код типу рахунку, код режиму роботи каналу, код читання/запису констант рахунку, ознаку перезавантаження констант та стану виходу OUT. Вміст RSTAT замикається STATL за командою «обернене читання». Після виконання цієї команди вміст STATL може бути зчитаний.
8-розрядний регістр керування CWR призначений для прийому та зберігання коду керуючого слова (розряди D5-D0), який задає режим роботи каналу, визначає тип рахунку та послідовність завантаження констант рахунку. Вибір конкретного каналу здійснюється за допомогою старших (D7, D6) розрядів керуючого слова.
Логічний пристрій здійснює керування входом/виходом лічильника/таймера в залежності від запрограмованого режиму.
Вправа
Яке значення коефіцієнтів перерахунку для формування інтервалів часу 2млс, 5 млс, 10 млс, 35 млс, 50 млс при двійковому та двійково-десятковому способах рахунку.
Приклад розв'язання
Імпульси задаючого генератора надходять на вхід CLK таймера з періодом Tclk & 1/1.19 мГц = 0.84 мкс. Для формування інтервалу часу 2 млс необхідно визначити коефіцієнт перерахунку:
Ксч = 2000 мкс / 0.84 мкс s 2381 (для двійково-десяткового рахунку) та 100101001011b (для двійкового рахунку).
Питання для самоконтролю знань
Призначення таймера в обчислювальній системі.
Скільки каналів входить до складу таймера 8254?
Як визначити частоту вихідних сигналів таймерів?
В яких режимах може функціонувати таймер?
Для яких цілей в ПЕОМ використовуються таймери?
Нарисуйте схему підключення таймера до системної шини ПЕОМ та поясніть принципи функціонування.
Перелічіть основні функціональні блоки таймера, вкажіть їх призначення та характеристики.
Перелічіть вхідні та вихідні сигнали таймера і поясніть їх призначення.
Резюме
Програмувальні інтервальні таймери дозволяють формувати задані інтервали часу незалежно від швидкодії обчислювальної системи та є одним із засобів забезпечення роботи ПЕОМ у реальному масштабі часу. Таймер містить три незалежні канали, кожний з яких може бути запрограмований на роботу в одному з шести режимів для двійкового або двійково-десяткового рахунку. Схеми каналів 0, 1, 2 ідентичні.
Режим 0 - переривання термінального рахунку;
Режим 1 - програмований очікуючий мультивібратор;
Режим 2 - імпульсний генератор частоти;
Режим 3 - генератор меандра;
Режим 4 - програмно формований строб;
Режим 5 - апаратно формований строб.
Максимальне число рахунку в двійковому коді — Tclk * 216, у двійково-десятковому коді — Tclk * 104 (Tclk — період тактових імпульсів, Tclk = (1/ 1.19) н 0.84 мкс).
В архітектурі IBM PC/AT канал 0 (OUT0) таймера забезпечує переривання системного таймера для формування показника годинника реального часу в робочій області BIOS, використовуючи режим 3. Канал 1 (OUT1) генерує сигнал запиту регенерації динамічного ОЗП, використовуючи режим 2. Вихід каналу 2 (OUT2) формує тональний сигнал для динаміка, використовуючи режим 3.
Ваш наступний крок
Після ґрунтовного вивчення призначення, архітектури та принципів функціонування, Ви готові до вивчення режимів роботи таймера та способів їх програмного задання. Далі Ви дізнаєтесь, які порти вводу/виводу використовуються для програмування таймера, вивчите структури керуючих слів та команд, навчитесь їх формувати.
Заняття 2. Методи програмного керування таймером
Тема заняття
Порти програмування таймера.
Формат керуючих слів та команд.
Мета заняття
Вивчити призначення портів, що використову ються для програмування таймера.
Вивчити формат керуючих слів, навчитись їх фор мувати та записувати в регістри керування таймера.
Вивчити формати команд «читання на льоту», «обернене читання» та навчитись передавати їх у порти таймера.
Засвоїти відмінні особливості режимів функціонування таймера.
Навчитись ідентифікувати режими таймера за форматом вмісту регістра стану (RSTAT).
Ознайомитись з параметрами сигналів на входах таймера, що ініціюють операції запису/читання регістрів таймера.
Програмування таймера
Таймер для роботи в системі повинен бути запрограмований. Порти, що використовуються для програмування таймера, наведені в табл. 3.2. Після ввімкнення живлення стан таймера невизначений.
Режим роботи кожного лічильника визначається при його програмуванні. Кожний лічильник повинен бути запрограмований, перш ніж він буде використовуватись. Не використовувані лічильники не потребують програмування. При програмуванні лічильника спочатку записується керуюче слово, а далі константа рахунку. Формат керуючого слова зображено на рис. 3.3.
Запис керуючого слова відбувається при записі в порт 43h (A1, А0=11), а запис констант рахунку в канали 0, 1,2 — при записі в порти 40h, 41h, 42h (Al, A0 = 00, 01, 10 відповідно) при активних сигналах -CS та -WR (CS=O, WR =0).
Процедура програмування таймера дуже гнучка. Необхідно запам'ятати два правила:
1) у кожний лічильник керуюче слово має бути записане перед завантаженням коефіцієнта рахунку;
2) лічильник повинен завантажуватись тією кількістю байтів значення рахунку, яка вказана в керуючому слові (молодший байт, старший байт).
Таблиця 3.2 Порти, що використовуються для програмування таймера
Адреса порту |
Функція
|
040h |
Читання або запис рахунку для лічильника 0 |
041h |
Читання або запис рахунку для лічильника 1 |
042h |
Читання або запис рахунку для лічильника 2 |
043h |
Запис керуючого слова, команд «читання на льоту» та «обернене читання» |
Рис. 3.3 Формат керуючого слова
Так як CWR кожного каналу має свою адресу (SC1, SCO) та завантажуваний в CWR код зберігається до наступного програмування, то не потрібно спеціальної послідовності програмування. Прийнятна будь-яка послідовність що задовольняє наведені вище правила. Наприклад, щоб встановити інтервал генерації, необхідно виконати таку послідовність команд:
mov al,54h
out 43h,al ;3апис керуючого слова для каналу 1
mov al,0Fh
out 41h,al ;3апис значення інтервалу генерації (мкс)
Нова константа рахунку може бути записана в лічильник у будь-який момент часу та повинна відповідати запрограмованому формату рахунку.
Слід пам'ятати, що при записі констант рахунку вони надходять до CR, а безпосередньо в лічильник попадають по вхідному сигналу GATE. Якщо лічильник запрограмований для читання/запису двох байтів рахунку, програма завантаження не повинна передавати керування між записом першого та другого байтів іншій програмі, яка також записує дані в цей лічильник.
У табл. 3.3 наведені операції, що виконуються при різних комбінаціях на входах CS, RD, WR, AO, A1 таймера.
Таблиця 3.3 Операції, що ініціюються сигналами на входах таймера
CS |
-RD |
-WR |
А1 |
А0 |
Порт |
Операції |
0 |
1 |
0 |
0 |
0 |
40 |
Запис у лічильник 0 |
0 |
1 |
0 |
0 |
1 |
41 |
Запис у лічильник 1 |
0 |
1 |
0 |
1 |
0 |
42 |
Запис у лічильник 2 |
0 |
1 |
0 |
1 |
1 |
43 |
Запис керуючого слова |
0 |
0 |
1 |
0 |
0 |
40 |
|
0 |
0 |
1 |
0 |
1 |
41 |
Читання з лічильника 1 |
0 |
0 |
1 |
1 |
0 |
42 |
Читання з лічильника 2 |
0 |
0 |
1 |
1 |
1 |
43 |
|
1 |
X |
X |
X |
X |
- |
Немає операцій |
0 |
1 |
1 |
X |
X |
- |
|
Є три методи читання з лічильників: просте читання, «читання на льоту» (запам'ятовування вмісту лічильників) та «обернене читання» (запам'ятовування вмісту лічильників та/або RSTAT в STATL).
Перший метод реалізується простою операцією читання. При читанні лічильника, що вибрав Al, A0, робота лічильника повинна бути зупинена подаванням GATE=0, або зовнішнім логічним пристроєм, що блокує подавання CLK на вибраний лічильник. У протилежному випадку рахунок може бути змінений у процесі читання та його результат буде невизначеним.
Другий метод — «читання на льоту». Формат керуючого слова відповідної команди зображено на рис. 3.4.
Рис. 3.4. Формат команди «читання на льоту»
Ця команда дозволяє прочитати поточне значення лічильника в будь-який момент часу без зупинки рахунку. Команда «читання на льоту» не впливає на вміст регістра CWR. При виконанні цієї команди поточне значення рахунку заскакує у вихідну защіпку OL та знаходиться там до початку виконання першої команди зчитування цього лічильника. Адреса лічильника, що заскакує, визначається розрядами SCI, SCO команди. Якщо в таймер надходить кілька команд «читання на льоту» для одного й того ж лічильника без наступних зчитувань, то результатом читання буде рахунок, замкнений першою командою «читання на льоту».
При будь-якому методі значення рахунку повинно читатись згідно з форматом програмування: якщо лічильник програмується на два байти зчитування, два байти і повинні бути прочитані. Необхідно пам'ятати, що коли операція зчитування виконана не до кінця, нова команда «читання на льоту» не сприймається, а поки константа рахунку не завантажена в СЕ, вона не може бути прочитана. Два байти не обов'язково зчитувати одразу один за одним, між їх зчитуваннями можуть бути виконані операції читання або запису інших лічильників.
Друга особливість таймера: читання може перериватись записом на той самий лічильник. Наприклад, якщо лічильник програмується на два байти рахунку, можлива така послідовність:
читати молодший байт;
записати новий молодший байт;
читати старший байт;
записати новий старший байт.
Команда «обернене читання» дозволяє користувачу перевірити значення лічильника, запрограмований режим, поточний стан виходу OUT та ознаку перезавантаження констант вибраного лічильника.
Третій метод передбачає використання команди «обернене читання». Формат керуючого слова для цієї команди зображено на рис. 3.5.
За командою можуть виконуватись дві операції: заскакування поточного значення лічильника(ів) та/або заскакування поточного значення RSTAT каналу(ів). Ці операції виконуються або назалежно, або сполучаються. Команда еквівалентна кільком командам «читання на льоту» (по одній на кожний лічильник). При COUNT=0 вміст лічильника(ів) заскакує в OL та зберігається там до його зчитування або перепрограмування. Зчитуваний лічильник автоматично «відмикається», коли буде повністю прочитаний, але інші лічильники залишаються замкненими, поки не будуть прочитані.
При STATUS=0 вміст RSTAT вказаного каналу(ів) заскакує в STATL та зберігається там до його зчитування. Якщо до зчитування в таймер надійде ще одна або кілька команд «обернене читання» для заскакування RSTAT, вони будуть ігноруватись, поки не буде прочитано стан таймера за першою командою «обернене читання». Формат RSTAT зображено на рис. 3.6.
Рис. 3.6. Формат вмісту регістра стану (RSTAT)
Розряди D5-D0 відповідають поточному значенню регістра CWR, розряд D7 (OUT) — поточному стану виходу OUT, розряд D6 (NULL COUNT) індиціює — відбулося завантаження константи рахунку з CR в СЕ або ні.
Якщо NULL COUNT=0, то це означає, що раніше завантажена в CR константа передана в СЕ. У цьому випадку можна виконати завантаження нової константи, не порушуючи рахунку.
Заміну NULL COUNT при роботі та програмуванні наведено в табл. 3.4.
Таблиця 3.4 Заміна стану NULL COUNT
Операція
|
Вміст NULL COUNT |
Запис керуючого слова в CWR * |
1 |
Запис рахунку в CR ** |
1 |
Завантаження нового рахунку в СЕ (CR ->СЕ) |
0 |
Поки константа рахунку не завантажена в СЕ, вона не може бути зчитана з лічильника. Якщо рахунок замкнено або зчитано до завантаження його в СЕ, зчитана інформація не буде відображувати новий, тільки що записаний рахунок. Рахунок та стан вибраного лічильника(ків) можуть бути одночасно замкнені при COUNT=0 та STATUS=0. Це функціонально те саме, що і виконання двох команд «обернене читання» послідовно одна за одною.
Якщо рахунок та стан лічильника замкнути, то за першою операцією читання буде зчитуватись замкнений стан лічильника назалежно від того, що замкнула перша. Наступна одна або дві операції (один або два байти рахунку) реалізують зчитування замкненого рахунку.
Розглянемо більш докладно режими функціонування таймера та способи їх використання.
Режим 0 — переривання термінального рахунку. Після того, як записано керуюче слово, сигнал OUT встановлюється низьким. Завантаження константи не впливає на OUT. Рахунок дозволяється сигналом GATE=1 та забороняється GATE=0. По GATE=l та фронту першого CLK починається рахунок. OUT залишається низьким, поки вміст лічильника не буде дорінювати нулю, тобто через (N+l) CLK. Коли лічильник досягне нуля, OUT стає високим і залишається таким до завантаження нового рахунку або нового керуючого слова в лічильник. Зміна полярності GATE не впливає на OUT, але по GATE=0 рахунок зупиняється, а по GATE=1 продовжується без перезавантаження СЕ. Завантаження нової константи під час рахунку при записі молодшого байта призводить до зупинки поточного рахунку, а при записі старшого байта — до запуску нового циклу рахунку.
Контроль лічильника (за командами «читання на льоту» та «обернене читання») у цьому режимі можливий тільки після хоча б одного циклу рахунку, так як лічильник може бути ще не завантажений.
Режим 1 — програмований очікуючий мультивібратор. На виході OUT формується сигнал низького рівня тривалістю T=Tclk*N (N — константа рахунку, Tclk — період тактових імпульсів). OUT=0 виробляється по додатному фронту GATE, і тільки після завершення рахунку OUT=1. Режим 1 — це режим з перезапуском, тобто по кожному фронту GATE CR передається в СЕ та запускає або перезапускає його, навіть якщо рахунок не завершено до кінця. Якщо під час рахунку в таймер завантажується нова константа, це не впливає на тривалість поточного імпульсу очікуючого мультивібратора до наступного запуску.
Режим 2 — імпульсний генератор частоти. У цьому режимі канал виконує функцію програмованого дільника вхідної частоти Fclk. Відразу після завантаження CWR вихід OUT дорінює 1 і при GATE=1 на OUT з частотою Fclk/N встановлюється нуль на час Tclk (тобто OUT=1 при (N-l)Tclk, a OUT=0 при Tclk, де N — константа рахунку). Цей режим з автозавантаженням СЕ, тобто після закінчення
рахунку СЕ автоматично перезавантажується і рахунок повторюється. Причому, якщо в процесі роботи лічильника здійснити завантаження нової константи, то поточний період генерації частоти не зміниться, а наступний буде визначатись новим значенням N. При подачі GATE=0 на OUT встановлюється 1, рахунок зупиняється та відновлюється при подачі GATE=1, але вже спочатку. Це дозволяє використовувати вхід GATE для синхронізації роботи каналу із зовнішніми подіями.
Режим 3 — генератор меандра. Цей режим аналогічний режиму 2 за винятком того, що на виході OUT формуються імпульси з тривалістю напівперіодів, дорівнює N/2*Tclk при парному N, (N+l)/2*Tclk для додатного та (N-l)*Tclk для від'ємного напівперіодів при непарному N. Генератор меандра не працює при завантаженні в лічильник константи N=3. Режим 4 — програмно формований строб. У цьому режимі OUT дорівнює 1 відразу після завантаження CWR. Після закінчення відрахунку числа, завантаженого в лічильник, на виході OUT встановлюється нуль на період, що дорівнює Tclk, а далі OUT знову приймає первинне значення (тобто OUT=0 через період часу (N+l)Tclk). Можливе перезавантаження константи під час рахунку, при цьому завантаження молодшого байта не впливає на поточний рахунок, а завантаження старшого байта ініціює новий цикл рахунку. За дією сигналу GATE робота таймера в режимі 4 аналогічна режиму 0, при GATE=0 рахунок зупиняється, при GATE=l продовжується.
Режим 5 — апаратно формований строб. Робота таймера в режимі 5 по вихідному сигналу аналогічна його роботі в режимі 4 (OUT=0 Tclk після відліку константи рахунку), а за дією GATE — режиму 1, в якому запуск рахунку виконується по передньому фронту сигналу GATE. Лічильник у цьому режимі перезапускається, тобто кожний додатний фронт GATE запускає рахунок, або перезапускає його спочатку, якщо рахунок не завершено до кінця. Перезавантаження лічильника новою константою під час рахунку не впливає на тривалість поточного циклу, але наступний цикл (по фронту GATE) буде вже з новою константою.
Коли керуюче слово записується в лічильник, негайно встановлюються всі керуючі логічні пристрої та OUT приймає визначений початковий стан, сигналу CLK на це не потрібно. У режимах 0, 4 вхід GATE чуттєвий до логічного рівня, а в режимах 1, 5 вхід GATE чуттєвий до переднього фронту. У режимах 2 та 3 вхід GATE чуттєвий до фронту та до рівня.
При завантаженні нового рахунку лічильники де-крементуються по задньому фронту CLK. Лічильник не виконує зупинок, коли його значення досягає нуля. У режимах 0, 1, 4, та 5 рахунок продовжується, і лічильник продовжує рахувати до максимального значення: FFFF у двійковому рахунку або 9999 в десятковому рахунку. Режими 2 та 3 періодичні; по закінченні рахунку лічильник перезавантажується початковим значенням або заново завантаженим і продовжує рахунок далі.
Вправа
Сформуйте керуючі слова для задання всіх можливих комбінацій режимів каналу 2 таймера та напишіть фрагмент програми; запишіть у двійковому та шістнадцятковому форматах команди «читання на льоту» та «обернене читання».
Приклад розв'язання
Нехай необхідно задати такий режим каналу 2 таймера:
тип рахунку — двійковий;
режим — 3;
порядок читання/запису константа рахунку — молодший байт/старший байт;
коефіцієнт рахунку — 0000000011110010b.
Розв'язання: CWR = 10110110b або B6h.
mov al,b6h ; Запис керуючого слова для каналу 2
out 43h,al
mov al, 11110010b ;3апис значення інтервалу генерації мол. байт
out 42h,al
mov al, 00000000b ;3апис значення інтервалу генерації ст. байт
out 42h,al
Питання для самоконтролю знань
1. Скільки та які порти вводу/виводу використовуються для програмування таймера?
2. Наведіть формат керуючого слова та поясніть призначення окремих його розрядів.
Які дії передбачає процедура програмування таймера?
Наведіть приклад програми встановлення інтервалу генерації таймера для каналу 1 на асемблері.
Назвіть методи читання лічильників таймера та поясніть можливі ситуації при їх використанні.
Наведіть формат команди «читання на льоту». Для яких цілей вона використовується?
Наведіть формат команди «обернене читання». Для яких цілей вона використовується?
Наведіть формат регістра стану таймера та поясніть призначення кожного розряду.
Режим «0» функціонування таймера, призначення та спосіб використання.
Режим «1» функціонування таймера, призначення та спосіб використання.
Режим «2» функціонування таймера, призначення та спосіб використання.
Режим «З» функціонування таймера, призначення та спосіб використання.
Режим «4» функціонування таймера, призначення та спосіб використання.
Режим «5» функціонування таймера, призначення та спосіб використання.
Резюме
Таймер для роботи в системі повинен бути запрограмо ваний. Запис керуючого слова відбувається при записі в порт 43h (A1, А0=11), а запис констант рахунку в канали 0, 1, 2 — при записі в порти 40h, 41h, 42h (Al, A0 = 00, 01, 10 відповідно) при активних сигналах -CS та -WR (CS=O, WR =0).
Слід пам'ятати, що під час запису констант рахунку вони надходять спочатку в регістр лічильника, а безпосередньо в лічильник потрапляють по вхідному сигналу GATE. Часто в практичних задачах виникає необхідність читання стану лічильників. Для цього передбачено три методи читання лічильників: просте читання, «читання на льоту» (запам'ятовування вмісту лічильників) та «обернене читання» (запам'ятовування вмісту лічильників та/або регістра статусу).
Режим 1 — програмований чекаючий мультивібратор. На виході OUT формується сигнал низького рівня тривалістю T=Tclk*N (N — константа рахунку, Tclk — період тактових імпульсів).
Режим 2 — імпульсний генератор частоти. У цьому режимі канал виконує функцію програмованого дільника вхідної частоти Fclk.
Режим 3 — генератор меандра. Цей режим аналогічний режиму 2 за винятком того, що на виході OUT формуються імпульси з тривалістю півперіодів, дорівнює N/2*Tclk при парному N, (N+l)/2*Tclk для додатного та (N-l)*Tclk для від'ємного півперіодів при непарному N.
Режим 4 — програмно формований строб. У цьому режимі OUT дорівнює 1 відразу після завантаження CWR. Після закінчення відліку числа, завантаженого в лічильник, на виході OUT встановлюється нуль на період, що дорівнює Tclk.
Режим 5 — апаратно формований строб. Робота таймера в режимі 5 по вихідному сигналу аналогічна до його роботи в режимі 4 (OUT=0 протягом Tclk після відліку константи рахунку), а за дією GATE — режиму 1, в якому запуск рахунку виконується по передньому фронту сигналу GATE.
Ваш наступний крок
Тепер, після ґрунтовного вивчення призначення, архітектури, принципів функціонування, режимів роботи таймера та способів їх програмного задання, Ви можете приступити до вивчення системних програмних засобів роботи з таймером. На наступному занятті Ви дізнаєтесь про призначення та функціональні можливості переривань INT lAh, INT 15h BIOS та INT 21h MS-DOS, які дозволяють значно спростити керування таймером на прикладному рівні програмування.