Как я уже говорил, у lpt порта есть 8 основных выходов - выводы 2-9.
Управлять ими не сложно, нужно просто посылать в порт определенное
число: 1 выход - 1 2 выход - 2 3 выход - 4 4 выход - 8 5 выход - 16 6 выход - 32 7 выход - 64 8 выход - 128 Чтобы
запитать первый выход, нужно послать в порт единицу. Чтобы запитать
пятый посылаем 16 и тп.. Ноль посланный в порт "погасит" все выходы, а
число 256 запитает все сразу.
Сразу напрашивается вопрос - как запитать несколько выходов сразу.
Ответ - просто сложить коды выходов: Например, нам нужно запитать выходы
3, 6 и 8, берем и складываем коды этих выводов: 4+32+128=164,
посылаем в порт число 164. Так, а теперь погасим один из выходов...
например, 6. Сейчас на порт у нас послано 164, отнимем от этого код
шестерки(32). Считаем 164-32=132, посылаем в порт число 132 и 6й выход гаснет.
Сложно? Тогда ещё вариант без вычислений вобще: Берем
обычный калькулятор из windows(calc.exe), выбираем инженерный вариант в
меню "вид". Переходим на двоичную систему (bin). Так, теперь если нам
нужно запитать выходы 3 и 5: распологаем выходы по порядку от 8 до 1 8-7-6-5-4-3-2-1 теперь заменяем всё, что нужно запитать, на 1, а что должно быть погашено - на 0. 0-0-0-1-0-1-0-0 вводим
в калькулятор полученую комбинацию 00010100 и переключаемся назад на
десятичную систему(Dec), введеное нами число меняется на 20. Значит,
чтобы запитать выходы 3 и 5 нам нужно послать в порт число 20.
Практика:
Для того чтобы послать в порт какое-то число, нужно знать базовый адрес порта. Обычно первый LPT порт находится по адресу 378.
Адрес знаем, попробуем послать туда что-нибудь. Для примера возьмем
Pascal. Новички, не пугайтесь, язык очень простой. Профи, не ругайтесь -
он ещё не слишком стар и для доса писать на нем очень удобно. Uses Dos; Var data:byte; {переменная DATA типа byte} Begin Readln(data); {читаем переменную -ввод ентером} Port[378]:=data; {посылаем в порт} End.
Если этот код набрать в Pascal 7.0 и скомпилировать, то получим
простейшую программу для управления портом. В программе нужно ввести
нужное число и нажать Enter. Прога пошлет введеное число в порт и
закрется.
Чтобы узнать какое число сейчас присвоено порту (что там сейчас лежит) можно использовать такой код: Uses Dos; Var data:byte; {переменная DATA типа byte} Begin data:=Port[378]; {читаем значение порта} writeln(data); {выводим на экран полученое значение} End.
Это был пример на Pascal и работать он будет под DOS. В Win9x программа откроется в окне, в режиме эмуляции MSDOS.
Если такой вариант не устраивает и знания позволяют программировать
на Delphi, вот пример управления портом из Delphi.Стандартных функций
для работы с портом я не нашел и использовал вставки на ассемблере: asm MOV DX,0378H MOV AL,data //data - то, что послать. OUT DX,AL end;
Этот код можно вставить в программу предварительно присвоив переменной data нужное значение.
Думаю, что этого пока хватит. Для экспериментов советую собрать
простую линейку из светодиодов описаную в статье "Примеры схем для LPT",
так будет проще понять что происходит.
|