|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.04.2011, 15:18 | #1 |
Пользователь
Регистрация: 12.05.2010
Сообщений: 61
|
Вывод звукового сигнала
Простенькая программа, взятая из ЛЕКЦИЙ!
Ошибок нет! Нет и звукового сигнала ... [CODE] #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <dos.h> #ifdef __cplusplus #define __CPPARGS ... #else #define __CPPARGS #endif // Процедура для выдачи звукового сигнала void BEEP () { _asm { mov bx,0 mov ax,0x0e07 int 10h } } // Описание программы-обработчика прерывания будильника void interrupt alarm(__CPPARGS); // Переменная для хранения старого вектора будильника void interrupt (*old_4a)(__CPPARGS); void main(void) { clrscr(); // Подключаем свой обработчик прерывания будильника, старое значение вектора 0x4a сохраняем old_4a = _dos_getvect(0x4a); _dos_setvect(0x4a, alarm); // Устанавливаем будильник _asm { mov ah , 0x02 // Читаем текушее время int 1ah mov al , cl // Копируем минуты из cl в al add ax , 1 // Прибавляем к значению в al, значение 1 mov cl , al // Копируем обратно mov ah , 0x06 //Устанавливаем будильник на срабатывание через 1 мин int 1ah } // Для того чтобы сбросить будильник нужно нажать любую клавишу. getch(); // Сбрасываем будильник и восстанавливаем вектор прерывания будильника _asm { mov ah,0x07 //Сброс будильника int 1ah } //Восстанавливаем вектор прерывания _dos_setvect(0x4a, old_4a); printf("Ready"); getch(); } //Подпрограмма получает управление при срабатывании будильника. // Ее назначение - выдать звуковой сигнал. void interrupt alarm(__CPPARGS) { BEEP(); printf("Stop"); } |
08.04.2011, 15:37 | #2 |
Старожил
Регистрация: 03.01.2011
Сообщений: 2,508
|
> Нет и звукового сигнала ...
в ДОС запускали? Или по-старинке, всё под виндой?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
|
08.04.2011, 15:43 | #3 |
Пользователь
Регистрация: 12.05.2010
Сообщений: 61
|
Запускал по старинке, и запускал в DosBox
Но! Проблема, видимо, не в звуке. Программа не устанавливает свой обработчик прерывания (иначе звука бы не было, но "Стоп" бы выводился). |
08.04.2011, 16:17 | #4 |
Пользователь
Регистрация: 12.05.2010
Сообщений: 61
|
Кстати, пробую "обнулить" будильник в CMOCE, но ничего не получается
Код:
|
08.04.2011, 16:22 | #5 |
Пользователь
Регистрация: 12.05.2010
Сообщений: 61
|
Выдержка из лекции: "Доступ к часам реального времени возможен либо через ячейки CMOS-памяти (используя порты 70h и 71h), либо через специальные функции BIOS (прерывание 1Ah BIOS), что более предпочтительно с точки зрения независимости работы программы от особенностей аппаратуры."
Если обращаюсь к CMOS-памяти используя порты 70h и 71h, значения ячеек будильника меняется, но будильник не работает, если используя специальные функции BIOS (прерывание 1Ah BIOS) значения ячеек не меняется и соответственно будильник не работает. |
08.04.2011, 16:44 | #6 |
Пользователь
Регистрация: 12.05.2010
Сообщений: 61
|
Может быть всё дело в защищенном режиме винды?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Тестированья звукового адаптера | managerbp | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 3 | 19.03.2011 20:25 |
Спектр звукового сигнала вейвлетами | Krendel' | Мультимедиа в Delphi | 1 | 23.12.2010 07:54 |
спектр звукового файла | serg87i | Общие вопросы C/C++ | 1 | 06.11.2010 21:01 |
Создание звукового движка | varvara16 | Общие вопросы Delphi | 5 | 25.07.2008 00:18 |
воспроизведение звукового сигнала | rus-4-ever | Мультимедиа в Delphi | 9 | 01.02.2008 22:49 |