Смекни!
smekni.com

Микропроцессорные системы (стр. 3 из 6)

Рисунок 2.6 – Содержимое порта РВ

2.3 Генерация звука в IBMPC

Схема генерации звука в IBMPC изображена на рисунке 2.7.



Рисунок 2.7 - Схема генерации звука в IBMPC

На вход звукогенератора поступает логическое “И” двух сигналов: выхода OUT 2-го канала таймера и содержимого бита 1 порта РВ интерфейса i8255. Обычный способ генерации звука состоит в программировании канала 2 таймера так, чтобы он выдавал прямоугольный импульс заданной частоты, лежащий в звуковом диапазоне (20Гц – 20 КГц). Для этого следует использовать режим таймера 3 с подходящим начальным значением счетчика. Если затем установить биты 0 и 1 порта РВ, то импульс начнет поступать на вход звукогенератора (бит 0 – это вход GATE канала 2, разрешающий счет, а бит 1 – разрешение выдачи выхода OUT на вход звукогенератора). Для выключения звука достаточно сбросить биты 0 и 1 порта РВ. Преимущество этого метода состоит в том, что, запустив генерацию звука, ЦП может выполнять другие действия. Значение счетчика 2-го канала таймера вычисляется по формуле:

N = 1193181/F

где 193181 – тактовая частота таймера в Гц

F – требуемая частота звука в Гц

Например: Если необходимая частота равна 1 кГц = 1000Гц, тогда константа счетчика равна 1193181/1000 = 1193 (10с/с) = 4А9 (16с/с).

2.4 Выполнение задержки

В BIOS существует 4 ячейки памяти, в которых хранится системное время. В результате прерывания от таймера содержимое этих ячеек увеличивается на 1, т.е. каждые 55 мс этот изменяется. По адресу 0000:046E находится старшее слово, а по адресу 0000:046Е младшее слово системного счетчика времени.

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

Константа необходимой задержки считается следующим образом:

Задержка/55мс = константа

Например:

Если необходимая задержка равна 550мс, тогда константа равна 550мс/55мс = 10 (10с/с) = ОА (16с/c).

2.5 Область данных BIOS

Область основной памяти размером 256 байт расположена непосредственно ха таблицей векторов прерываний, начиная с адреса 0040:0000 и кончая 004F:0000, предназначена для использования программами BIOS. В таблице приведено описание части информации, помещаемой в BIOS в указанную область памяти. Обращаясь к ней, прикладные программы получают важную информацию о состоянии системы.

Таблица 2.4 – Область данных портов

Адрес (сегмент: смещение) Длина (в байтах) Наименование и описание
ОБЛАСТЬ ДАННЫХ ПОСЛЕДОВАТЕЛЬНОГО\ПАРАЛЛЕНЛЬНОГО ПОРТОВ
0040:0000 8 Базовый адрес ввода-вывода для COM1-COM4
0040:0008 8 Базовый адрес ввода-вывода для LPT1-LPT4
СМЕШАННАЯ ОБЛАСТЬ ДАННЫХ
0040:0010 2 Флаги оборудования
0040:0013 2 Обьём памяти в килобайтах
ОБЛАСТЬ ДАННЫХ КЛАВИАТУРЫ 1
0040:0017 1 Флаги 1 состояния регистров клавиатуры
0040:0018 1 Флаги 2 состояния регистров клавиатуры
0040:0019 1 Ввод с дополнительного клавиатурного поля
0040:001А 2 Адрес начла буфера клавиатуры
0040:001С 2 Адрес конца буфера клавиатуры
0040:01Е 32 Буфер клавиатуры
ОБЛАСТЬ НАКОПИТЕЛЯ FDD
0040:003Е 1 Состояние повторной калибровки
0040:003А 1 Состояние двигателя
0040:0040 1 Счетчик числа
0040:0041 1 Состояние последней операции
0040:0042 7 Байты состояния контроллера
ОБЛАСТЬ ДАННЫХВИДЕОАДАПТЕРА 1
0040:0049 1 Текущий видеорежим
0040:004А 2 Количество столбцов в отображаемом тексте
0040:004С 2 Длина буфера регенерации в байтах
0040:004У 2 Адрес смещения активной видеостраницы
0040:0050 16 Положение курсора (видеостраницы 0-7)
0040:0060 2 Тип курсора (нач. и кон. строки развертки)
0040:0062 1 Активная видеостраница
0040:0063 2 Базовый адрес видеоконтроллера
0040:0065 1 Текущая установка регистра 3х8
0040:0066 1 текущая установка регистра 3х9
ОБЛАСТЬ ДАННЫХ СИСТЕМНОГО ТАЙМЕРА
0040:006С 2 Младшее словосодержимого таймера
0040:006Е 2 Старшее слово содержимого таймера
0040:0070 1 Индикатор заполнения таймера
СИСТЕМНАЯ ОБЛАСТЬ ДАННЫХ
0040:0071 1 Байт BIOS_BREAK
0040:0072 2 Флаг сброса
ОБЛАСТЬ ДАННЫХ ЖЕСТКОГО ДИСКА
0040:0074 1 Состояние последней операции
0040:0075 1 Число накопителей HDD
ВРЕМЕНА ОЖИДАНИЯ РЕАКЦИИ (ТАЙМАУТЫ)
0040:0078 4 Значения времен ожидания для LPT1-LPT4
0040:007С 4 Значения времен ожидания для COM1-COM4
ОБЛАСТЬ ДАННЫХ КЛАВИАТУРЫ
0040:0080 2 Адрес начала буфера клавиатуры
0040:0082 2
ОБЛАСТЬ ДАННЫХ ВИДЕОАДАПТЕРА 2
0040:0084 1 Число отображаемых строк текста минус 1
0040:0085 2 высота символа в строках развертки
0040:0087 1 Параметры видеорежима
0040:0088 1 Параметры видеорежима
ОБЛАСТЬ СВЯЗИ МЕЖДУ ПРОГРАММАМИ
0040:00F0 16 Область, где программа может записать\считать данные (например статус)

2.6 Задание

Напишите программу генерации последовательности звуковых сигналов, имеющих следующие характеристики:

- Первый сигнал : частота F1, длительность T1.

- Второй сигнал : частота F2, длительность T2.

- Пауза между сигналами : длительность Р1

Характеристика F1, F2, T1, T2, P1 выбираются из таблицы задания согласно варианту.

Программу необходимо оформить в виде основной программы и двух подпрограмм.

- Первая подпрограмма выполняет генерацию звука.

- Вторая подпрограмма выполняет задержку.

- Основная программа выполняет вызовы подпрограмм в нужной последовательности.

№Варианта F1, кгц T1, мс P1, мс F2, кГц Т2, мс
1 5 500 150 9,5 800

Рисунок 2.9 – Блок – схема основной программы

Основная программа

stac segment

db 64 dup (0)

ends

data segment

stQ db 13,10,''

ends

code segment

assume ds:data, cs:code, ss:stac

Start:

mov ax,data

mov ds,ax

mov es,ax

mov ah,09h

lea dx,stQ

int 21h

m0: call Sound0

mov bx,00efh

call Sound

mov dx, 0009h

call Sound2

mov dx, 0003h

call Sound2

mov bx,007eh

call Sound

mov dx, 000fh

call Sound2

mov ah,02h

int 16h

and al,00100000b

jz m0

jmp m_end

Sound0 Proc near

in al,[61h]

and al,0fch

out [61h],al

ret

Endp

Sound Proc near

mov bx,04a9h

mov dx,0043h

mov al,0beh

out dx,al

dec dx

mov al,bl

out dx,al

mov al,bh

out dx,al

in al,[61h]

or al,03h

out [61h],al

ret

Endp

Sound2 Proc near

xor ax,ax

mov es,ax

mov ax,es:[046ch]

add dx,ax

m1: mov ax,es:[046ch]

cmp dx,ax

jnz m1

in al,[61h]

and al,0fch

out [61h],al

ret

Endp

m_end:

mov ax,4c00h

int 21h

ends

END Start

Рисунок 3 – Результат работы программы


3 ПРИНЦИП РАБОТЫ КЛАВИАТУРЫ

Клавиатура выполнена, как правило, в виде отдельного устройства подключаемого к компьютеру тонким кабелем. Клавиатура содержит микроконтроллер который выполняет специализированные функции. Он осуществляет сканирование клавишного поля, обработку дребезга при нажатии и отпускании клавиши, буферизацию кодов и организацию передачи данных последовательном коде в компьютер. Упрощенная принципиальная схема клавиатуры, представлена на рисунке ниже.

Рисунок 3.1 – Принципиальная схема клавиатуры

При нажатии любой клавиши микроконтроллер вырабатывает Scan-код нажатой клавиши. Scan-код отличается от стандартного ASCII кода символа. Scan-код – это просто номер клавиши на клавиатуре. Таким образом Scan-код клавиш ” F ” и “ f ” одинаков. Таблица некоторых Scan-кодов приведена ниже.


Таблица 3.1 – Набор Scan - кодов

16с\с 10с\с клавиша 16с\с 10с\с клавиша 16с\с 10с\с клавиша
01 1 esc 1d 29 Ctrl 39 57 Space
02 2 1 ! 1e 30 A 3a 58 Caps Lock
03 3 2 @ 1f 31 s 3b 59 F1
04 4 3 # 20 32 d 3c 60 F2
05 5 4 $ 21 33 f 3d 61 F3
06 6 5% 22 34 g 3e 62 F4
07 7 6 ^ 23 35 h 3f 63 F5
08 8 7 & 24 36 j 40 64 F6
09 9 8 * 25 37 k 41 65 F7
0a 10 9 ( 26 38 l 42 66 F8
0b 11 0 ) 27 39 ; : 43 67 F9
0c 12 - _ 28 40 " 44 68 F10
0d 13 = + 29 41 ` ~ 45 69 Num Lock
0e 14 <- 2a 42 Shift (L) 46 70 Scroll Lock
0f 15 tab 2b 43 &bsol; | 47 71 Home 7
10 16 q 2c 44 z 48 72 ↑ 8
11 17 w 2d 45 x 49 73 Pg Up 9
12 18 esc 2e 46 Ctrl 4a 74
13 19 r 2f 47 v 4b 75
14 20 t 30 48 b 4c 76 - 5
15 21 y 31 49 n 4d 77 ↔ 4&bsol;6
16 22 u 32 50 m 4e 78 +
17 23 i 33 51 , < 4f 79 End 1
18 24 o 34 52 . > 50 80 ↓ 2
19 25 p 35 53 / ? 51 81 Pg Dn 3
1a 26 [ { 36 54 Shift ® 52 82 Ins 0
1b 27 ] } 37 55 Prt Sc 53 83 del .
1c 28 Enter 38 56 Alt 54

Микроконтроллер передает скан-код в адаптер связи с клавиатурой, расположенный на системной плате. Адаптер связи преобразует полученный последовательный код в параллельный, передает его на входы порта ввода/вывода РА ППИ и устанавливает высокий уровень сигналаIRQ1- запрос на прерывание в контроллер прерываний КР1810ВН59Л. По этому сигналу контроллер формирует запрос на аппаратное прерывание процессора с вектором (типом прерывания) 09Н. Процессор прекращает свою работу и выполняет обработчик прерывания 09h. Который читает Scan-код из порта 60Н (порт РА ППИ) и анализирует Scan-код. Для дешифрации Scan-кодов обработчик прерывания 9h содержит специальную таблицу поиска. Обработчик также проверяет, не является ли скан-код кодом FFh, указывающим на переполнение 4-символьного аппаратного буфера Scan-кодов клавиатуры. При обнаружении кода FFh прерывание 9h сообщает о переполнении сигналом динамика. Когда поступает код от клавиши сдвига или переключателя, то в специальной переменной в памяти ПЭВМ фиксируется изменение статуса (например, переключение с верхнею регистра на нижний). Во всех остальных случаях Scan-код преобразовывается в код символа ASCII. Конечно, процедура сначала определяет установку клавиш сдвига и переключателей, чтобы правильно получить вводимый код (это "а" или "А"). После этого введенный код помещается в буфер клавиатуры, который представляем собой область памяти, способную запомнить до 15 вводимых символов, пока программа слишком занята, чтобы обработать их.