Аппаратное обеспечение IBM PC



         

Использование часов реального времени - часть 3


// Для установки будильника увеличиваем // счетчик минут на единицу. Для упрощения // программы мы не проверяем счетчик на // переполнение, поэтому если текущее // значение счетчика минут равно 59, // будильник не сработает. Вы можете сами // немного усовершенствовать программу для // проверки переполнения.

bin1bcd(bcd1bin(&(tmr.min)) + 1, &(tmr.min));

// Выводим на экран время, когда сработает // будильник.

printf("\nВремя срабатывания будильника" "- %02.2d:%02.2d:%02.2d" "\n", bcd1bin(&(tmr.hour)), bcd1bin(&(tmr.min)), bcd1bin(&(tmr.sec)));

// Подключаем свой обработчик прерывания // будильника, старое значение вектора // 0x4a сохраняем

old_4a = _dos_getvect(0x4a);

_dos_setvect(0x4a, alarm);

// Устанавливаем будильник

timer(RTC_SET_ALARM, &tmr);

printf("\nБудильник установлен. Для отмены " "и завершения программы нажмите" "\nлюбую клавишу...");

getch();

// Сбрасываем будильник и восстанавливаем // вектор прерывания будильника

timer(RTC_CLEAR_ALARM, &tmr);

_dos_setvect(0x4a, old_4a);

exit(0); }

// ---------------------------------- // Преобразование однобайтового // числа из формата BCD в двоичный // формат. // ----------------------------------

int bcd1bin(char *bcd) {

return( ((*bcd) & 0x0f) + 10 * (((*bcd) & 0xf0) >> 4) );

}

// ---------------------------------- // Преобразование двухбайтового // числа из формата BCD в двоичный // формат. // ----------------------------------

int bcd2bin(char *bcd) {

return( bcd1bin(bcd) + 100 * bcd1bin(bcd + 1) );

}

// ---------------------------------- // Преобразование однобайтового // числа из двоичного формата // формат BCD. // ----------------------------------

int bin1bcd(int bin, char *bcd) {

int i;

i = bin / 10;

*bcd = (i << 4) + (bin - (i * 10));

}

// ---------------------------------- // Программа получает управление // при срабатывании будильника. // Ее назначение - выдать звуковой сигнал. // ----------------------------------

void _interrupt _far alarm(void) {

BEEP(); BEEP(); BEEP(); BEEP(); BEEP(); BEEP(); BEEP();

}




Содержание  Назад