RadioNet
Search datasheet  
RadioNet
РЕЙТИНГ ТЕНДЕРЫ ИССЛЕДОВАНИЯ DATASHEETS КАТАЛОГ СХЕМ СХЕМЫ ФОРУМ ДОСКА ОБЪЯВЛЕНИЙ
  ПОИСК ПО САЙТУ
  Опции:    
  ВХОД
 Логин:
 Пароль:
Забыли пароль?
 
WEB-RING CHIPINFO: электроника, электронные компоненты иприборы.

Cайт и форум для электриков
HARDW.net

Основы программирования LPT для DOS и Win9x


Как и обещал, попробую рассказать про программирование LPT порта. Почти все описаные ниже примеры будут работать только в DOS и Win9x. В системах WinNT, Win2K и WinXP это работать не будет, тк. они не разрешают напрямую общаться с портом. Теоретическая часть одинакова для всех систем.

Теория:

Как я уже говорил, у 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", так будет проще понять что происходит.


Источник: zps-electronics.com


Основы программирования LPT для DOS и Win9x
Просмотров сегодня: 5046, всего: 5046
РЕЙТИНГ ТЕНДЕРЫ ИССЛЕДОВАНИЯ DATASHEETS КАТАЛОГ СХЕМ СХЕМЫ ФОРУМ ДОСКА ОБЪЯВЛЕНИЙ


Copyright © 2002-2021 RadioNet Admin

Страница создана за 0,01168 секунд.