Ewgen » 06 окт 2010, 17:17
Проверка на возможность ввода информации по шине данных AD0-AD7 на четырёх
разных AT и ATX компьютерах. (контакты 2,3,4,5,6,7,8,9 разъёма DB-25, LPT-порт)
1. Войти в BIOS, установить режим EPP 1,7 или EPP, определить базовый адрес
LPT-порта (обычно BASE = 378h) и запустить компьютер.
2. Прочитать значение регистра управления (CR) по адресу BASE+2 (например 37Ah)
и сохранить. Например на языке программирования QBASIC:
a=INP(&H37A) ' присвоить переменной "a" значение регистра управления
PRINT a ," десятичное значение "; 'вывод на монитор
PRINT HEX$(a)," шеснадцатеричное"
3. Для переключения шины данных в режим ввода установить бит 5, регистра
управления 37Ah , в "1":
OUT(&H37A),32
4. Измерить напряжение на линиях шины данных AD0 - AD7. На всех линиях будет
около 4.2 - 4.4 В. (контакты 2-9 разъёма DB-25, порта LPT)
(на одном из древних компьютеров шина данных переключилась в состояние высокого
входного сопротивления )
5. Прочитать состояние шины данных AD0 - AD7:
d=INP(&H378)
PRINT d ;" десятичное "; HEX$(d);" шестнадцатиричное"
Оно будет равным 255 в десятичном виде или FF в шестнадцатиричном.
6. Соединить с общим проводом одну из линий шины данных через
резистор в 200 Ом и прочитать состояние шины данных:
DO
d=INP(&H378)
PRINT d , HEX$(d)
LOOP WHILE INKEY$ = ""
В зависимости от номера линии данных, соединенной через резистор в 200 Ом
на общий провод на экране будет значение
линия AD0 254 FE
линия AD1 253 FD
линия AD2 251 FB
линия AD3 247 F7
линия AD4 239 EF
линия AD5 223 DF
линия AD6 191 BF
линия AD7 127 7F
---------------- 255 FF
7. Измерить напряжение на этой линии, соединённой с общим проводом через
резистор 200 Ом.
Оно будет в пределах 0.1 - 0.6 В.
Это означает что шина данных в состоянии ввода
Если напряжение около 2,5 Вольт или больше, то шина данных находится в
обычном состоянии вывода.
8. Вычислить ток текущий через резистор (разделить измеренное напряжение
на 200 Ом). Ток через резистор можно измерить и мультиметром, вкючив его
последовательно с резистором (ни в коем случае не замыкайте выходы
параллельного порта на корпус и не соединяйте выходы LPT-порта напрямую
между собой )
9. Восстановить старое значение регистра управления 37Ah:
OUT(&H37A),a ' восстановить значение регистра BASE+2
END
Если вы владеете языком программирования (например QBASIC) то у вас должно
получиться. Скопируйте программу в текстовый файл, присвойте ему расширение bas,
откройте файл из среды QBSIC или QB45 и клавишей F5 запустите.
Каждое соединение сопровождается звуком разного тона.
Если сообщения на экране не читаются, подредактируйте текст,
перепишите выводмые строки в кавычках за командой PRINT.
SCREEN 11
PRINT " ТЕСТИРОВАНИЕ LPT-ПОРТА НА ВОЗМОЖНОСТЬ ВВОДА ПО ЛИНИИ ДАННЫХ"
PRINT " Поочерёдно соединяйте линии 2 - 9 разъёма DB-25 LPT"
PRINT "с общим проводом через резистор 160 - 200 Ом"
PRINT " РЕГИСТР УПРАВЛНИЯ БЫЛО"
DEFINT A-Z
a37A = INP(&H37A)
PRINT "37Ah ",
w = a37A
GOSUB b1
kl$ = ""
OUT (&H37A), 32
PRINT " РЕГИСТР УПРАВЛНИЯ СТАЛО"
a37 = INP(&H37A)
PRINT "37Ah ",
w = a37
w$ = ""
GOSUB b1
DO
LOCATE 10, 1
PRINT " РЕГИСТР ДАННЫХ"
PRINT "378h",
kl$ = INKEY$
IF kl$ <> "" THEN
OUT (&H37A), a37A
PRINT
PRINT " РЕГИСТР УПРАВЛЕНИЯ ВОССТАНОВЛЕН "
a37A = INP(&H37A)
PRINT "37Ah",
w = a37A
w$ = ""
GOSUB b1
END
END IF
a = INP(&H378)
w = a
w$ = ""
GOSUB b1
LOOP
b1:
zn = w
FOR c = 7 TO 0 STEP -1
x = 2 ^ c
IF w >= x THEN
w$ = w$ + "1"
END IF
IF w < x THEN
w$ = w$ + "o"
SOUND 500 + c * 100, 1
END IF
IF w >= x THEN w = w - x
NEXT c
PRINT w$; " "; HEX$(zn), zn
RETURN