МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ "КОМСОМОЛЬСКИЙ-НА-АМУРЕ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ"
ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
КАФЕДРА МОП ЭВМ
ЛАБОРАТОРНАЯ РАБОТА № 6
по курсу "ОС реального режима"
тема: "Программирование контроллера таймера"
Студента группы 0ВМ-1: Чередниченко В.В.
Проверил: Тихомиров В.А.
Вариант № 10
Комсомольск-на-Амуре
2002
Задание:
Сделать программу, которая через динамик компьютера проигрывает гамму второй октавы от ноты "ДО" до ноты "СИ".
Выполнение задания:
Алгоритм:
Ноты будем выводить путём программирования контроллера таймера:
1. заносим в порт 43h слово состояния 10110110b:
первый бит означает, что мы будем посылать в регистр защёлку двоично-десятичные числа;
следующие три означают режим работы микросхемы таймера (в нашем случае третий);
следующие два означают, что мы сначала будем посылать в регист задвижку сначала младший байт, а затем старший;
последние два бита определяют номер программируемого канала (в нашем случае – третий)
2. устанавливаем первые два бита в порту 61h в единицы, для подачи тока на динамик;
3. посылаем в порт 42h значение, равное 1193180/"требуемая частота";
4. устанавливаем задержку;
5. обнуляем первые два бита в порту 61h, чтобы обесточить (выключить) динамик компьютера;
6. повторяем шаги 2-5 для всех нужных нот.
Листинг программы:
masm
model small
stack 100h
;определения нот
NOTA_DO equ 4559
NOTA_DO_DI equ 4304
NOTA_RE equ 4063
NOTA_RE_DI equ 3835
NOTA_MI equ 3620
NOTA_FA equ 3417
NOTA_FA_DI equ 3225
NOTA_SOL equ 3044
NOTA_SOL_DI equ 2873
NOTA_LA equ 2712
NOTA_LA_DI equ 2559
NOTA_SI equ 2416
herc macro number ;макрос вывода звука с частотой number
mov ax,number
out 42h,al
xchg al,ah
out 42h,al
endm
delay macro time ;макрос задержки на time мкс
local ext,iter
push cx
mov cx,time
ext:
push cx
mov cx,5000
iter:
loop iter
pop cx
loop ext
pop cx
endm
on macro ;макрос включения динамика
in al,61h
or al,00000011b
out 61h,al
endm
off macro ;макрос выключения динамика
in al,61h
and al,11111100b
out 61h,al
endm
nota macro num_nota ;макрос вывода ноты num_nota
on
herc num_nota
delay 1500
off
delay 1000
endm
.code
main:
mov al,10110110b ;заносим слово состояния в командный регистр (порт 43h)
out 43h,al
;выводим ноты
nota NOTA_DO
nota NOTA_DO_DI
nota NOTA_RE
nota NOTA_RE_DI
nota NOTA_MI
nota NOTA_FA
nota NOTA_FA_DI
nota NOTA_SOL
nota NOTA_SOL_DI
nota NOTA_LA
nota NOTA_LA_DI
nota NOTA_SI
mov ax,4c00h ;завершение программы
int 21h
end main
Компилирование:
tasm ocpp_6.asm
Turbo Assembler Version 3.1 Copyright (c) 1988, 1992 Borland International
Assembling file: ocpp_6.asm
Error messages: None
Warning messages: None
Passes: 1
Remaining memory: 382k
tlink ocpp_6.obj
Turbo Link Version 5.1 Copyright (c) 1992 Borland International
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.