Программирование порта lpt в vba - Новости с мира ПК
Vvmebel.com

Новости с мира ПК
11 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программирование порта lpt в vba

Программирование порта lpt в vba

Добавление от 18.01.2003 19:47:

сорри. Прочитал про W2000. Тогда — ч-з int17. Но отвечать на strobe надо busy.

Добавление от 18.01.2003 20:43:

Сейчас вот попробовал под 98, так через порты всё работает ОК. Кстати, под 2000 и ХР через порты тоже всё работает, только задержка около 10-20 сек, как и через int17h. Я просто сразу не заметил. Итак, резюме: старые Винды — ОК, новые — задержка около 15 сек. Ну и кто пробовал программировать LPT под XP и 2000, что скажете?

Maxim T
Программирование LPT ничем не отличается от программирования 8-разрядного устройства ISA. Драйвер писать надо.

Если ты ни разу не сталкивался с написанием драйверов для NT, то рекомендую тебе почитать книгу «Язык ассемблера: уроки программирования» авторы П.И.Рудаков и К.Г.Финогенов, выпущена издательством Диалог-МИФИ в 2001 году. Не смотря на свою стоимость около 250 рублей в этой книге на её 640 страницах содержится много просто бесценной информации (в том числе подробно описано создание драйвера для управления аппаратурой через порты под Windows NT/2000) и это её сильное отличие от того множества мукулатуры, которым сейчас в основном забиты полки книжных магазинов.

После того, как STROBE стал активным, внешнее устр-во должно ответить по BUSY, только тогда по протоколу комп может снять STROBE и начинать передачу след. байта. Возможно, не видя реакции на STROBE, он не понимает, получил ли _принтер_ данные и ждет, пока timeout не придет. Возможно, это как раз 10-15сек.
Это все — насколько я помню. Давно было.

кекс
А про книгу — интересно. Возможно, скоро понадобится

Sergey_G.
Упоминая о ISA я имел ввиду именно SPP, потому как в режимах ECP (EPP) передача осуществляется через DMA. А программирование DMA под NT это уже задача требующая определённого уровня знаний.

Maxim T
Но ведь всякие старые ДОС-программы должны же нормально работать и под 2000
А каким образом Вы собираетесь запускать 16 разрядное приложение из под 32 разрядной ОС к числу которых относится W2K ?

Maxim T
Скорее всего, в W98 ядро out не перехватывает, и полагается на то, что пользовательская программа сама будет следить за протоколом обмена. А W2000 пытается умничать. Попробуй подключить BUSY к STROBE ч-з 1 или 2 последовательных инвертора (не помню, какие там уровни) — чтобы при активации STROBE (вроде, активный 0), через некоторое время выставлялся BUSY (вот про его активный уровень не помню)

кекс
EPP вроде DMA не использует. Он просто двунаправленный и оптимизированный. Вот ECP — да.

Исчерпывающую информацию (не по W2000, а про порты) можно взять до среды здесь: www.dvor.ru/lpt.zip

Maxim T
Насколько я уверен (потому что моя програмулька весит 52 байта), под 2000 происходит перехват инструкции OUT.
Естественно.
Если не сложно, подскажите сайты по ECP-EPP программированию.
Не помню. Когда мне надо было, нашел через яндекс через характерные слова LPT, порт, STROBE и тд.
Непонятно, почему моё устройство должно отвечать по BUSY
Это в режиме SPP BUSY, а в EPP это называется по-другому, READY вроде бы.

кекс
А программирование DMA под NT это уже задача требующая определённого уровня знаний.
Не проще ли использовать стандартный драйвер?

По программированию SPP/EPP/ECP были ссылки в темах «полезные ссылки» и «подключение к компу аппаратуры собственного производства», в частнгости www.lvr.com и www.beyoundlogic.com. Наиболее полный библиотека см www.fapo.com но стоит денег. Стандартный драйвер использовать не проще, так как EPP он вероятно вообще не знает, чтобы выставить ECP надо последовательность согласования, обратится непосредственно к линиям не даст и т.д. Возможно что то хитрое на нем и можно сделать через DeviceIoControl, но разобратся в нем пока не удалось. Самый простой способ получается использовать драйверы доступа к портам. Их два типа-первый что то правит в дескриптере приложения, в результате программа получает права доступа к портам, при обращении возникает системное исключение, но на экран не выводится. Это giveio.sys и totalio.sys. Win98 при обращении к порту работает через такой механизм. И полноценный драйвер, типа Dlportio и т.д. Maxim T, ничего не путаешь? В нормальной Win2k любые попытки int17h, обращения к портам и тем более памяти караются немедленным Access Violation и снятием задачи. Вероятно они и происходят в твоей программе(отсюда и задержки), но каким то чудом она продолжает выполнение.

цитата:
NTPort Library
Version 2.5 Release Date: December 10, 2002

Platform: Windows 95, Windows 98, Windows Me, Windows NT 3.5/4.0, Windows 2000, Windows XP

NTPort Library enables your Win32 applications to real-time direct access to PC I/O ports without using the Windows Drivers Development Kit(DDK). NTPort Library is easy to use. Under Windows NT/2000/XP, NTPort Library driver can be load and unload dynamically, so you need not any configuration. NTPort Library is also an ideal replacement of old BASIC INP or OUT statement. This tool also supports getting the base address of LPT ports. Visual Basic, Visual Basic.NET, Visual C#, Visual C+, Delphi, Borland C++ Builder samples are included. Matlab, Borland C++, Visual Fortran and InstallShield samples are available for download.

оно работает, правда шароварно
а вообче темы записи в порты в немалом кол-ве были в разделе Программирование

200K, в нём есть примеры на C и VB для работы с LPT. Я писал программку для работы под Win2000, всё работает и пишет в порт и читает. Если интересно могу выслать то, что у меня получилось.

Программирование порта lpt в vba

Программирование порта LPT в Visual Basic. Использование принтерного порта для управления внешними устройствами.

Д. ЗАХАРОВ, г. Прокопьевск Кемеровской обл.

Овладев управлением интерфейсными портами компьютера, радиолюбитель может подключать к ним различные сигнальные и исполнительные устройства и датчики, превращая компьютер в центр управления бытовой электроникой, системой охраны квартиры или в измерительный прибор. Наиболее привлекателен для начинающего параллельный порт LPT, исходно предназначенный для подключения к компьютеру принтера. Отсюда происходит и аббревиатура LPT — Line Printer Terminal (первые принтеры печатали информацию «line by line» — построчно). Позже область применения этого порта значительно расширилась, к нему стали подключать самые разные периферийные устройства. К сожалению, сегодня его (как, впрочем, и другие порты компьютера) постепенно вытесняет быстродействующая универсальная последовательная шина USB.

Разъем порта LPT на системном блоке компьютера — 25-контактная розетка DB-25F. На ее контакты можно подавать и снимать с них логические сигналы уровней, характерных для микросхем структуры ТТЛ. Логически низким считается напряжение 0. 0,8 В, высоким — 2,4. 5 В. Соединять выходные контакты разъема с общим проводом или с источником напряжения, не превышающего +5 В, рекомендуется только через резисторы сопротивлением не менее 300 Ом. Не допускается подавать как на входы, так и на выходы порта отрицательное напряжение или положительное более 5 В. Подключать к порту и отключать что-либо от него можно только при полностью отключенном от сети 220 В компьютере (сетевая вилка вынута из розетки). Если подключаемое устройство имеет сетевое питание, оно тоже должно быть физически отсоединено от сети.

Несоблюдение этих требований может иметь тяжелые последствия. Если расположенная внутри компьютера микросхема контроллера параллельного порта выйдет из строя, потребуется ремонт или замена материнской платы.

При включении компьютера его параллельный порт работает в режиме Centronics — простейшем и традиционном для этого порта с момента его появления в компьютерах. Иногда этот режим называют Simple Parallel Port (SPP). Более сложные режимы ЕРР и ЕСР используются, как правило, для скоростного обмена информацией с лазерными принтерами и сканерами. Мы их рассматривать не будем, потому что программирование работы с портом в таких режимах доступно лишь опытным программистам.

Читать еще:  Как программировать на c

С точки зрения программы порт LPT в режиме Centronics представляет собой три восьмиразрядных регистра в пространстве ввода—вывода микропроцессора: регистр данных DR по адресу &Н378, регистр состояния принтера SR по адресу &Н379 и регистр управления принтером CR по адресу &Н37А. Указанные адреса относятся к порту LPT1, обычно единственному в компьютере. Если в нем имеются другие параллельные порты, им также отводят по три регистра с последовательными адресами. Например, регистры порта LPT2 обычно имеют адреса &Н278—&Н27А.

Входы и выходы регистров порта (правда, не все) соединены с контактами интерфейсного разъема, как показано на рис. 1.

Поэтому, записывая в эти регистры определенные коды, можно устанавливать соответствующие логические уровни напряжения на выходных контактах разъема, а читая коды из регистров, определять уровни поданных на входы внешних сигналов.

Работать с портом LPT можно практически в любой среде программирования и операционной системе. Наиболее доступными считаются среды Visual Basic и Delphi, причем во всем, что требуется для программирования порта, они весьма схожи. Нужно сказать, что современные многозадачные операционные системы (в том числе семейства Windows) не допускают прямых обращений из прикладных программ к портам компьютера. Это сделано для того, чтобы избежать конфликтов между одновременно выполняемыми программами, если они случайно обратятся к одному и тому же порту в один и тот же момент времени. Связь с портами возможна лишь через специальные программы-драйверы, автоматически выполняющие все, что необходимо для разрешения конфликтов. Программисту остается лишь написать несколько управляющих команд.

Мы будем использовать одну из самых популярных библиотек таких программ — Inpout32.dll второй версии, которую легко найти в Интернете. Она применима в различных средах программирования и операционных системах. Работая в Windows 98, файл lnpout32.dll необходимо скопировать в папку C:Windowssystem, а в Windows ХР — в папку C:Windowssystem32. Во многих случаях достаточно просто поместить этот файл в папку исполняемой программы. Для программирования в DOS дополнительные драйверы не нужны, достаточно предусмотренных в используемом языке программирования обычных команд ввода—вывода в порт.

Дальнейшее изложение относится к работе с параллельным портом в системе программирования Visual Basic 6.0 под управлением Windows ХР. Для ее освоения разработана простая программа. Ее проект, в том числе исполняемый фаил test.exe и файл главной (и единственной) формы Form1.frm приложены к статье. При запуске этой программы на экране монитора появится окно, показанное на рис. 2.

Нажимая в нем на экранные кнопки и вводя числа в соответствующие поля, можно устанавливать уровни напряжения на выходах порта и считывать состояние его входов (оно будет отображено числом в соответствующем поле). Библиотеку для работы с портом LPT «подключает» к программе фрагмент файла Form1.frm, показанный в таблице.

Прежде всего, разберем работу с регистром управления CR (напомним, его адрес — &Н37А). В рассматриваемом случае ее выполняет подпрограмма

Private Sub Command4_click()
out &H37A, Text2.Text
End Sub

При нажатии на экранную кнопку Command4 («Отправить») она записывает в регистр по адресу &Н37А двоичный код, соответствующий десятичному числу, введенному в поле над этой кнопкой.

Для наглядности соберем и подключим к разъему LPT светодиодный узел по схеме, изображенной на рис. 3.

Введем в нужное поле число 4 (двоичное 00000100) и нажмем на кнопку «Отправить». После этого все четыре светодиода окажутся включенными. Дело в том, что разряды CR[0], CR[1] и CR[3] соединены с контактами разъема через инверторы, поэтому при записи 0 в эти разряды уровни на соответствующих им контактах стали высокими. Чтобы включить только светодиод HL3, нужно ввести число 15 (двоичное 00001111), а при вводе числа 11 (двоичное 0001011) все светодиоды будут выключены. Старшие разряды регистра управления (CR[4]—CR[7]) с контактами разъема не соединены, поэтому их состояние в данном случае никакого значения не имеет.

Чтобы изучить работу с регистром состояния SR, подключим к разъему порта узел, схема которого изображена на рис. 4.

При разомкнутых выключателях SA1—SA5 через резисторы R1—R5 на контакты разъема поступает напряжение высокого логического уровня. Его источником могут быть любой сетевой адаптер с выходным напряжением 5 В, батарея из трех гальванических элементов и даже один из выходов порта LPT, на котором описанным ранее способом установлен нужный уровень напряжения. Во многих компьютерах резисторы, по назначению аналогичные R1— R5, уже имеются, в установке внешних резисторов в таких случаях нет необходимости.

При нажатии на экранную кнопку «Принять» будет выполнена подпрограмма

Private Sub Command5_c1ick()
Text3.Text = Inp(&H379)
End Sub

Она выведет в поле над кнопкой число, отображающее содержимое регистра SR. Если все выключатели (рис. 4) разомкнуты, это будет 126 (двоичное 01111110), а если они замкнуты — 134 (10000110). Значения разрядов SR[3]— SR[6] соответствуют уровням, поданным на соответствующие контакты разъема, а значение разряда SR[7] инверсно уровню на контакте 11. Так как младшие разряды SR[0]—SR[2] на разъем не выведены, их значения не зависят от поданных на его контакты сигналов.

Главный регистр порта — регистр данных DR по адресу &Н378. Именно через него печатаемая информация побайтно передается на принтер. Все восемь разрядов регистра соединены с контактами разъема, причем без инверторов. Эти восемь цепей часто объединяют названием «шина данных». В исходном состоянии она работает только на вывод. Однако почти во всех современных компьютерах имеется возможность переключить ее на параллельный ввод восьмиразрядных двоичных кодов. Для этого достаточно записать единицу в разряд CR[5] регистра управления.

К сожалению, в режиме Centronics никакие сигналы о том, в каком направлении работает шина данных порта LPT, на его разъем не выводятся. Поэтому необходимо соблюдать особую осторожность и подавать на эту шину внешние сигналы, только удостоверившись, что ее программное переключение «на прием» выполнено. Иначе могут быть повреждены интерфейсные микросхемы как самого компьютера, так и подключенного к порту источника сигналов. Этот недостаток устранен в режимах ЕРР и ЕСР, где предусмотрен полный набор сигналов управления направлением передачи информации по шине данных параллельного порта.

В рассматриваемой тестовой программе с регистром данных работает подпрограмма

Private Sub Command3_Click()
Out &H378, Text1.Text
Text1.Text = Inp(&H378)
End Sub

При нажатии на экранную кнопку «OK» она записывает в регистр данных число из поля, находящегося над кнопкой, а затем читает содержимое регистра и отображает его в том же поле. Естественно, если регистр работает как выходной (на экране отмечен пункт «Передача»), число в поле остается прежним. Чтобы убедиться, что логические уровни на контактах 2—9 разъема порта в этом случае соответствуют введенному в поле вручную и записанному в регистр данных числу, подключите к разъему узел, аналогичный тому, схема которого показана на рис. 3, но с увеличенным до восьми числом светодиодов и резисторов.

Операцию переключения шины данных на ввод выполняет подпрограмма

Private Sub Option1_Click()
Out &H37A, 32
End Sub

Ее вызов происходит при нажатии на экранную кнопку с зависимой фиксацией «Прием». Кнопкой «Передача» вызывают аналогичную подпрограмму, отличающуюся лишь тем, что она записывает в регистр управления не 32 (двоичное 00100000), а ноль, возвращая таким образом шину данных в режим вывода.

Когда шина данных переведена в режим ввода, процедура Out в рассмотренной ранее подпрограмме, вызываемой при нажатии на кнопку «ОК», фактически не работает. Однако функция Inp возвращает значение, соответствующее уровням на выводах 2—9, установленных подключенными к ним внешними цепями. В виде десятичного числа оно появляется в поле над кнопкой «ОК». Задавать логические уровни на линиях шины данных можно с помощью узла, подобного использовавшемуся для работы с регистром состояния (рис. 4).

Чтобы не усложнять программу, отображение в поле ввода над кнопкой «Отправить» изменений состояния регистра управления с помощью кнопок «Прием» и «Передача» не предусмотрено.

Читать еще:  Что значит объектно ориентированное программирование

Освоив приведенные в статье примеры, мы научились выводить через порт из компьютера 12 и выводить в него 5 логических сигналов либо (в другом режиме) выводить 4 и вводить 13 таких сигналов. Теперь можно разрабатывать гораздо более сложные программы и устройства, подключаемые через порт LPT к компьютеру.

Работа с LPT портом в Дельфи или компьютер в роли управляющего контроллера. Часть 1

Posted by bullvinkle under Журнал, Статьи

Большинство пользователей персонального компьютера привыкли к тому, что весь результат деятельности на компьютере в той или иной степени все равно отражается в самом компьютере. В крайнем случае, отправляется на принтер или в Интернет, или же запись информации происходит на внешние носители (диски, флеш-память и т.п.). И уж мало кто задумывается, что с помощью простого РС – компьютера можно управлять различными внешними физическими устройствами.

Рис. 1. «Рабочая лошадка LPT еще даст о себе знать»

Владимир Дегтярь

Тем не менее, на форуме http://www.programmersforum.ru (да и на других также) часто появляются вопросы: «Как с компьютера зажечь светодиод?», «Как управлять освещением?» или «Можно ли компьютером закрывать шторы на окне?». Ответ: «…однозначно да». С помощью современного персонального компьютера можно создавать, воспроизводить, управлять, хранить, моделировать, обучать и еще реализовать много и много других функций.

Введение

Мы же рассмотрим возможности управления внешними устройствами – при этом возможно управление, как простым вентилятором или светодиодом, так производственными устройствами. Как известно, любой персональный компьютер, да и не только персональный, а и любое компьютерное (еще одно общепринятое название – микропроцессорное) устройство имеет устройства ввода и вывода информации, называемые портами. Для нас пользователей – это просто разъемы для подключения (клавиатура, мышь, модем, флешка и т. д.). Следует заметить, что по одному и тому порту (разъему)
можно как выводить информацию, так и вводить. Кроме этого понятие порт – это не только физически внешний элемент (разъем), а больше наоборот – внутренняя логическая структура устройства компьютера, часть его архитектуры.

Думаю что уже достаточно теории. Перейдем к практической реализации – управлению реальными устройствами с помощью компьютера. Более всего для этого подходит «параллельный» порт LPT. Более подробно смотрим о LPT http://ru.wikipedia.org/wiki/IEEE_1284.

Параллельный порт LPT

Итак, почему параллельный, а не перпендикулярный? А какие еще бывают? Параллельный, потому что информация через такое устройство передается параллельным способом. А еще может передаваться последовательным – тогда устройство (порт) называется последовательным (последовательные порты компьютера: COM-порт, USB- порт). Наглядно это можно увидеть на рисунке 2:

Рис. 2. Методы вывода информации

Аналогично ввод информации также может быть параллельным или последовательным. Порты (устройства) через которые можно вводить и выводить информацию называют двунаправленными устройствами или устройствами ввода/вывода. Таким и есть параллельный порт LPT, имеющийся в большинстве компьютеров. Посмотрим, что из себя представляет этот порт (см. рисунок 3):

где С0…С3 – регистры контроля, S3…S7 – регистры статуса, D0…D7 – регистры данных

Как видите, это такой разъем с 25-ю выводами на задней стенке системного блока компьютера. Итак, имеем физический порт LPT, который фактически состоит из трех регистров. Состав регистров и распределение по контактам разъема приведены в таблице 1:

Табл. 1. Распределение выводов LPT по регистрам

Каждый из регистров может содержать байт информации (256 состояний). Часть битов не используется или используется только во внутренней архитектуре компьютера для организации прерываний при работе с принтером или для переключения режимов ввод/вывод регистра «Data».

Регистр данных «Data», номер регистра в шестнадцатеричной системе счисления $378 (в десятичной 888) – двунаправленный, восьмибитный. Данные через этот регистр можно как вводить, так и выводить с компьютера, программно устанавливая уровни на выходе порта или же вводить в компьютер, также программно считывая уровни, устанавливаемые внешними устройствами.

Регистр управления «Control» $37A (890). Через него можно только выводить информацию из компьютера. На разъем LPT выводятся четыре младших байта.

Регистр статуса «Status» $379 (889). Через порт можно только считывать уровни, установленные внешними устройствами. На разъем LPT выведены пять старших байтов.

Таким образом, на разъеме LPT задействовано 17 сигнальных контактов (8 двунаправленных – регистр 888, четыре только на вывод информации – регистр 890 и пять только на ввод информации – регистр 889).

Порт LPT разрабатывался еще на заре создания персональных компьютеров для подключения печатающих устройств (принтер). Этим объясняется специфическое наименования цепей и инверсия некоторых битов, из-за которой наблюдается несоответствие уровней напряжения на контактах и логических кодов регистров. В связи с этим, операции с информацией через LPT порт требуют учитывать эти особенности соответствия физических уровней и логических кодов.

Следует отметить, что в некоторых компьютерах может быть до трех портов LPT: LPT1, LPT2, LPT3 (в современных компьютерах LPT порты зачастую вообще отсутствуют). Адрес самого LPT порта соответствует адресу регистра «Data» и может быть $278, $378 или $3BC. Регистры в соответствующих портах имеют адресацию +1 и +2.

Следующие таблицы (см. таблицы 2, 3) показывают эти особенности данного порта. Для регистра $378 (888) соблюдается полное соответствие между уровнями напряжения на контактах и логическим кодом. А вот с регистрами $379 (889) и $37A (890) все обстоит по-другому:

Табл. 2. Порт $37A (890) «Control»

Табл. 3. Порт $379 (889) «Status»

Управление регистрами

В компьютерах с операционными системами MS-DOS, Windows 9x возможен доступ к портам непосредственно из самой операционной системы, тогда как в системах с NT такой прямой доступ невозможен. Для этих целей используются драйвера в виде библиотек (Inpout32.dll, WinIO, Giveo). Подключив соответствующие библиотеки к средам программирования, получаем возможность программно работать с портами (считывание состояния порта или установка выводов порта в необходимое состояние).

* Автор отдает предпочтение библиотеке для работы в среде Дельфи. Библиотека

свободно распространяется в Интернете (см. ресурсы к статье).

Итак, во-первых – помещаем в папке с проектом. Далее в коде модуля Unit после раздела uses размещаем объявления необходимых нам функций из библиотеки:

Функция Inp32(PortAdr) возвращает число (тип – байт), соответствующее коду, находящемся в регистре PortAdr. Функция Out32(PortAdr, Data) возвращает число (Data, тип – байт), которое запишется в регистр PortAdr. Проще сказать Inp32 считывает значение регистра, а Out32 устанавливает значение в регистр. Пример применения функций:

При этом следует учитывать, что состояние уровней напряжения на выходных контактах LPT порта соответствует таблице 2 и 3. При необходимости управления отдельными битами регистров можно применить следующие функции преобразований десятичного числа в двоичное и наоборот:

Пример применения функций:

** Переключение регистра «data» ($378) c «выхода» на « вход»

Возможность использования регистра «data» ($378) в качестве порта ввода определяется в настройках

BIOS для параллельного порта. Следует установить Parallel Port в EPP. Переключение регистра на «вход»

осуществляется программно, путем установки 5-го бита регистра «control» ($37A) в «1» (при этом все биты

регистра «data» устанавливаются в «1»). Следует отметить, что данная процедура возможна не на каждом

компьютере и определяется, кроме настроек, еще и конструктивными особенностями порта LPT или

Вариант тестовой утилиты управления и считывания состояния регистров LPT представлен на рисунке 4 и приведен в ресурсах к статье [1]:

Рис. 4. Утилита считывания и контроля состояний регистров LPT порта

Заключение

Продолжение смотрите в следующем выпуске журнала «ПРОграммист»…

Ресурсы

. Сайт Валерия Ковтуна с множеством интересных программ для работы с LPT портом

Программирование порта lpt в vba

Данный драйвер содержит функции обращения к любому порту ввода/вывода процессора. Эти функции имеют следующий интерфейс:

Пример записи в порт:

Программа для записи данных в порт (в data register).

Сейчас мы попробуем написать прогу, которая будет зажигать диоды в нашем устройстве. Прошу тебя заметить, что речь сейчас идёт только о контактах регистра данных (data register D0 – D7), чуть позже мы поговорим о записи и чтении из/в других/е регистров. Проги будем писать на Delphi 7 и Visual Basic 6. Код программ я попытался сделать предельно простым.

Читать еще:  Концепт язык программирования

Для начала скачай себе библиотеку inpout32.dll. Хочу тебе сказать, что первая версия этой библиотеки распространялась с исходником (Листинг 1) но она не могла работать в Win NT, 2000, XP. Вторая версия (выпущенная автором специально для использования во всех версиях Windows) распространяется без исходника, о её создании ты можешь прочитать тут: http://www.logix4u.net/inpout32.htm. Мы будем использовать в своих программах вторую версию библиотеки, т.к. она может работать во всех версиях Windows (95, 98, Me, 2000. XP) (что-то я уже, как для детей всё объясняю :)). Но, для ознакомления с принципом работы библиотеки, ниже, я приведу исходник первой версии. Исходник, был написан на Delphi, точнее на built — in Delphi ассемблере.

Enables 32-bit Visual Basic programs to do direct port I/O
(Inp and Out) under Windows 95.
To be compiled with Borland’s Delphi 2.0.>

Теперь давай напишем простенькие порограмки на Delphi и VB, которые будут использовать библиотеку inpout32.dll. Задача программ: 1) при запуске программы дать команду — всем диодам погаснуть (т.е. передать число 0); 2) при нажатии кнопки, вывести в порт число, записанное в поле (число записываем в поле в десятичной форме, надеюсь, ты это понял).

Программа на VB6:

Option Explicit
‘объявление библиотеки для работы с портом
Private Declare Sub Out Lib «inpout32.dll» _
Alias «Out32» (ByVal PortAddress As Integer, ByVal Value As Integer)

Dim I As Integer

Private Sub Command1_Click()
‘Записать в переменную число из поля
I = Text1.Text
‘Записать это число в порт
Out &H378, I
End Sub

«Out32» (ByVal PortAddress As Integer, ByVal Value As Integer) – это процедура, взятая из inpout32.dll. ByVal PortAddress – это адрес порта (у нас это &H378), ByVal Value – это число, которое будет записано в порт.

Теперь, тоже самое на Delphi:

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;

procedure TForm1.Button1Click(Sender: TObject);
begin
// Записать в порт число из поля
Out32( $378 , strToint(Edit1.text));
end;

Программа в Visual Basic , которая работает с COM-портом – для новичков в радиоделе

Чтобы создать программу, которая работает с COM-портом, вам, думаю, будет недостаточно бесплатной версии сегодняшней Visual Studio Но можно поискать старые версии Visual Basic, которые вполне могут выполнить всё, что вам нужно

Рис 445 Начало работы над программой

Как и любой проект, его удобно создавать с помощью помощника: File-New-Project в основном меню среды разработки Visual Basic Папку для проекта можно создать, но можно не создавать Итогом будет вход в редактор, где готова форма, которую предстоит наполнить нужными нам элементами

Рис 446 Вид проекта после завершения работы помощника

Проект, конечно, пока пуст Но есть готовая форма, есть шаблон для текста программы В правой части окна программы Visual Basic есть панель с двумя закладками Если выбрать закладку Toolbox, то панель отобразит множество нужных нам элементов Например, кнопки

Рис 447 Кнопки на инструментальной панели закладки Toolbox

Для создания первого проекта попробуем повторить пульт управления роботом Используем четыре кнопки, как на пульте Чтобы добавить кнопки, достаточно мышкой перенести элемент Button с инструментальной панели на форму Form1 В моей версии среды разработки при перемещении элементов появляются направляющие линии, что помогает ровно разместить элементы на форме

Рис 448 Размещение кнопок управления на форме

Название кнопок можно изменить Для этого выделим кнопку мышкой, перейдём в окно свойств:

Рис 449 Изменение названия кнопок

В свойствах объекта Button выберем свойство Text, где в текстовом окне и впишем нужное название

Перемещаясь по компонентам инструментального меню Toolbox, найдём порт последовательного обмена данными (он же COM-порт):

Рис 4410 Добавление к проекту COM-порта

Двойным щелчком левой клавиши мышки добавим порт к проекту Добавленный COM-порт, как и все элементы проекта, обладает свойствами, которые можно увидеть, выделив порт, появившийся в рабочем поле редактора проекта, левой клавишей мышки И эти свойства можно изменить, задав скорость обмена 1200, указав COM1, как нужный нам порт

Теперь, если дважды щёлкнуть левой клавишей мышки по кнопке, то можно увидеть текст программы с заготовкой:

Рис 4411 Заготовка программы для щелчка по кнопке

Однако мне хотелось бы нажатия кнопки, а не щелчок по ней Если поместить маркер в редакторе текста программы на Button, то в верхней части рабочего экрана программы можно увидеть окно выбора событий

Рис 4412 Изменение события, связанного с кнопкой

После выбора нового события появляется новая подпрограмма, связанная с этим событием

Заметьте, кстати, что, изменив название кнопки, мы изменили только надпись на кнопке, но не имя программного элемента

В той части, где мы создали событие – Нажатие кнопки 1 – введём имя последовательного порта, завершённое точкой Это вызовет появление списка свойств последовательного порта, как элемента программы Из этого списка мы можем выбрать необходимую функцию

Рис 4413 Добавление операции с COM-портом

Порт мы откроем, то есть, начнём работу с портом И, открыв порт, перешлем два символа

Рис 4414 Отправка символов через COM-порт

Пока мы не ушли в программе слишком далеко, не мешало бы проверить, а работает ли наша программа Оттранслируем её, подключим осциллограф, а затем…

Убедимся, что программа не работает Сколько я не нажимаю кнопку, COM-порт игнорирует это

Дело в том, конечно, что метод KeyDown относится к работе с клавиатурой Чтобы это выяснить, можно воспользоваться разделом Help основного меню Может быть, я не исключаю этого, можно обойти эту проблему, реализовав то, что я задумывал, но впереди ещё много других вопросов, требующих ответов Поэтому я остановлю сейчас выбор на штатном варианте работы с кнопками, предлагаемом Visual Basic – использовать событие «щелчок мышкой, Click»

Создадим новый проект Оставим пока одну кнопку Двойным щелчком мышки по кнопке, расположенной на форме, создадим первый фрагмент текста Единственное, что я хочу добавить сейчас, это небольшое управление щелчками: при первом щелчке кнопка управления должна как- то измениться, чтобы зафиксировать, что щелчок был, а при втором щелчке кнопка должна вернуться к первоначальному виду

Чтобы реализовать это, я добавлю переменную flag1 булева типа Добавлю изменение цвета при щелчках по кнопке И, конечно, передачу символа «А» через COM-порт Тестовая программа приобретает следующий вид:

Рис 4415 Текст тестовой программы

Чтобы изменить цвет клавиши, достаточно выбрать в свойствах Button1 после добавления точки нужное свойство:

Рис 4416 Добавление свойства кнопки

После добавления знака равенства появляется возможность выбрать нужный цвет:

Рис 4417 Выбор нужного цвета

Окончательно тестовая программа выглядит так:

Рис 4418 Окончательный вид тестовой программы

И пришло время проверить, что происходит с COM-портом Оттранслируем тестовую программу и запустим её на проверку

Рис 4419 Первая проверка тестовой программы

Мы получили первое представление о том, как можно продолжить эксперименты с роботом, закончив рекомендованные исследования в руководстве

Мы получили представление о том, как можно использовать программу Visual Basic И теперь самое время найти хорошую книгу, описывающую работу с этой программой, и почитать её

Мы получили представление о том, как выглядят сигналы COM-порта Получили вид сигнала символа «А» (латинского) в программе ISIS, затем получили вид этого сигнала на экране осциллографа

Источник: Гололобов ВН,- Самоучитель игры на паяльнике (Об электронике для школьников и не только), – Москва 2012

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector