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

3.!Читання конcтант перерахунку каналів інтервального таймера і8253/і8254

4.! Читання байту стану каналів 0-2 інтервального таймера: спосіб 1, 2.

5.! Системний час в івм рс: таймер bios (таймер ос).

Сучасні комп’ютери оснащено двома підсистемами таймерів, які паралельно відраховують поточний час. Один таймер розміщено у мікросхемі з низьким споживання енергії (КМОП-мікросхема), яка після вимкнення живлення комп’ютера продовжує функціонувати, отримуючи енергію від вбудованого у комп’ютер аккумулятора (батареї). Цей таймер, як правило, називають годинником реального часу (RTC), більш детально з який познайомимось у лабораторній роботі №3. Інший таймер, реалізований мікросхемою і8253 (вітчизняний аналог – КР580ВН53, в AT – і8254), який надалі будемо називати інтервальним (іноді в літературі – системним), працює, як і решта вузлів комп’ютера, тільки коли ПК увімкнений. Його канал 0 генерує сигнали з частотою приблизно 18,206 Гц, яка викликає апаратні переривання рівня 0 (вектор 08h). Обробник даного переривання, який входить у систему BIOS, з кожним перериванням інкрементує вміст 4-байтної чарунки за адресою 40h:6Ch, яка розміщена у області даних BIOS і називається таймером BIOS або системним таймером. В процесі початкового завантаження комп’ютера програма BIOS чатає показники RTC (години, хвилини та секунди) і, перетворивши їх в кількість секунд від початку поточної доби, множить отриману велечину на 18,206, щоб отримати поточний час, виражене у кількості тактів системного таймера. Ця величина записується у чарунку пам’яті за адресою 40h:6Ch, яка у подальшому інкрементується, що є паралельним з RTC відліком часу системи, поки комп’ютер увімкнений. Саме з цієї чарунки пам’яті системні функції читають поточний час.

6.Засоби bios та ос для роботи з таймером bios.

Засоби BIOS для роботи з таймером  Для роботи з таймером (точніше кажучи, для роботи з каналом Про таймера) BIOS містить дві функції переривання INT lAh. Вони дозволяють прочитати поточний вміст лічильника і вимірюв-'нитка його. Функція OOh призначена для читання вмісту лічильника таймера:  На вході: АН - OOh.  На виході: СХ - старший байт лічильника;  DX - молодший байт лічильника;  AL • 0, якщо з моменту перезапуску таймера ^ минуло більше 24 годин.  Редагувати вміст. Лічильника таймера можна за допомогою наступної функції:  На вході: АН = Olh;  СХ "старший байт лічильника;  DX а = молодший байт лічильника.  На виході: Не використовуються.  Функцію читання таймера можна використовувати для організації програмної затримки. Так як робота таймера не залежить від продуктивності процесора, швидкодія системи не буде впливати на-формовану затримку.  Але слід враховувати, що точність формування затримки визначається частотою оновлення лічильника таймера <18,2 Гц) і може виявитися недостатньою для деяких додатків. Ми підготували функцію для формування затримок з допомогою таймера:  / **  . Name. tm_delay. Title Формування затримки по таймеру  . Descr Ця функція формує затримку, використовуючи системний таймер.  . Proto void tm_delay (lnt ticks)  . Pa rams int ticks - величина задержкіiв тиках таймера (за $ одну секунду таймер цокає 18,2 рази).  . Return Нічого  . Sample tm_samp1.c  * /  «Include <dos.h> ^ include <conio.h>  void tm_delay (int ticks) {_asro {  push si  mov si, ticks mov ah, 0 Int 1ah  mov bx, dx add bx, si   detay_loop:  Int 1ah cmp dx, bx 'Jne delay_toop pop si}  \  Функція використовує тільки одне слово регістра таймера, що дозволяє формувати затримки тривалістю до 65536 тиків таймера. Наведена програма демонструє використання функції для генерації приблизно десятисекундний затримки:  ffinclude <stdio.h> ttinclude "sysp.h"  ma in () <  printf ("\ пДля виконання програмної затримки приблизно" "\ ПНА 10 секунд натисніть будь-яку клавішу."):  getch ();  printf ("\ п \ пВремя пішло ...");  tm_delay <18 * 10); 'pTintr ("\ пГотово!");  exit (O);  }  BIOS комп'ютерів IBM AT містить ще дві цікаві функції для роботи з таймером: 83h і 86h переривання INT 15h.  функція 83h дозволяє запустити таймер на рахунок, вказавши адресу деякого байта в оперативній пам'яті. Програма, запустивши таймер, відразу після запуску отримує управління. Після закінчення часу, заданого при запуску таймера, функція встановлює старший біт зазначеного байта в одиницю, сигналізуючи такдм чином програмі про завершення зазначеного часового інтервалу. Програма може також скасувати роботу таймера в цьому режимі.  Цю функцію зручно використовувати для організації виконання яких-небудь дій паралельно з відліком временив наприклад, можна обмежити час для введення пароля.  Наведемо формат виклику функції 83h переривання INT 15h:  На вході: АН = 83h;  AL = код підфункції:  О - встановити інтервал, запустити таймер;  1 - скасувати роботу таймера;  СХ - старший байт часу роботи лічильника, задається в мікросекундах;  DX - молодший байт счетчікаг ES: BX • "адреса байта, в якому після закінчення інтервалу часу старший біт буде встановлений в одиницю. На виході: Не використовуються.  Функція 86h спеціально призначена для формування затримок. Вона дозволяє визначати час затримки в мікросекундах, що зручно для багатьох завдань. Під час виконання затримки дозволені переривання, формат виклику функції:  На вході: АН - 86h;  СХ • старший байт часу затримки, задається в мікросекундах;  DX - молодший байт часу затримки.  На виході: Не використовуються.