
- •Передмова
- •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. Архітектура та принципи функціонування годинника реального часу
Заняття 4. Приклади використання функціональних можливостей таймера в прикладних задачах
Тема заняття
Використання функціональних можливостей таймера для генерації звукових сигналів та відтворення музики.
Генерація випадкових чисел.
Мета заняття
Засвоїти послідовність дій, що виконуються програмою, яка відтворює звукові сигнали.
Зрозуміти та засвоїти принципи розробки програмних модулів, що відтворюють звуки.
Навчитись розробляти програми, що відтворюють музичні фрагменти.
Навчитись розробляти програми, що формують послідовності псевдовипадкових чисел.
Генерація звукових сигналів та відтворення музики
Одним із найбільш розповсюджених застосувань таймера — генерація звукових сигналів та відтворення музики. Таймер дозволяє відтворювати музику у фоновому режимі, тобто під час роботи будь-якої програми може лунати музика. Спосіб підключення динаміка зображений на рис. 3.1.
Як ми вже говорили, канал 2 мікросхеми І8254 з'єднаний з гучномовцем комп'ютера. Але гучномовець не просто з'єднаний з виходом OUT каналу 2. Порт виводу 61h також використовується для керування гучномовцем. Молодший біт порту 61h підключений до входу GATE каналу 2 таймера. Цей біт при встановленні на 1 дозволяє роботу каналу, тобто генерацію імпульсів для гучномовця, а при встановленні на 0 забороняє.
Додатково для керування гучномовцем використовується біт 1 порту 61h. Якщо цей біт встановлений на 1, сигнали з виходу OUT2 каналу 2 таймера через схему збігу зможуть проходити на гучномовець. Якщо в біті 1 нуль, то схема збігу забороняє проходження сигналів на гучномовець. Інші біти порту 61 призначені для ініціалізації та діагностики ПЕОМ, тому їх змінювати не можна.
Розглянемо приклади програм, що генерують звук. Для демонстрації операцій низького рівня найзручніша мова Ассемблера. Але різні операції, зв'язані з вводом та виводом числової та символьної інформації, досить трудомісткі для Ассемблера і тому в наведених нижче програмах усе, що не стосується роботи з портами, написано мовою СІ. У ньому здійснюються ввід/вивід та деякі інші операції. Там, де потрібно показати конкретні правила роботи з апаратурою на нижньому рівні, вмикаються фрагменти мовою Ассемблера.
У якості прикладу розглянемо програму, яка дозволяє відтворювати звуки, частота яких пропорційна ASCII-коду натисненої клавіші. Відтворення звуку продовжується до тих пір, поки клавіша не відтиснена.
#include <conio.h> //Програма bip.c — відтворення void MyBeep(int) звуків при натисненні клавіш клавіатури комп'ютера
asm {
push ax //Зберегти вміст регістра ах у стеку
push ex //зберегти вміст регістра сх у стеку
mov ex, Frac //завантаження аргументу в сх (коефіцієнта перерахунку)
mov al,0xB6 //в аі заноситься керуюче слово таймера-лічильника
out 0x43,al //керуюче слово відсилається в порт 43h
mov ах, сх //коефіцієнта перерахунку, заноситься в ах,
out 0x42,аl //пересилається в порт спочатку молодший байт
mov al.ah
out 0x42,аl
in al,0x61
mov ah,al
or al,3 out 0x61,аі
}
tm:
asm
in al, 0x60 //в аl заносимо скен-код натисненої клавіші
and al,0x80 //утворюємо додатковий скен-код
jz tm //та залишаємось у циклі, поки клавіша натиснена
mov al,ah //збережений раніше байт заноситься в аіl
out 0x61,al //відновлюємо початкове значення порту 61Н
pop сх //відновлюємо сх
pop ax //відновлюємо ах
}