Поиск:

Ответ в темуСоздание новой темы Создание опроса
> частота звука 
:(
    Опции темы
_beginner_
Дата 1.4.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 3.2.2007
Где: Россия

Репутация: нет
Всего: нет



как плавно увеличить частоту звука?
PM   Вверх
Kuvaldis
Дата 1.4.2007, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: нет
Всего: 61



Если имеется в виду PC-speaker, то так (пример из Юрова):
Код

;---------Prg_7_1.asm---------------
;Программа ,имитирующая звук сирены.
;Изменение высоты звука от 450 Гц до 2100 Гц.
;Используется макрос delay (задержка).
;При необходимости
;можно поменять значение задержки (по умолчанию - для процессора Pentium).
;------------------------------------

model    small 
stack    100h
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 Гц
cnt    db    0    ;счётчик для выхода из программы
temp    dw    ?    ;верхняя граница звучания
.code    ;сегмент кода
main:    ;точка входа в программу
    mov    ax,@data    ;связываем регистр ds с сегментом
    mov    ds,ax    ;данных через регистр ax
    xor    ax,ax    ;очищаем ax
go:
;заносим слово состояния 10110110b(0В6h) в командный регистр (порт 43h)
    mov    al,10110110b
    out    43h,al
    in    al,61h    ;получим значение порта 61h в al
    or    al,3    ;инициализируем динамик и подаем ток в порт 61h
    out    61h,al
    mov    cx,2083    ;количество шагов ступенчатого изменения тона
musicup:
;в ax значение нижней границы частоты 
    mov    ax,tonelow
    out    42h,al    ;в порт 42h младшее слово ax :al
    xchg    al,ah    ;обмен между al и ah
    out    42h,al    ;в порт 42h старшее слово ax:ah
    add    tonelow,1    ;повышаем тон
    delay 1    ;задержка на 1 мкс
    mov    dx,tonelow    ;в dx текущее значение высоты
    mov    temp,dx    ;temp - верхнее значение высоты 
    loop    musicup    ;повторить цикл повышения
    mov    cx,2083    ; восстановить счетчик цикла
musicdown:
    mov    ax,temp    ;в ax верхнее значение высоты
    out    42h,al    ;в порт 42h младшее слово ax :al
    mov    al,ah    ;обмен между al и ah
    out    42h,al;в порт 42h старшее слово ax :ah
    sub    temp,1    ;понижаем высоту
    delay 1    ;задержка на 1 мкс
    loop musicdown    ;повторить цикл понижения
nosound:
    in    al,61h    ;получим значение порта 61h в AL
    and    al,0FCh    ;выключить динамик
    out    61h,al    ;в порт 61h
    mov    dx,2651    ;для последующих циклов
    mov    tonelow,dx
    inc    cnt    ;увеличиваем счётчик проходов, то есть 
;количество звучаний сирены
    cmp    cnt,5    ;5 раз ? 
    jne    go    ;если нет, идти на метку go
    exit:
    mov    ax,4c00h    ;стандартный выход
    int    21h
end main    ;конец программы





--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0491 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.