Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ МЗКИТ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.9 Mб
Скачать

3.3. Завдання

  1. Розкрити принципи фон-неймановскої архітектури.

  2. Які елементи складають логічну схему комп'ютера.

  3. Навести перелік функцій процесора і пам'яті, їх основні параметри.

  4. Перерахувати основні вузли системного блоку.

  5. Що розташоване на материнській платі.

  6. Яка роль блоку електроживлення, які рівні напруги на його виході.

4. Лабораторна робота № 3 "ознайомлення з програмною моделлю програмованого інтервального таймеру пк та стандартним системним звуковим каналом"

4.1. Ціль роботи

Вивчити:

  • роботу стандартного системного звукового каналу;

  • ноти хроматичної гами;

  • відповідність нот и частоти звука;

  • складання програми відтворювання мелодії.

4.2. Теоретична частина

Будь-який гучномовець працює за рахунок отримання послідовності електричних імпульсів, які викликають відхилення діафрагми динаміка. Це призводить до виникнення коливань повітря, що утворюють звук.

У звичайному динаміці імпульси, що надходять, мають різну потужність (гучність) і тривалість (частоту або висоту тону). Простий динамік IBC/PC не дозволяє регулювати гучність, і звук утворюється простою послідовністю електричних імпульсів. Струм до динаміка подається і відключається в режимі простого двійкового управління. Частота імпульсів струму визначає звукову частоту, що виробляється динаміком.

Наявність програмованого таймера дозволяє отримувати будь-яку частоту імпульсів.

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

Сигнал для управління динаміком формується в результаті спільної роботи мікросхем (рис. 4.1):

  • програмованого периферійного інтерфейсу і8255 (для ХТ) та і8242 (для АТ);

  • таймера і8253.

Основна генерація звуку проводиться мікросхемою таймера, що має три канали з однаковою структурою та принципом роботи. На канали таймера подаються імпульси від мікросхеми системного годинника з частотою 1193181 Гц. Кожен канал має два входи і один вихід. Канал 0 замкнутий на контролер переривань і є джерелом апаратного переривання від таймера, що виникає 18,2 рази в секунду. Канал 1 пов'язаний з мікросхемою прямого доступу до пам'яті. Канал 2 виходить на динамік комп'ютера. До складу кожного каналу входять:

  • регістр введення-виведення розрядністю 8 біт;

  • регістр-засувка (16 біт);

  • регістр-лічильник (16 біт).

Кожен регістр введення-виведення має адресу в адресному просторі введення-виведення (номер порту вводу-виводу). Регістр введення-виведення каналу 2 має номер порту вводу-виводу 42h. Розміщені в нього значення негайно потрапляють в регістр-засувку, де значення зберігається, поки в регістр введення-виведення не буде записано нове значення.

Вибір каналу здійснюється зверненням до регістру управління (порту 43h), що входить до складу таймера і містить слово стану наступної структури:

  • Біт 0 – тип константи перерахунку (0 – двійкове число, 1 – двійково-десяткове);

  • Біти 1-3 – режим роботи таймера (в даній роботі використовувати режим 3);

  • Біти 4-5 – 00 – передати значення лічильника в регістр-засувку; 01 – записати в регістр-засувку молодший байт; 10 – записати в регістр-засувку старший байт; 11 – записати в регістр-засувку спочатку старший байт, а потім – молодший (у даній роботі використовувати значення 11);

  • Біти 6-7 визначають номер каналу (в даній роботі використовувати значення 10).

Рис. 4.1. Схема звукового каналу

Подачею струму на динамік управляє біт 1 порту 61h. Біт 0 порту 61h відкриває або закриває вихід каналу.

Для генерації (другий канал таймера) прямокутних імпульсів, що завантажуються в порт 42, значення (value) повинні бути парними:

Value = 1193181 / f (f – частота звукового сигналу).

Таким чином, для програмування звукового каналу таймера необхідно:

  • за допомогою порту 43h вибрати канал, задати режим роботи і тип операції передачі значення в канал;

  • подати струм на динамік, встановивши в 1 біт 1 порту 61h;

  • помістити в порт 42h значення, що відповідає висоті тону.

1. Скласти дві функції: виду void ідентифікатор (unsignedintTn), де Tn - тривалість звучання (або паузи) представлена рядом (табл. 4.1):

Таблиця 4.1

Tn=T0=4сек

Tn=T8T=0,75 сек

Tn=T0T=6 сек

Tn=T16=0,25 сек

Tn=T2=2 сек

Tn=T16T=0,375 сек

Tn=T2T=3 сек

Tn=T32=0,125 сек

Tn=T4=1 сек

Tn=T32T=0,187 сек

Tn=T4T=1,5 сек

Tn=T64=0,062 сек

Tn=T8=0,5 сек

Tn=T128=0,031 сек

для генерації звуку з заданими значеннями частот, що визначаються ідентифікаторами (табл. 4.2):

Таблиця 4.2

1

С0=65 Гц,

D0=74 Гц

16

FD=184 Гц,

GD=208 Гц

2

E0=82 Гц,

F0=87 Гц

17

C2=520 Гц,

D2=592 Гц

3

G0=98 Гц,

A0=110 Гц

18

E2= 656 Гц,

F2=696 Гц

4

В0=116 Гц,

Н0=124 Гц

19

G2=784 Гц,

A2=880 Гц

5

С=130Гц,

D=148 Гц

20

B2=928 Гц,

H2=992 Гц

6

E=164 Гц,

F=174 Гц

21

C1D=276 Гц,

D1D=312 Гц

7

G=196 Гц,

A=220 Гц

22

F1D=368 Гц,

G1D=416 Гц

8

B=232 Гц,

H=248 Гц

23

C2D=552 Гц,

D2D=624 Гц

9

C1=260 Гц,

D1=296 Гц

24

F2D=736 Гц,

G2D=832 Гц

10

E1=328 Гц,

F1=348 Гц

25

C3=1040 Гц,

D3=1184 Гц

11

G1=392 Гц,

A1=440 Гц

26

E3=1312 Гц,

F3=1392 Гц

12

B1=464 Гц,

H1=496 Гц

27

G3=1568 Гц,

A3=1760 Гц

13

C0D=69 Гц,

D0D=78 Гц

14

F0D=92 Гц,

G0D=104 Гц

15

CD=138 Гц,

D0=156 Гц

і функцію паузи виду void P (unsignedintTn).

Для програмування звукового каналу таймера можна використовувати також функцію Windows API Beep, яка призначена для відтворення простих однотонних звуків через вбудований динамік із заданою частотою і тривалістю. Існує в операційних системах сімейства Microsoft Windows і ReactOS.

Функція Beep виконується синхронно, тобто повертає керування лише після завершення відтворення звуку.

Вона має два параметри:

  • dwFrec – частота звуку в герцах, допустимий діапазон – від 37 до 32767 Гц;

  • dwDuration – тривалість звуку в мілісекундах;

і повертає значення типу BOOL (ненульове при успішному виконанні).

Величина паузи задається командою sleep, яка уповільнює виконання.

Її опис – void sleep (int seconds).

Функція sleep затримує виконання програми на дану кількість секунд seconds.

Частота нот хроматичної гами (табл. 4.3) і ноти хроматичної гами (рис. 4.2) дають можливість відтворити будь-яку просту мелодію.

Таблиця 4.3

До

До#

Ре

Ре#

Ми

Фа

Фа#

Соль

Соль#

Ля

Ля#

Си

Октава

1

2

3

4

5

6

7

8

9

10

11

12

контроктава

33

35

37

39

41

44

46

49

52

55

58

62

13

14

15

16

17

18

19

20

21

22

23

24

велика

65

69

73

78

82

87

92

98

104

110

117

123

25

26

27

28

29

30

31

32

33

34

35

36

мала

131

139

147

156

165

175

185

196

208

220

233

247

37

38

39

40

41

42

43

44

45

46

47

48

перша

262

277

294

311

330

349

370

392

415

440

466

494

49

50

51

52

53

54

55

56

57

58

59

60

друга

523

554

587

622

659

698

740

784

831

880

932

988

61

62

63

64

65

66

67

68

69

70

71

72

третя

1047

1109

1175

1245

1319

1397

1480

1568

1661

1760

1865

1976

73

74

75

76

77

78

79

80

81

82

83

84

четверта

2093

2217

2349

2489

2637

2794

2960

3136

3322

3520

3729

3951

Рис. 4.2. Ноти хроматичної гами

Точка поряд з нотою збільшує її тривалість наполовину.

Ноти студенту видаються із збірника мелодій згідно зі списком у журналі.

Приклади складання програм

Приклад 1. Текст програми (склав Карабат Д.І.):

#include "windows.h"

#include "iostream.h"

#define T0 4000

#define T0T 6000

#define T2 2000

#define T2T 3000

#define T4 1000

#define T4T 1500

#define T8 500

#define T8T 750

#define T16 250

#define T16T 375

#define T32 125

#define T32T 187

#define T64 62

#define T128 31

void main()

{

Beep(800,T8);

Beep(532*2,T8);

Beep(880,T16);

Beep(587*2,T8);

Beep(880,T16);

Beep(698*2,T8);

Beep(659*2,T16);

Beep(880,T2);

Beep(880,T8);

Beep(800,T8);

Beep(532*2,T8);

Beep(880,T16);

Beep(587*2,T8);

Beep(880,T16);

Beep(698*2,T8);

Beep(659*2,T16);

Beep(880,T2);

Beep(880,T8);

Beep(987,T2);

Sleep(T8);

Beep(687,T16);

Beep(587*2,T8);

Beep(687,T16);

Beep(659*2,T8);

Beep(687,T16);

Beep(698*2,T8);

Beep(659,T16);

Beep(987,T2);

Sleep(T8);

Beep(987,T16);

Beep(587*2,T8);

Beep(987,T16);

Beep(659*2,T8);

Beep(987,T16);

Beep(698*2,T8);

Beep(659,T16);

Beep(880,T2);

}

Приклад 2. Текст програми (склав Кравець І.І.):

#include "dos.h"

int main (void)

{

For (int i=0; i<10; i++)

{

sound (500+i*10);

delay (1000);

nosound();

sound (400+i*10);

delay (500);

nosound();

sound (500+i*10);

delay (1000);

nosound();

}

Return 0;

}