Раздел: Документация
0 ... 11 12 13 14 15 16 17 ... 105 X-AXIS А(3) : Y-AXIS А(6) : Y-AXIS В(11): СЗ ЮнФ - Y-AXIS В(1 3) >-1 -< wftlte games POF?t + 5В + 5В
- нФ T" L- GND (4) GND (5)
Кнопка 1 A(2)>-Кнопка 2 A(7)>-Кнопка 1 В(Ю) >-Кнопка 2 B(14) >- + 5B (1)*4 + 5B (9)-*-l Примечоние DD1-4 NE555 DD5 74LS244 Все незогрузочнае резистора 4,7к0м rM> Games PorT Шино донньх DD5o Ar Y 16 DO 16 d1 . 14 D2, 12 D3 15 17 DD5a A->Y
Рис. 1.12. Внутренняя блок-схемо типового игрового порта подключены к питанию +5 В через нагрузочные резисторы. Порт имеет адрес 201 п. Функции битов порта приведены ниже: ВВ2 ВВ1 ВА2 ВА1 BY BX AY АХ ВВ2, ВВ1, ВА2 и ВА1цифровые входы BY, BX, AY и AXаналоговые выходы Метод измерения сопротивления основан на программном определении длительности импульса, пропорционального сопротивлению. Преобразование начинается после вывода любого байта в регистр порта (201п), при этом биты 0-3 устанавливаются в 1. Время измеряется до возврата в нулевое состояние битов 0-3, Компьютер
Аналого&ае бхода АХ Игро&ой порт ПК 15 -контактный енездабой разьем D-muna Рис. 1.13. Логическая структура игрового порта соотнесенных с четырьмя аналоговыми каналами. Если аналоговый вход закорочен на «землю» или цепь измеряемого сопротивления разорвана, соответствующий бит не обнулится. Поэтому в программе преобразования должен быть предусмотрен тайм-аут. Взаимосвязь временного интервала и подключенного сопротивления характеризуется следующей формулой: Сопротивление (Ом) - Временной интервал - 24,2 мкс . v 0,011 Временной интервал изменяется в пределах от 24,2 мкс для пулевого сопротивления до 1124 мкс для максимального (100 кОм). Однако погрешности внутреннего конденсатора и резистора делают формулу неточной. На практике необходимо производить калибровку, которая включает в себя измерение интервалов времени, когда входное сопротивление близко к нулю или равно 100 кОм. 1.3.3. Программное управление В языке программирования QBASIC существуют два оператора, предназначенные для игрового порта, - STICK(x) и STRIG(x). Оператор STICK(x) может принимать значения 0-3 и используется для чтения информации с потенциометров X и Y джойстиков А и В. Х=0 считывает Х-координату джойстика А Х=1 считывает Y-координату джойстика А Х=2 считывает Х-координату джойстика В Х=3 считывает Y-координату джойстика В Применяя эту команду, необходимо сначала вызвать STICK(O), а затем STICK(1), STICK(2) и STICK(3). Функция STICK возвращает значение координаты, которое изменяется от 6 (нулевое сопротивление) до 150 (сопротивление 100 кОм). STRIG(x) возвращает -1, если условие верно; в противном случае функция возвращает 0. X может принимать значения от 0 до 7 и используется для выбора определенного состояния кнопки джойстика. Х=0 Первая кнопка джойстика А была нажата с момента последней команды STRIG(O) Х=1 Первая кнопка джойстика А была только что нажата Х=2 Первая кнопка джойстика В была нажата с момента последней команды STRIG(2) Х=3 Первая кнопка джойстика В была только что нажата Х=4 Вторая кнопка джойстика А была нажата с момента последней команды STRIG(4) Х=5 Вторая кнопка джойстика В была только что нажата Х=6 Вторая кнопка джойстика А была нажата с момента последней команды STRIG(6) Х=7 Вторая кнопка джойстика В была только что нажата Следующая программа на языке QBASIC выводит на экран координаты X и Y джойстика А и показывает состояния двух кнопок. 10 dummy=STICK(0) 20 print Coordinate of X , STICK(O) 30 print Coordinate of Y ,STICK(1) 40 print Current status of 1st button STRIG(1) 50 print Current status of 2nd button ,STRIG(5) 60 end Функция на языке TP6, приведенная ниже, возвращает состояние конкретного бита, определенного переменной Bitx. Содержимое регистра игрового порта счи-тывается в компьютер и присваивается переменной Input byte. Затем состояние конкретного бита определяется наложением маски на считанный байт. (♦-Библиотека ресурсов № А14 (чтение регистра игрового порта) -*) Function read game port(bitx integer) integer, («Адрес игрового порта 201h Bitx (1-8) выбирает состояние АХ, AY, ВХ, BY, ВА1, ВА2, ВВ1 и ВВ2 «) var input byte byte begin input byte =port($201), read game port =round((input byte and bit weight(bitx))/bit weight(bitx)), end, Чтобы определить величину сопротивления, необходимо записать байт в порт 201h для запуска одновибратора. Соответствующий бит в регистре порта становится единицей. Нужно постоянно опрашивать этот бит, пока он снова не станет нулем. В результате получим требуемый временной интервал. Наиболее удобно измерять временной интервал с помощью третьего счетчика/таймера 8253/8254 внутри компьютера, который можно настроить как независимый таймер с обратным отсчетом времени. Если в счетчике записано число 255, его значение обнуляется 0 ... 11 12 13 14 15 16 17 ... 105
|