110 FOR F=1 TO LEN(A$)
120 IF MID$(A$,F,1)="{" THEN 300
130 V=VAL(MID$(A$,F,1))
140 C$=C$+CHR$ (V)
150 NEXT F
160 L=0
170 FOR F=1 TO LEN(C$)
180 L=L XOR ASC(MID$(C$,F, 1))
190 NEXT F
200 PRINT "LRC ="
210 IF L=11 THEN PRINT "{start}": GOTO 280
220 IF L=13 THEN PRINT "{sep)": GOTO 280
230 IF L=15 THEN PRINT "{end}": GOTO 280
240 IF L=10 THEN PRINT "{10}": GOTO 280
250 IF L=12 THEN PRINT "{12}": GOTO 280
260 IF L=14 THEN PRINT "{14}": GOTO 280
270 PRINT L
280 END
300 F=F+1
310 IP MID$(A$,F,1) = "1" THEN 340
320 IF MID$(A$,F,1) = "s" THEN 390
330 IF MID$(A$,F,1)="e" THEN C$=C$+CHR$ (15): F=F+3: GOTO 430
340 F=F+1
350 IF MID$(A$,F, 1) = "0" THEN C$=C$+CHR$(10): F=F+1: GOTO 430
360 IF MID$(A$,F,1) = "2" THEN C$=C$+CHR$(12): F=F+1: GOTO 430
370 IF MID$(A$,F,1) = "4" THEN C$=C$+CHR$(14): F=F+1: GOTO 430
380 GOTO 130
390 F=F+1
400 IF HID$(A$,F,1) = "t" THEN C$=C$+CHR$ (11): F=F+4: GOTO 430
410 IF MID$ (A$,F, 1) ="e" THEN C$=C$+CHR$ (13): F=F+2: GOTO 430
420 CLS: PRINT "Ошибка!": BEEP: END
430 IF MID$(A$,F, 1)<>")" THEN 420
440 GOTO 150
450 REM (c)1996 Patrick GUEULLE
После двойного нажатия на клавишу
Как и все магнитные носители, карты могут стираться практически неограниченное число раз. Самый простой способ стереть карту — произвести новую запись, которая затрет предыдущие данные.
Однако общее стирание рекомендуется делать в любом случае, поскольку из-за несоответствия стандартам, например минимального несоответствия высоты воздушного зазора или небольшого смещения положения записывающей головки, существует опасность того, что часть старых данных не перекроется новыми.
При этом возможна ситуация, когда карта будет нормально считываться на одних считывающих устройствах и неправильно — на других. Может также возникнуть необходимость убрать некоторые данные, относящиеся к разряду конфиденциальных, например расположенных на дорожках ISO 1 и ISO 3, карты, которая используется повторно и запись на которую будет вестись только на дорожке ISO 2.
Наиболее надежно стирается вся информация с дорожек карты при помощи простого постоянного магнита. По крайней мере, это относится к картам с низкой коэрцитивностью (
Оптимальный порядок действий состоит в том, чтобы положить карту на стальной лист (автор данной книги воспользовался корпусом блока питания для кодера) и к нему через карту приставить мощный магнит.
Необходимо один или несколько раз провести магнитом вдоль всей магнитной полосы, но так, чтобы он проходил по всем дорожкам. Если вы боитесь, что магнит может поцарапать карту, то из предосторожности на нее следует положить лист бумаги.
Естественно, проверка с помощью «магнитного разоблачителя» позволит лучше, чем попытка повторного считывания, убедиться в эффективности проведенной операции. Для более специфических случаев, скажем стирания единственной дорожки, можно построить стирающее устройство, которое будет очень похоже на кодер: головка будет питаться постоянным током, полярность которого значения не имеет. В случае головок с сопротивлением 300–500 Ом прямое подключение к напряжению 5-12 В будет достаточным.
5. Приложения
Описываемые программы были созданы так, чтобы они могли работать со считывающими устройствами и кодерами, подключенными к свободным портам ввода-вывода любого IBM PC-совместимого ПК.
Допустимо расширить состав портов ввода-вывода компьютера за счет установки дополнительной мультикарты в свободный слот. Таким образом можно добавить параллельный порт LPT2 к существующему LPT1, традиционно зарезервированному для принтера, или снабдить компьютер разъемом для подключения джойстика. Чтобы избежать конфликта адресов и прерываний с уже имеющимися портами, следует сконфигурировать переключатели карты с помощью прилагаемого описания. Если конфликты все же возникают, для их устранения потребуется использование диагностической утилиты MSD, которая позволит точно определить причину конфликтной ситуации и укажет, как исправить положение.
Возможно, некоторые читатели захотят пойти дальше по предложенному пути, например снабдить кодер оптическим датчиком или воспользоваться усилителем считывания, приведенным на рис. 3.15, в качестве детектора присутствия карты. Кое-кто попытается при наличии достаточно быстродействующего ПК построить двухдорожечное считывающее устройство или кодер, работающий с плотностью 210 bpi. В любом случае необходимо хорошее знание технических и программных характеристик используемых портов ввода-вывода.
В данном приложении мы собрали воедино информацию, касающуюся портов, которая часто «разбросана» по документации и, следовательно, труднодоступна. Такая информация поможет тем из наших читателей, кто захочет полностью разобраться в исходных текстах представленных программ.
На самом деле нам нечего скрывать, хотя надо напомнить, что программы и схемы, которыми читатели управляют, должны применяться исключительно в личных или экспериментальных целях. Любое использование программ в профессиональных или коммерческих целях в соответствии с законом требует согласия со стороны автора.
Несколько замаскированных «реперных точек» всегда позволят выявить возможные копии наших программ.
Порт джойстика
Данный разъем, предназначенный для игровой приставки, представлен на рис. 5.1. Он имеет 15 контактов, среди которых четыре входа логических сигналов (для подключения кнопок), четыре аналоговых входа (для потенциометров) и четыре линии питания +5 В.
Рис. 5.1.
Опрос этих восьми входов производится простым считыванием порта 201h (или 513 в десятичной системе), назначение его восьми разрядов представлено на рис. 5.2.
Рис. 5.2.
Аналоговые входы, взаимодействие с которыми осуществляется в соответствии с достаточно сложной процедурой, нам не пригодятся, поэтому клетки, соответствующие разрядам
Разряды
Параллельные порты
Хотя порт джойстика также можно назвать параллельным (потому что данные поступают в параллельном коде), этот термин традиционно закреплен за портами принтера, носящими общее название
На рис. 5.3 показано назначение выводов розеток типа DB25, используемых для данного интерфейса. Не следует путать их с вилками DB25 последовательных портов RS232, которые еще встречаются наряду с разъемами типа DB9 (СОМ1 — COM4).
Рис. 5.3.
Все ПК имеют первичный параллельный порт, названный LPT1, нередко можно встретить компьютеры, имеющие и второй порт — LPT2.
Вполне естественно подключать принтер к LPT1, а для других, менее часто используемых аксессуаров, воспользоваться LPT2. Информационный доступ процессора к каждому параллельному порту осуществляется через программно-доступные регистры, которые располагаются в адресном пространстве ввода-вывода. Каждому порту соответствуют 4 последовательных логических адреса: BASE, BASE+1, BASE+2, BASE+3. В табл. 5.1 представлены возможные значения адресов.
Таблица 5.1.
Регистры с адресами BASE+3 используются для управления режимами работы соответствующего порта. Их содержимое определяет конфигурацию и режимы работы порта, ими нельзя манипулировать без хорошего знания принципов функционирования параллельного интерфейса.
Для передачи данных используются регистры данных, которым соответствуют базовые адреса (BASE). Соответствие разрядов регистров данных и разрядов данных показано на рис. 5.4. Обычно регистры данных применяются для вывода информации из порта, то есть процессор может только записывать в них информацию.
Рис. 5.4.
Регистр с адресом BASE+1, наоборот, доступен процессору только для чтения. Считанный байт несет так называемую информацию состояния порта (status). Назначение разрядов байта состояния представлено на рис. 5.5. Отметим, что три младших разряда (
Рис. 5.5.