Скачать презентацию ЛЕКЦИЯ 6 ВВОД ВЫВОД В ПОРТ Скачать презентацию ЛЕКЦИЯ 6 ВВОД ВЫВОД В ПОРТ

lect_6.ppt

  • Количество слайдов: 9

ЛЕКЦИЯ № 6 ВВОД – ВЫВОД В ПОРТ Вся работа системы с устройствами на ЛЕКЦИЯ № 6 ВВОД – ВЫВОД В ПОРТ Вся работа системы с устройствами на самом низком уровне выполняется с использованием портов ввода-вывода. Концептуальная схема управления оборудованием компьютера Программа пользователя Функции операционной системы Функции BIOS … Пространство портов ввода-вывода Аппаратура компьютера …

Схема формирования звука для встроенного динамика Системные часы (генератор импульсов, частота 1, 19 МГц) Схема формирования звука для встроенного динамика Системные часы (генератор импульсов, частота 1, 19 МГц) Регистр управления (порт 43 h) Таймер i 8253 Канал 0 Порт 40 h Канал 1 Порт 40 h Регистр ввода-вывода (порт 42 h) канал 2 Регистр - защелка да Регистр – счетчик (count=count-1) count=0? И нет i 8255 Порт 61 h 7 6 5 4 3 2 1 0 Вход 2 Вход 1 И

Структура байта состояния (порт 43 h) бит 0 Значение, загружаемое в регистр- защелку задано: Структура байта состояния (порт 43 h) бит 0 Значение, загружаемое в регистр- защелку задано: 0 - двоичным числом, 1 - двоичнодесятичным (BCD) числом. биты 1 -3 Режим работы микросхемы таймера. Всего 6 режимов, но обычно используется третий (в этом случае значение поля – 011) биты 4 -5 Тип операции: 00 – передать значение счетчика в регистр-задвижку, 10 – записать в регистрзадвижку только старший байт, 01 – записать в регистр-задвижку только младший байт, 11 записать в регистр-задвижку сначала младший байт, затем старший биты 6 -7 Номер программируемого канала: 00, 01, 10

Последовательность действий при программировании звукового канала таймера. 1. Посредством порта 43 h выбрать канал, Последовательность действий при программировании звукового канала таймера. 1. Посредством порта 43 h выбрать канал, задать режим работы и тип операции передачи значения в канал (10110110=0 b 6 h). 2. Подать ток на динамик, установив бит 1 порта 61 h. 3. Используя регистр ax , поместить нужное значение в порт 42 h, определив тем самым нужную высоту тона. 4.

masm model small stack 100 h delay macro time local ext, iter ; макрос masm model small stack 100 h delay macro time local ext, iter ; макрос задержки, его текст ограничивается директивами macro и endm. ; На входе - значение задержки (в мкс) push cx mov cx, time ext: push cx mov cx, 5000 iter: loop iter pop cx loop ext pop cx endm

. data ; сегмент данных tonelow dw 2651 ; нижняя граница звучания = 450 . data ; сегмент данных tonelow dw 2651 ; нижняя граница звучания = 450 Гц cnt db 0 ; счётчик для выхода из программы temp dw ? ; верхняя граница звучания. code ; сегмент кода main: ; точка входа в программу mov ax, @data ; связываем регистр ds с сегментом mov ds, ax ; данных через регистр ax xor ax, ax ; очищаем ax go: ; заносим слово состояния 10110110 b(0 В 6 h) в командный регистр (порт 43 h) mov al, 0 B 6 h out 43 h, al in al, 61 h ; получим значение порта 61 h в al or al, 3 ; инициализируем динамик и подаем ток в порт 61 h out 61 h, al mov cx, 1000 ; количество шагов ступенчатого изменения тона

musicup: ; в ax значение нижней границы частоты mov ax, tonelow out 42 h, musicup: ; в ax значение нижней границы частоты mov ax, tonelow out 42 h, al xchg al, ah ; обмен между al и ah out 42 h, al ; в порт 42 h старшее слово ax: ah sub tonelow, 1 ; повышаем тон ; в порт 42 h младшее слово ax : al delay 50 ; задержка mov dx, tonelow ; в dx текущее значение высоты mov temp, dx ; temp - верхнее значение высоты loop musicup ; повторить цикл повышения mov cx, 1000 ; восстановить счетчик цикла

musicdown: mov ax, temp ; в ax верхнее значение высоты out 42 h, al musicdown: mov ax, temp ; в ax верхнее значение высоты out 42 h, al ; в порт 42 h младшее слово ax : al mov al, ah ; обмен между al и ah out 42 h, al ; в порт 42 h старшее слово ax : ah add temp, 1 ; понижаем высоту delay 50 ; задержка loop musicdown ; повторить цикл понижения nosound: in al, 61 h ; получим значение порта 61 h в AL and al, 0 FCh ; выключить динамик out 61 h, al ; в порт 61 h mov dx, 2651 ; для последующих циклов mov tonelow, dx inc cnt ; увеличиваем счётчик проходов, то есть ; количество звучаний сирены cmp cnt, 10 ; 10 раз? jne go ; если нет, идти на метку go

exit: mov ax, 4 c 00 h int 21 h end main ; стандартный exit: mov ax, 4 c 00 h int 21 h end main ; стандартный выход ; конец программы