Требования к оформлению лабораторной работы

ЗАДАНИЕ К ЛАБОРАТОРНОЙ РАБОТЕ № 3

Quot;Ознайомлення з програмною моделлю таймера ПК

Та стандартним системним звуковим каналом".

Сигнал для управления динамиком формируется в результате совместной работы микросхем:

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

- таймера і8253.

Требования к оформлению лабораторной работы - student2.ru

Основная генерация звука производится микросхемой таймера, имеющей три канала с одинаковой структурой и принципом работы. На каналы таймера подаются импульсы от микросхемы системных часов с частотой 1,19 МГц. Каждый канал имеет два входа и один выход. Канал 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).

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

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

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

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

- посредством порта 43h выбрать канал, задать режим работы и тип операции передачи значения в канал;

- подать ток на динамик установив в 1 бит 1 порта 61h;

- поместить в порт 42h значение, соответствующее высоте тона.

Частоты звучания нот

Частота, Гц Суб-контp- Контp- Большая Малая 1.00 2.00 3.00 4.00 5.00
Hота октава октава октава октава октава октава октава октава октава
До C   32.70 65.41 130.82 261.63 523.25 1046.50 2093.00 4186.00
До-диез C   34.65 69.30 138.59 277.18 554.36 1108.70 2217.40 4434.80
Ре D   36.95 73.91 147.83 293.66 587.32 1174.60 2349.20 4698.40
Ре-диез D   38.88 77.78 155.56 311.13 622.26 1244.50 2489.00 4978.00
Ми E 20.61 41.21 82.41 164.81 329.63 659.26 1318.50 2637.00 5274.00
Фа F 21.82 43.65 87.31 174.62 349.23 698.46 1396.90 2793.80  
Фа-диез F 23.12 46.25 92.50 185.00 369.99 739.98 1480.00 2960.00  
Соль G 24.50 49.00 98.00 196.00 392.00 784.00 1568.00 3136.00  
Соль-диез G 25.95 51.90 103.80 207.00 415.30 830.60 1661.20 3332.40  
Ля A 27.50 55.00 110.00 220.00 440.00 880.00 1720.00 3440.00  
Си-бемоль B 29.13 58.26 116.54 233.08 466.16 932.32 1864.60 3729.20  
Си H 30.87 61.74 123.48 246.96 493.88 987.75 1975.50 3951.00  

1. Составить две функции: вида void идентификатор (unsignedint Tn),где Tn – продолжительность звучания (или паузы) представлена рядом констант:

Tn=T0=4 сек
Tn=T0T=6 сек
Tn=T2=2 сек
Tn=T2T=3 сек
Tn=T4=1 сек
Tn=T4T=1,5 сек
Tn=T8=0,5 сек
Tn=T8T=0,75 сек
Tn=T16=0,25 сек
Tn=T16T=0,375 сек
Tn=T32=0,125 сек
Tn=T32T=0,187 сек
Tn=T64=0,062 сек
Tn=T128=0,031 сек

для генерации звука с заданными значениями частот, определяемых идентификаторами:

С0=65 Гц, D0=74 Гц  
E0=82 Гц, F0=87 Гц  
G0=98 Гц, A0=110 Гц  
В0=116 Гц, Н0=124 Гц  
С=130 Гц, D=148 Гц  
E=164 Гц, F=174 Гц  
G=196 Гц, A=220 Гц  
B=232 Гц, H=248 Гц  
C1=260 Гц, D1=296 Гц  
E1=328 Гц, F1=348 Гц  
G1=392 Гц, A1=440 Гц  
B1=464 Гц, H1=496 Гц  
C0D=69 Гц, D0D=78 Гц  
F0D=92 Гц, G0D=104 Гц  
CD=138 Гц, D0=156 Гц  
FD=184 Гц, GD=208 Гц  
C2=520 Гц, D2=592 Гц  
E2= 656 Гц, F2=696 Гц  
G2=784 Гц, A2=880 Гц  
B2=928 Гц, H2=992 Гц  
C1D=276 Гц, D1D=312 Гц  
F1D=368 Гц, G1D=416 Гц  
C2D=552 Гц, D2D=624 Гц  
F2D=736 Гц, G2D=832 Гц  
C3=1040 Гц, D3=1184 Гц  
E3=1312 Гц, F3=1392 Гц  
G3=1568 Гц, A3=1760 Гц  

и функцию паузы вида void P (unsigned int Tn).

Требования к оформлению лабораторной работы

Работа должна быть оформлена как в виде твердой копии, так и в электронном варианте (на диске). На диске должны быть представлены файлы с исходными программными кодами и соответствующий компилированный вариант (.exe). Исходный код должен содержать краткие комментарии и соответствовать требованиям “хорошего стиля” программирования.

Работа выполняется в тетради и содержит описание хода выполнения задания (назначение разрабатываемой программы в целом и ее функциональных модулей-функций, описание работы программы и ее функциональных модулей, полный исходный код программы на алгоритмическом языке высокого уровня С/С++.

Пример записи исходного программного кода:

# include <заголовочный файл>

# define T0 // описательные

......................................

# define T128 // константы (14 - значений )

void E (...);

void E2 (...); // объявление прототипов функций

void P (...);

void main ( )

{

E(T0); P(T32); E2(T4); E(T0); P(T4); и т.д. последовательно из 10-12 составленных Вами функций

}

void E (...)

{ }

void E2 (...) // определение функций

{ }

void P(...)

{ }

К заданию 2 предъявляются аналогичные требования. В задании 2 необходимо продемонстрировать сравнительное звучание системного звукового сигнала со звуком с определенной Вами частотой.

Некоторые замечания. При модификации битовых значений регистров-портов, допускающих чтение и запись (R/W), необходимо сохранить исходное состояние битов регистра во временной переменной для их последующего восстановления в заключительной части программного кода.

Наши рекомендации