Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2010, 18:47   #31
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
слышал уже готовую прогу на 1.5 мГц)
А ничего, что ухо не способно услышать выше 20кГц ? ))
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 28.09.2010, 18:53   #32
Tronix
Форумчанин
 
Аватар для Tronix
 
Регистрация: 15.06.2010
Сообщений: 740
По умолчанию

Цитата:
Сообщение от Goodwin98 Посмотреть сообщение
А ничего, что ухо не способно услышать выше 20кГц ? ))
И то далеко не у 100% людей. Обычно у среднего человека порог еще ниже.
Чтобы понять рекурсию, сперва нужно понять рекурсию.
Tronix вне форума Ответить с цитированием
Старый 30.09.2010, 09:44   #33
~VL@D~
Пользователь
 
Регистрация: 09.09.2010
Сообщений: 25
Вопрос

Тогда я вообще не знаю чё за муть нам втирает этот препод
Видимо подразумевается какая то другая частота... Знаю, что нужно входную частоту (вроде 1,19318 МГц поделить на нужную нам, т.е. 1 МГц, получим делитель. Вот именно его и нужно где то в проге использовать)

блин, реально))) мне надо 1 кГц, а не 1 мГц))))

есть код, но tasm почему то не хочет создавать com-файл, а пишет только exe. Но даже при запуске этого *.exe dos выдает критическую ошибку и закрывается.

Вот код:
Код:
; 
astack segment stack
            dw 48 dup (?)                ; стек размером 96 байт
astack  ends
adata    segment 
buffer    db 'time=   .  ',' sec  $'    ; область памяти для вывода на дисплей времени звучания
hsecs   db ?                             ;  место для записи сотых долей секунды текущего времени
secs     db ?                             ;  место для записи секунд текущего времени
tmp      db ?                             ;  место временного хранения управляющего слова системного порта
adata    ends 
start     segment
            assume cs:start,ds:adata,ss:astack,es:adata
;
sound   proc
; Генерация сигнала длительностью 1/100 сек.
; с частотой, передаваемой в регистре [DI]
            push ax
            push bx
            push cx
            push dx
            push di
            mov al,0B6h     ; задание номера счетчика и выбор режима его работы 
            out 43h,al
            mov dx,0010h  ; вместо 0010h подставьте значение двух старших байта входной частоты 
            mov ax,1000h  ; вместо 1000h подставьте два младших байта входной частоты в Гц
            div di                ; вычисление длительности периода
            out 42h,al         ; запись в счетчик младшего байта периода
            jcxz $+2           ; задержка
            jcxz $+2
            mov al,ah
            out 42h,al         ; запись в счетчик старшего байта периода
            in al,61h           ; сохранение текущего управляющего слова
            mov tmp,al        ;  ...в ячейке tmp 
            or al,3               ; включение...
            out 61h,al         ;   ...таймера

            mov ah,2ch       ; запрос системного времени
            int 21h              
            mov secs,dh
            mov hsecs,dl

wt:       mov cx,30000  ;  вместо 30000 подставьте точное количество повторения цикла
spkon:  jcxz $+2           ;  вставьте нужное
            jcxz $+2           ;                              количество
            loop spkon      ;                                                команд задержки 
            dec bx
            jnz wt
            mov al,tmp
            out 61h,al         ; выключение таймера
            mov ah,2ch       ; запрос системного времени
            int 21h
            sub dl,hsecs     ; вычисление сотых долей секунды
            jnc sub_sec
            add dl,100
            dec dh
sub_sec:sub dh,secs    ; вычисление секунд звучания
            mov secs,dh
            mov al,dl
            cbw
            lea di,buffer+9
            call convert       ; преобразование сотых секунды в ASCII-код
            mov al,secs
            cbw
            lea di,buffer+6
            call convert       ; преобразование секунд в ASCII-код
            mov ah,9
            mov dx,offset buffer
            int 21h              ; вывод результатов на экран
            pop di
            pop dx
            pop cx
            pop bx
            pop ax
            ret
sound   endp

 
convert proc near
; Преобразование числа в ASCII-код
; [AX] - преобразуемое число, 
; [DS]:[DI] - адрес буфера для размещения ASCII-кода
            push ax            ; сохраняем число
            mov al,'0'           ; заполняем...
            mov cx,2           ;   2 байта буферной...
            rep stosb          ;   области нулями 
            pop ax              ; восстанавливаем число
            mov cx,10         ; записываем основание системы счисления
conloop:xor dx,dx          ; очищаем старший байт делимого
            div cx               ; делим [DX,AX] на 10
            add dl,30h         ; превращаем цифру остатка в ASCII-код
            dec di               ; продвигаем указатель буфера на 1 байт назад
            mov [di],dl         ; записываем в буфер ASCII-код цифры
            cmp ax,0          ; результат деления на 10 нулевой?
            jnz conloop       ; возврат, если результат ненулевой
            ret
convert endp

 
beep     proc far
; запуск процедуры sound
            push ds
            sub ax,ax
            push ax
            mov bx,adata
            mov ds,bx
            mov es,bx
            mov bx,1000     ; задаем длительность 1000 * 0.01 = 10 с
            mov di,440        ; задаем частоту 440 Гц  (звук Ля первой октавы)
            call sound
            ret
beep     endp
start     ends 
            end beep
Что делать?
Изображения
Тип файла: jpg 1.jpg (75.0 Кб, 61 просмотров)

Последний раз редактировалось Stilet; 08.10.2010 в 13:27.
~VL@D~ вне форума Ответить с цитированием
Старый 08.10.2010, 10:10   #34
svbezm
Форумчанин
 
Регистрация: 02.04.2010
Сообщений: 104
По умолчанию

Поставь в конце программы проверку нажатия клавиатуры и если не нажато зацикли программу на себя ...
svbezm вне форума Ответить с цитированием
Старый 08.10.2010, 11:31   #35
~VL@D~
Пользователь
 
Регистрация: 09.09.2010
Сообщений: 25
По умолчанию

ладно, этот код чуть позже рассмотрю... Сейчас думаю сделать так: создать несколько подпрограм, в которых будут Длинный писк и Короткий. Затем хочу написать программу, которая будет просто поочереди вызывать те программы, делая между ними задержку. Только пока не представляю как это сделать. Не подскажете?)
~VL@D~ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Счетчик. Bilargo JavaScript, Ajax 2 15.08.2010 13:54