Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2. Архітектура ПЕОМ.docx
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
238 Кб
Скачать
☆

2.Програмування інтервального таймера на рівні портів

Програмування таймера здійснюється через чотири порти. Порти 40h, 41h і 42h призначені для запису початкових значень лічильників каналів 0, 1 і 2 відповідно, а також для зчитування стану каналів і поточних значень їх лічильників. Порт 43h доступний тільки для запису і призначений для програмування режимів роботи каналів. Порти 40h-43h мають «псевдоніми» в діапазоні 50h-53h.

З прикладами програмування таймера можна ознайомитися тут.

Установка режиму

Байт, керуючий режимом роботи каналу, записується в порт 43h і задає режим роботи зазначеного в ньому каналу. Призначення його розрядів наступне.

Биты

Назначение

7:6

Выбор канала:

  • 00 — канал 0

  • 01 — канал 1

  • 10 — канал 2

  • 11 — команда считывания (см. ниже)

5:4

Режим чтения/записи:

  • 00 — команда фиксации текущего содержимого счётчика (см. ниже)

  • 01 — чтение/запись только младшего байта

  • 10 — чтение/запись только старшего байта

  • 11 — чтение/запись сначала младшего, а затем старшего байта

3:1

Режим работы канала:

  • 000 — режим 0

  • 001 — режим 1

  • x10 — режим 2

  • x11 — режим 3

  • 100 — режим 4

  • 101 — режим 5

0

Вид счёта:

  • 0 — двоичный счёт

  • 1 — двоично-десятичный счёт

Після установки режиму необхідно завантажити в лічильник каналу початкове значення. Це виконується через «особисті» порти каналів - 40h-42h. Які саме байти повинні бути завантажені, визначається бітами 5:4 байта установки режиму каналу.

Установка початкового значення лічильника Правити

Установка початкового значення лічильника виконується в будь-який момент після установки режиму. Вона полягає в записі одного або двох байт (стільки, скільки було вказано при установці режиму) в «особистий» порт каналу (40h-42h). Це значення зберігається у внутрішньому регістрі каналу і може використовуватися багато разів для перезавантаження лічильника, що використовується режимами роботи 1-3 і 5. Режими 0 і 4 вимагають програмної перезавантаження початкового значення після закінчення кожної операції рахунку.

Команда зчитування Правити

Команда зчитування використовується для визначення режиму, значення лічильника, стану виходу і ознаки нуля того чи іншого каналу. Вона ініціюється записом в порт 43h спеціального керуючого байта, призначення розрядів якого описано в таблиці.

Биты

Назначение

7:6

Содержат код команды «считывание» и должны быть равны 11

5

0 — текущие значения выбранных счётчиков фиксируются для последующего считывания

1 — текущие значения выбранных счётчиков не фиксируется

4

0 — состояние выбранных счётчиков фиксируется для последующего считывания

1 — состояние выбранных счётчиков не фиксируется

3

1 — состояние и/или текущее значение счётчика канала 2 должно быть зафиксировано

2

1 — состояние и/или текущее значение счётчика канала 1 должно быть зафиксировано

1

1 — состояние и/или текущее значение счётчика канала 0 должно быть зафиксировано

0

Зарезервирован, должен содержать 0

Після того, як поточне значення лічильника і / або стан зафіксовані, вони зберігаються в чеканні зчитування, яке проводиться через «особистий» порт каналу (40h-42h). Якщо одночасно зафіксовано і стан, і значення лічильника, першим ліченим байтом буде стан, а після нього підуть один або два байти лічильника (кількість байтів збігається з встановленим при програмуванні режиму роботи каналу). Нова операція зчитування можлива тільки після завершення вже розпочатої: регістри-засувки будуть зберігати зафіксовані у них значення до тих пір, поки всі вони не будуть лічені.

Команда фіксації лічильника Правити

Команда фіксації лічильника застосовується для зчитування значення лічильника, яка мала місце на момент видачі цієї команди. За своєю функцією вона є окремим випадком команди зчитування, відрізняючись від неї тим, що працює тільки з одним каналом і не дозволяє вважати режим роботи і стан канала.

Биты

Назначение

7:6

Выбор канала:

  • 00 — канал 0

  • 01 — канал 1

  • 10 — канал 2

  • 11 — команда считывания (см. выше)

5:4

Задают команду фиксации и должны быть равны 00

3:0

Зарезервированы и должны быть равны 0000

Після того, як значення лічильника зафіксовано, воно повинно бути прочитане через «особистий» порт каналу (40h-42h). Кількість підлягають прочитуванню байтів збігається з встановленим під час програмування режиму роботи каналу. До тих пір, поки зафіксоване значення не вважатиметься, нові спроби фіксації ігноруватимуться.

Зчитування стану каналу Правити

Для зчитування стану того чи іншого каналу необхідно записати команду зчитування (описана вище) в порт 43h, вказавши в ній фіксацію стану для необхідного каналу, після чого провести зчитування байта стану з «особистого» порту цього каналу (40h-42h). Якщо одночасно зі станом фіксується значення лічильника каналу, байт стану зчитується першим. Призначення розрядів байта стану наведено в таблиці.

Зчитування лічильника Правити

Зчитування значення лічильника можливо після видачі в порт 43h команд зчитування або фіксації, а також без спеціальної команди. Само зчитування виконується з «особистого» порту каналу (40h-42h), причому з нього зчитуються такі ж байти (тільки молодший, тільки старший або спочатку молодший, а потім старший), які записуються в нього відповідно до встановленого режиму роботи каналу.

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