Програмування системного таймера

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
РТ
Кафедра:
Кафедра САПР

Інформація про роботу

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи
Варіант:
5 1

Частина тексту файла (без зображень, графіків і формул):

Прізвище: Ім'я: Група: Варіант: 5 Кафедра САПР Дисципліна: Системне програмування Перевірив: ЗВІТ до лабораторної роботи № 2 на тему “Програмування системного таймера” Мета роботи: Вивчення і дослідження режимів роботи системного таймера. Теоретичні відомості: Встановлення і читання таймера Більшість IBM PC використовують мікросхему таймера 8253 для узгодження імпульсів від мікросхеми системних годинників. Число циклів системних годинників перетворюється в один імпульс, а послідовність цих імпульсів підраховується для визначеного часу, або вони можуть бути подані на гучномовець комп’ютера для генерації звука певної частоти. Мікросхема має три ідентичних незалежних канали, кожний з яких може програмуватися. Мікросхеми 8253 працюють незалежно від процесора. Сучасні процесори співіснують з вбудованими в них таймерами. Фактично, процесор програмує мікросхему і потім повертається до виконання інших операцій. Таким чином 8253 діє як годинник реального часу – вона рахує свої імпульси незалежно від того, що відбувається в комп’ютері. Однак, максимальний програмований інтервал складає приблизно 1/12 секунди. Для підрахунку інтервалів часу в години і хвилини потрібно, щоб імпульси від нульового каналу мікросхеми таймера накопичувалися в змінній, яка знаходиться в області даних BIOS. Це накопичення називають підрахунком часу доби. 18,2 рази в секунду вихід каналу 0 обробляється апаратним перериванням (перериванням таймера), який ненадовго зупиняє процесор і збільшує лічильник часу доби. Число 0 відповідає опівночі 24 годинам; коли лічильник досягає значення еквівалентного 24 годинам, він спрацьовує на 0. Лічильник часу доби використовується в більшості операцій, які зв’язані з часом. Програмування мікросхеми таймера 8253 Для програмування мікросхеми 8253 потрібно виконати три основні кроки. 1. послати в командний регістр (43н) байт; який визначає послідовність бітів, які визначають канал, статус читання, запису, режим операції і форму представлення чисел. 2. для каналу “2” потрібно дозволити сигнал від годинника, встановивши в 1 біт 0 порту з адресом 61н. 3. визначити значення лічильника від 0 до 65535 і помістити його в регістрах (спочатку молодший, а потім старший байт) і переслати його в регістр вводу-виводу каналу (40н-42н). Генерація звуку за допомогою мікросхеми таймера. Частоти музичних нот першої і другої октави октава ноти   до до# ре ре# мі фа фа# соль соль# ля ля# сі до  1 261,83 277,18 293,66 311,13 329,63 349,23 369,99 392 415,30 440 456,16 493,88 523,25  2 523,25 554,37 587,33 622,25 659,26 698,46 739,99 783,99 830,61 880 932,33 987,77 1046,5   Тривалість музичних нот № п/п нота Умовне позначення Тривалість ноти в секундах  1 Ціла / 4  2 Половинна / 2  3 Четвертна / 1  4 Одна восьма / 1/2   Текст програми: DSEG SEGMENT BEAT DB 6,4,8,6,4,8,4,4,4,4,4,8,8,6,4,8,6,4,8,4,4,4,4,4,8,8 ;тривалість нот FREQUENCY DW 1353, 1521, 1521, 1353, 1709, 1709, 1353, 1521, 1521, 1809, 2280, 1353, 1709,1353, 1521, 1521, 1353, 1709, 1709, 1353, 1521, 1521, 1809, 2280, 1353, 1709 MELODY DB 1,3,5,6,8,6,5,3,13,1,3,0FFH; номер частоти нот DSEG ENDS SSEG SEGMENT STACK db 256 dup(0) SSEG ENDS CSEG SEGMENT assume cs:CSEG,ds:DSEG start: mov ax,DSEG mov ds,ax ;---ініціалізація PORT_B EQU 61H COMMAND_REG EQU 43H LATCH2 EQU 42H IN AL,PORT_B ;отримуємо поточний статус OR AL,00000011B ;надаємо доступ динаміку та таймеру OUT PORT_B,AL ;замінюємо байт MOV SI,0 ;ініціалізуємо вказаівник MOV AL,0B6H ;установка для канала 2 OUT COMMAND_REG,AL ;надсилаємо у командний регістр ;---дивимось ноту , отримуємо її частоту і розміщуємо в каналі 2 NEXT_NOTE: LEA BX,MELODY ;берем зміщення для мелодії MOV AL,[BX][SI] ;берем код n-ої ноти рядка CMP AL,0FFH ;перевірка на кінець строки JE NO_MORE ;якщо кінець,то на вихід CBW ;переводимо у слово ;---получение частоты MOV BX,OFFSET FREQUENCY ;зміщення таблиці частот DEC AX ;починаємо відрахунок з 0 SHL AX,1 ;множимо на 2 MOV DI,AX ;адресуємо через DI MOV DX,[BX][DI] ;отримуємо частоту з таблиці ;починаємо виконання нот MOV AL,DL ;готуємо молодший байт частоти OUT LATCH2,AL ;надсилаємо його MOV AL,DH ;готуємо старший байт частоти OUT LATCH2,AL ;надсилаємо його ;---створення циклу затримки MOV AH,0 ;номер функції читання лічильника INT 1AH ;отримуємо значення лічильника MOV BX,OFFSET BEAT ;зміщення таблиці довжини MOV CL,[BX][SI] ;беремо довжину чергової ноти MOV CH,0 MOV BX,DX ;беремо молодше слово лічильника ADD BX,CX ;визначаємо момент закінчення STILL_SOUND: INT 1AH ;беремо значення лічильника CMP DX,BX ;порівнюємо з закінченням JNE STILL_SOUND ;продовжуємо звук INC SI ;переходимо до наступної ноти JMP NEXT_NOTE ; ;---завершення NO_MORE: IN AL,PORT_B ;отримуємо статус порта B AND AL,0FCH ;вимикаємо динамік OUT 61H,AL ;замінюємо байт MOV AX,4C00H INT 21H CSEG ENDS END START Висновки: Під час виконання даної лабораторної роботи я отримала навички роботи з таймером та запустив власну мелодію. Також закріпила вивчений протягом лекцій матеріал.
Антиботан аватар за замовчуванням

06.06.2018 19:06-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!