| ||
|
|||||||||
Cайт и форум для электриков HARDW.net |
Основы программирования LPT для DOS и Win9xКак и обещал, попробую рассказать про программирование LPT порта. Почти все описаные ниже примеры будут работать только в DOS и Win9x. В системах WinNT, Win2K и WinXP это работать не будет, тк. они не разрешают напрямую общаться с портом. Теоретическая часть одинакова для всех систем. Теория: Как я уже говорил, у lpt порта есть 8 основных выходов - выводы 2-9. Управлять ими не сложно, нужно просто посылать в порт определенное число: Сразу напрашивается вопрос - как запитать несколько выходов сразу. Ответ - просто сложить коды выходов: Например, нам нужно запитать выходы 3, 6 и 8, берем и складываем коды этих выводов: 4+32+128=164, посылаем в порт число 164. Так, а теперь погасим один из выходов... например, 6. Сейчас на порт у нас послано 164, отнимем от этого код шестерки(32). Считаем 164-32=132, посылаем в порт число 132 и 6й выход гаснет. Сложно? Тогда ещё вариант без вычислений вобще: Практика: Для того чтобы послать в порт какое-то число, нужно знать базовый адрес порта. Обычно первый 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 Просмотров сегодня: 5053, всего: 5053 |
|
|||||||||
| |||||||||
|