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

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

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

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

Рік:
2006
Тип роботи:
Лабораторна робота
Предмет:
Комп’ютери і мікропроцесорні системи
Група:
КН

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра САПР Звіт про виконання лабораторної роботи №9 на тему: “ Програмування системного таймера ” з курсу: “ Комп’ютери та мікропроцесорні системи ” Виконав студент групи КН-3 Перевірив Львів - 2006 МЕТА РОБОТИ Мета роботи – вивчення і дослідження режимів роботи системного таймера. 2. Короткі теоретичні відомості 2.1. Встановлення і читання таймера. Більшість IBM PC використовують мікросхему таймера 8253 для узгодження імпульсів від мікросхеми системних годинників. Число циклів системних годинників перетворюється в один імпульс, а послідовність цих імпульсів підраховується для визначеного часу, або вони можуть бути подані на гучномовець комп’ютера для генерації звука певної частоти. Мікросхема має три ідентичних незалежних канали, кожний з яких може програмуватися. Мікросхеми 8253 працюють незалежно від процесора. Сучасні процесори співіснують з вбудованими в них таймерами. Фактично, процесор програмує мікросхему і потім повертається до виконання інших операцій. Таким чином 8253 діє як годинник реального часу – вона рахує свої імпульси незалежно від того, що відбувається в комп’ютері. Однак, максимальний програмований інтервал складає приблизно 1/12 секунди. Для підрахунку інтервалів часу в години і хвилини потрібно, щоб імпульси від нульового каналу мікросхеми таймера накопичувалися в змінній, яка знаходиться в області даних BIOS. Це накопичення називають підрахунком часу доби. 18,2 рази в секунду вихід каналу 0 обробляється апаратним перериванням (перериванням таймера), який ненадовго зупиняє процесор і збільшує лічильник часу доби. Число 0 відповідає опівночі 24 годинам; коли лічильник досягає значення еквівалентного 24 годинам, він спрацьовує на 0. Лічильник часу доби використовується в більшості операцій, які зв’язані з часом. 2.2. Програмування мікросхеми таймера 8253. Кожний з трьох каналів мікросхеми таймера 8253 складається з трьох регістрів. Доступ до кожної групи з трьох регістрів відбувається завдяки одному порту; номера портів від 40Н до 42Н відповідають каналам “0” – “2”. Порт зв’язаний з 8-бітним регістром вводу–виводу, який посилає і приймає данні для цього каналу. Коли канал запрограмований, то через цей порт посилається двохбайтне значення, молодший байт на початку. Це число передається в 16-бітний регістр засуву, який зберігає це число і з якого копія розміщується в 16-бітний регістр лічильника. В регістрі лічильника число зменшується на одиницю кожний раз, коли імпульс від системного годинника пропускається через канал. Коли значення цього числа досягає нуля, то канал видає вихідний сигнал і потім нова копія вмістимого регістру засуву переміщується в регістр лічильника. Після чого процес повторюється. Чим менше число в регістрі лічильника, тим швидше ритм. Всі три канали завжди активні: процесор не включає і не виключає їх. Поточне значення любого із регістрів лічильника може бути прочитане в будь-який момент часу, не впливаючи на лічбу. Кожний канал має дві вхідні і одну вихідну лінії. Вхідна лінія виводить імпульси, які виникають в результаті підрахунку. Призначення цих сигналів коливається в залежності від типу IBM PC: Канал “0” використовується системним годинником часу доби. Він встановлюється BIOS на початку старту таким чином, що видає імпульси наближено 18.2 рази в секунду. 4-байтний лічильник цих імпульсів зберігається в пам’яті по адресу 0040:006С (молодший байт зберігається першим). Кожний імпульс ініціює переривання таймера (номер 0) і саме переривання збільшує покази лічильника. Це апаратне переривання, тому воно обробляється завжди, незалежно від того , чим зайнятий процесор. Вихідна лінія використовується також для синхронізації деяких дискових операцій, тому якщо змінено її значення, то Вам необхідно встановити початкове значення перед зверненням до диску (враховуючи те, що канал “0” використовується для системних функцій операційної системи перепрограмовувати його не рекомендується – для цього найкраще використовувати канал “2”). Канал “1” керує оновленням пам’яті на всіх машинах, крім PCjr, тому його краще не чіпати. Вихідна лінія цього каналу зв’язана з мікросхемою прямого доступу до пам’яті і її імпульс заставляє мікросхему DMA обновити всю пам’ять. На PCjr канал “1” служить для перетворення вхідних даних з клавіатури із послідовної в паралельну форму. PCjr не використовує мікросхему прямого доступу до пам’яті, тому переривання від таймера заблоковано, коли він замість цього проводить дані через процесор. Канал “1” використовується для підрахунку заблокованих імпульсів годин часу доби, для того щоб можна було відновити значення лічильника після завершення дискових операцій. Канал “2” зв’язаний з гучномовцем комп’ютера і він може формувати прості прямокутні імпульси для генерації звуку. Цей канал найбільш придатний для перепрограмування і використання в прикладних програмах. Прості звуки можуть генеруватися одночасно з іншими програмними операціями, а більш складні звукові ефекти можуть бути досягнуті за рахунок використання процесора. Канал “2” може бути від’єднаним від гучномовця і використовуватися для синхронізації. Вихідна лінія каналу “2” зв’язана з динаміком комп’ютера. Однак динамік не буде генерувати звук до тих пір поки не зроблено певні установки мікросхеми інтерфейсу з периферією 8255. Дві вхідні лінії для кожного каналу складається з лінії годинника, як передає сигнал від мікросхеми системного годинника і лінії, що керує ключем, який вмикає і вимикає сигнал від годинника. Для каналів “0” та “1” ключ завжди ввімкнутий. Для каналу “2” він може бути відкритим або закритим, що дозволяє маніпулювати зі звуком. Ключ вмикається встановленням молодшого біта порту з адресом 61Н, який є регістром мікросхеми 8255; скидання цього біта розмикає ключ. Мікросхема таймера може використовуватися безпосередньо для часових операцій, але це рідко буває зручним. Імпульси з годинника подаються 1,19318 млн. раз в секунду. Оскільки максимальне число, яке може зберігатися в 16 бітах, рівне 65535 і частота імпульсів від годинника ділиться на це число (що дає в результаті 18,2 імп./сек), то максимальний можливий інтервал між імпульсами рівний приблизно 1/12 секунди. Тому більшість часових операцій використовують лічильник часу BIOS. Для підрахунку часу читається значення часу доби і зрівнюється з деякими раніше запамятованими значеннями для визначення числа імпульсів, які пройшли з того моменту. Мікросхема 8253 надає розробникам обладнання 6 режимів роботи для кожного каналу. Програмісти звичайно обмежуються третім режимом, як для каналу 0 при синхронізації, так і для каналу 2 для синхронізації чи генерації звуку. В цьому режимі, як тільки регістр засуву отримує число, він завантажує копію в регістр лічильника. Коли значення в лічильнику досягає нуля регістр засуву перезавантажує лічильник і т.д. На протязі половини відліку вихідна лінія включена, а на протязі іншої половини – виключена. В результаті отримуються прямокутні імпульси, які однаково придатні як для генерації звуку, та і для підрахунку. Восьмибітний командний регістр керує способом завантаження чисел в канал. Адрес порту для цього регістру рівний 43. В цей регістр записується байт який визначає який канал програмувати і який режим встановлювати, а також один чи два байта значення лічильника повинні бути передані. Він також визначає форму запису цього числа – двійкову чи двійково-десяткову (ВСD). Для програмування мікросхеми 8253 потрібно виконати три основні кроки. Послати в командний регістр (43Н) байт; який визначає послідовність бітів, які визначають канал, статус читання(запису, режим операції і форму представлення чисел. Для каналу “2” потрібно дозволити сигнал від годинника, встановивши в 1 біт 0 порту з адресом 61Н. Визначити значення лічильника від 0 до 65535 і помістити його в регістр АХ (спочатку молодший, а потім старший байт) і переслати його в регістр вводу-виводу каналу (40Н-42Н). Після того як третій крок завершений, запрограмований канал негайно починає функціонувати за новою програмою. Значення бітів цього регістру такі:  2.3. Генерація звуку за допомогою мікросхеми таймера. Комп’ютер має можливість генерувати звук за допомогою вбудованого динаміка з постійним магнітом. Можна вибрати один з двох способів управління динаміком чи використати обидва в комбінації: 1) використання біта 1 порту 21Н для активізації мікросхеми Intel 8255 (програмований периферійний інтерфейс) (PPI); 2) використання тригера програмованого інтервального таймера Intel 8353-5 (PIT). Таймер PPI управляє тригером 2 через біт 0 порту 61Н. Канал 2 системного таймера керує динаміком комп'ютера, генеруючи при цьому прямокутні імпульси з частотою, яка рівна 1 193 180/початкове_значення_лічильника. Під час програмування динаміка початкове значення лічильника таймера є дільником частоти, тобто динамік працює з частотою, яка рівна 1 193 180/дільник герців. Після програмування каналу 2 таймера треба ще включити сам динамік - це робиться шляхом установки біт 0 і 1 порту 61h в 1. Біт 0 фактично дозволяє роботу цього каналу таймера, а біт 1 включає динамік. Приклад програми для відтворення музичної ноти на динаміку наведено нижче. Частота ноти “до”, яка генерується на динаміку, вибрано з таблиці 1, а її тривалість з таблиці 2. ; Програма відтворення звуку з частотою 261 Hz (нота "до" середньої октави) ; тривалістю 1/2 секунди на динаміку beep proc near mov al,10110110b ; канал 2, режим 3 out 43h,al mov al,ODh ; молодший байт дільника частоти 11DOh out 42h,al mov al,11h ; старший байт дільника частоти out 42h,al in al,61h ; поточнстан стан порту 61h у AL or al,00000011b ; встановити біти 0 і 1 в 1 out 61h,al ; тепер динамік включений mov cx,0007h ; старше слово числа мікросекунд паузи mov dx,OA120h ; молодше слово числа мікросекунд паузи mov ah,86h ; функція 86h int 15h ; пауза in al,61h and al,11111100b ; покласти нулі на молодші два біти out 61h,a.l ; тепер динамік виключений ret beep endp Таблиця 1 Частоти музичних нот першої і другої октави Окта-ва Ноти   до до# ре ре# мі фа фа# соль соль# ля ля# сі до  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   Таблиця 2 Тривалість музичних нот № п/п Нота Умовне позначення Тривалість ноти в секундах  1 ціла  4  2 половинна  2  3 четвертна  1  4 одна восьма  1/2   Текст програми (мелодія Jingle Bells) sseg segment stack db 256 dup(?) sseg ends dseg segment pausa1 dw 0 pausa2 dw 0 dseg ends cseg segment assume ss:sseg,cs:cseg,ds:dseg start: jmp main main: mov ax,dseg ;Занести базову адресу сегм. даних в ds mov ds,ax mov bh,11h ;Молодший байт ноти mov bl,07h ;Старший байт ноти mov pausa1,00003h ;Перше слово паузи mov pausa2,0d090h ;Друге слово паузи call proc1 ;Відтворити ноту на динаміку call proc2 mov bh,11h mov bl,07h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00007h mov pausa2,0a120h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00007h mov pausa2,0a120h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,0f1h mov bl,05h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,0e8h mov bl,08h mov pausa1,00005h mov pausa2,0b8d8h call proc1 call proc2 mov bh,0efh mov bl,07h mov pausa1,00001h mov pausa2,0e848h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,0000fh mov pausa2,04240h call proc1 call proc2 mov bh,0ach mov bl,06h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,0ach mov bl,06h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,0ach mov bl,06h mov pausa1,00005h mov pausa2,0b8d8h call proc1 call proc2 mov bh,0ach mov bl,06h mov pausa1,00001h mov pausa2,0e848h call proc1 call proc2 mov bh,0ach mov bl,06h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00001h mov pausa2,0e848h call proc1 call proc2 mov bh,11h mov bl,07h mov pausa1,00001h mov pausa2,0e848h call proc1 call proc2 mov bh,0f1h mov bl,05h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,0f1h mov bl,05h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,0ach mov bl,06h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,0ach mov bl,06h mov pausa1,00003h mov pausa2,0d090h call proc1 call proc2 mov bh,0e8h mov bl,08h mov pausa1,0000fh mov pausa2,04240h call proc1 call proc2 mov ax,4c00h int 21h proc1 proc near mov al,10110110b ;->(10)Вибираємо канал (42н)2, який керує динаміком,(11)читання\запис out 43h,al ;молод.-старш байта і(011) режим роботи каналу, генерація імпульсів, (0) лічильник-16-ти бітний mov al,bh ;Перша половина ноти out 42h,al mov al,bl ;Друга половина ноти out 42h,al in al,61h or al,00000011b ;Включити динамік out 61h,al mov cx,pausa1 ;Перша половина паузи mov dx,pausa2 ;Друга половина паузи mov ah,86h int 15h ;Пауза in al,61h and al,11111100b ;Виключити динамік out 61h,al ret proc1 endp proc2 proc near mov al,10110110b ;->(10)Вибираємо канал (42н)2, який керує динаміком,(11)читання\запис out 43h,al ;молод.-старш байта і(011) режим роботи каналу, генерація імпульсів, (0) лічильник-16-ти бітний mov al,00h ;Перша половина ноти out 42h,al mov al,00h ;Друга половина ноти out 42h,al in al,61h mov cx,00000 ;Перша половина паузи mov dx,0f424h ;Друга половина паузи mov ah,86h int 15h ;Пауза in al,61h and al,11111100b ;Виключити динамік out 61h,al ret proc2 endp cseg ends end start Висновки У процесі виконання даної роботи я ознайомився з системним таймером і за допомогою мікросхеми таймера 8253 запрограмував режим його роботи для відтворення звуку.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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