Amateur Radio Station R9AL

Однажды мне потребовалось выводить на 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 (Файл->Новый). В появившемся окне:
VC++ Создание нового проекта
выбираем Win32 Console Application. Указываем в поле Project name (Имя проекта) имя проекта, например port32. В поле Location (Место) указан путь к файлам проекта. Нажимайте . В следюущем окне выбираем пункт An empery project и жмем Finish.

Теперь еще раз File->New и на вкладке Files выбираем C++ Source Files
VC++ Создание нового файла
В поле File name (Файлы) указываем имя port32. Нажимайте . Ну и собственно все, переходим непосредственно к программе. В левом окне выберите закладку FileView:
VC++ Выбор файла


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 файлов: Работает это так: сначала она проверяет что за ОС. Если это Win9x - то при обращении к библиотеке с помощью функций Out32(адрес порта, байт данных) - для записи в порт и Inp32(адрес порта) - для чтения из порта, она конвертирует эти обращения к стандартным функциям _outp(адрес порта, байт данных) и _inp(адрес порта). Если это NT, то обращения к ней она конвертирует в запросы к стандартному драйверу ОС, через который и идет обмен информацией с портом.

Распаковываем архив и копируйте файлы h.h, inpout32.lib в папку проекта. Далее выбираем Project -> Add to Project -> Files... (Проект -> Добавить в проект -> Файлы...)
VC++ Выбор файла


В открывшемся окне находим папку нашего проекта, выбираете там только что помещенный туда файл h.h и нажимайте ОК. Файл добавиться в проект. Точно также добавляем в проект файл inpout32.lib.

Вот что в итоге должно у нас получиться:
VC++ Выбор файла


4.Компиляция

Чтобы скомпилировать программу (получить на выходе exe-файл), выбираем на из главного меню программы Build -> Compile port32.cpp (Создать -> Compile port32.cpp) . Если все сделано без ошибок, то компилятор выдаст в нижнем окне:
--------------------Configuration: port32 - Win32 Debug--------------------
Compiling...
port32.cpp

port32.obj - 0 error(s), 0 warning(s)
Затем необходимо выполнить Build ->Build Port32.exe (Создать -> Compile port32.cpp). И если все нормально, то в нижнем окне будет:
--------------------Configuration: port32 - Win32 Debug--------------------
Linking...

port32.exe - 0 error(s), 0 warning(s)


5.Работа с программой

Ну и в принципе все, программа готова и она находится в папке 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 позволяет выйти из программы, а нажатие любой другой клавиши повторит работу программы.



6.Файлы







Copyright © R9AL 2010 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования