Программа TIMERST
Приведем исходный текст программы TIMERST, отображающей слово состояния и содержимое счетчика для всех трех каналов таймера (листинг 5.1).
Листинг 5.1. Файл timerst\timerst.с
// =====================================================
// Просмотр слова состояния и содержимого
// счетчиков таймера
//
// (C) Фролов А.В, 1997
//
// E-mail: frolov@glas.apc.org
// WWW: http://www.glasnet.ru/~frolov
// или
// http://www.dials.ccas.ru/frolov
// =====================================================
#include <stdio.h>
#include <conio.h>
int main()
{
unsigned i;
printf("\n\nКанал 0\n-------\n");
// Читаем слово состояния канала,
// команда 0xe2 = 11100010B
outp(0x43, 0xe2);
printf("\nСлово состояния канала: %02.2X",
inp(0x40));
// Читаем текущее состояние регистра счетчика
// канала. Для этого вначале выдаем команду CLC
// для канала 0. Код этой команды - 0x00
outp(0x43, 0x00);
// Вводим младший и старший байты счетчика
// и отображаем его.
i = inp(0x40);
i = (inp(0x40) << 8) + i;
printf("\nРегистр счетчика: %04.4X",i);
// Повторяем те же действия для 1 и 2 каналов.
printf("\n\nКанал 1\n-------\n");
outp(0x43, 0xe4);
printf("\nСлово состояния канала: %02.2X",inp(0x41));
outp(0x43, 0x40);
i = inp(0x41);
i = (inp(0x41) << 8) + i;
printf("\nРегистр счетчика: %04.4X",i);
printf("\n\nКанал 2\n-------\n");
outp(0x43, 0xe8);
printf("\nСлово состояния канала: %02.2X",inp(0x42));
outp(0x43, 0x80);
i = inp(0x42);
i = (inp(0x42) << 8) + i;
printf("\nРегистр счетчика: %04.4X",i);
return 0;
}