Однажды мне потребовалось выводить на LPT-порт последовательность байтов
00h, 11h, 22h и так далее до FFh. В свое время для этого была написана
маленькая программка, всего несколько строчек на Borland C++
#include <stdio.h>
#include <conio.h>
main()
{
do
{
clrscr();
int v=-17;
do
{
printf("Value %02x sent to port number %x\n", v=v+17, 0x80);
v = outp(0x80, v);
getch();
}
while (v!=255);
printf("press ENTER to continue or ESC to exit\n");
}
while (getch()!=27);
}
Недостаток этой прогрммы был в том, что она попросту отказывалась работать под
Windows 2000 или XP. Дело в том, что разработчики NT с целью обеспечения
безопасности использования совместных аппаратных ресурсов компьютера,
запретили к ним прямой доступ. Для обращения к порту необходимо все операции
проводить через специальный драйвер драйвер. Поэтому встал вопрос переписать
эту и другие подобные программки, чтобы они нормально работали под WinXP.
В качестве среды разработки использован VisualC++ 6.0 (ну что было под рукой,
то и использовал :)
Подробно описывать установку VC++ не буду, там все просто, но если с этим у
кого-то возникли проблемы - пишите на форум, подскажу где взять и как
поставить :)
1. Создание проекта программы.
Работу в VC++ нгачинаем с того, что нам нужно создать новый проект: Выбираем:
File->New (Файл->Новый). В появившемся окне:
выбираем Win32 Console Application. Указываем в поле
Project name (Имя проекта) имя проекта, например port32.
В поле Location (Место) указан путь к файлам проекта. Нажимайте
OК. В следюущем окне выбираем пункт An empery project и
жмем Finish.
Теперь еще раз File->New и на вкладке Files выбираем
C++ Source Files
В поле File name (Файлы) указываем имя port32. Нажимайте OК.
Ну и собственно все, переходим непосредственно к программе. В левом окне
выберите закладку FileView:
2.Код программы
В папке Source Files выбераем наш файл port32.cpp и копируем
в него следующий код:
#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
#include "h.h"
void main()
{
int Address=888;
cout<<"LPT-port in Windows NT output XX."<<endl;
do
{
int v=-17;
do
{
Out32(Address, v=v+17);
cout <<" Value " << hex << v << " sent to port number "<< Address <<endl;
getch();
}
while (v!=255);
cout<<"press ENTER to continue or ESC to exit\n"<<endl;
}
while (getch()!=27);
}
3.Подключение файлов к проекту.
Теперь необходимо подключить к нашему проекту файлы из комплекса
inpout32. Этот комплекс состоит из 3 файлов:
динамической библиотеки inpout32.dll
статической библиотеки inpout32.lib, необходимой на этапе сборки программы
заголовочного файла h.h с прототипами используемых функций
Работает это так: сначала она проверяет что за ОС. Если это Win9x - то при
обращении к библиотеке с помощью функций Out32(адрес порта, байт данных) - для
записи в порт и Inp32(адрес порта) - для чтения из порта, она конвертирует эти
обращения к стандартным функциям _outp(адрес порта, байт данных) и _inp(адрес
порта). Если это NT, то обращения к ней она конвертирует в запросы к
стандартному драйверу ОС, через который и идет обмен информацией с портом.
Распаковываем архив и копируйте файлы
h.h, inpout32.lib в папку проекта.
Далее выбираем Project -> Add to Project -> Files...
(Проект -> Добавить в проект -> Файлы...)
В открывшемся окне находим папку нашего проекта, выбираете там только что
помещенный туда файл h.h и нажимайте ОК. Файл добавиться в проект.
Точно также добавляем в проект файл inpout32.lib.
Вот что в итоге должно у нас получиться:
4.Компиляция
Чтобы скомпилировать программу (получить на выходе exe-файл), выбираем на
из главного меню программы Build -> Compile port32.cpp
(Создать -> Compile port32.cpp) .
Если все сделано без ошибок, то компилятор выдаст в нижнем окне:
Ну и в принципе все, программа готова и она находится в папке Debug
нашего проекта. Но, еще один важный момент,
в папку Debug необходимо поместить файл inpout32.dll - без
него программа не сможет работать. Этот файл всегда должен быть в одной
папке с нашей программой.
Переходим непосредственно к работе с программой: Подключаем к порту какое-либо
устройство (это могут быть светодиоды или
LPT POST Card и запускаем
программу. Сразу после запуска откроется консоль и появится надпись:
LPT-port in Windows NT output XX.
И далее:
Value 0 sent to port number 378
А на LPT порт будет отправлен байт 00h. После нажатия любой клавишы появится
следующая строка и так далее, после того как нажата любая клавиша после вывода
байта ffh, программа предложит:
press ENTER to continue or ESC to exit
Соответвенно нажатие клавиши ESC позволяет выйти из программы, а нажатие любой
другой клавиши повторит работу программы.