Аппаратное обеспечение персонального компьютера




Программа RTCALARM - часть 3


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

  // будильник.

  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);

 

  return 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

// ----------------------------------

void 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();




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