ورود

View Full Version : فرستادن Data به پورت LPT1



vatal
دوشنبه 25 اردیبهشت 1385, 23:22 عصر
با سلام خدمت دوستان !
من میخوام در winxp و با استفاده از پورت LPT1 یک LED رو که بورد مربوط به اون طراحی شده
و تا اون جایی که من تست کردم (در ِDOS و با استفاده از Pascal ) درست کار میکنه !

و اما مشکل کار :

من توی Delphi به جهت اینکه win xp هستش کد های زیر رو بکار بردم ......


unit LPT_2;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Shape1: TShape;
Shape2: TShape;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
hlpt:THandle;
DeviceName: array[0..80] of Char;
hb_f:Byte;
bytewrite:DWORD;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

if hlpt=INVALID_HANDLE_VALUE then
raise EInOutError.Create('Error Opening LPT1 Port');

hb_f:=255;
WriteFile(hlpt,hb_f,sizeof(hb_f),bytewrite,nil);
Shape1.Show;
Shape1.Brush.Color:= clLime;
Shape2.Hide;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

if hlpt=INVALID_HANDLE_VALUE then
raise EInOutError.Create('Error Opening LPT1 Port');

hb_f:=0;
WriteFile(hlpt,hb_f,sizeof(hb_f),bytewrite,nil);
Shape2.Show;
Shape2.Brush.Color:=clRed;
Shape1.Hide;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
CloseHandle(hlpt);
except
raise EInOutError.Create('ERROR while closing handle!');
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
StrPCopy(DeviceName,'LPT1');
hlpt:=CreateFile(DeviceName,GENERIC_WRITE,0,nil,OP EN_EXISTING,FILE_FLAG_OVERLAPPED,0);

end;

end.


ممنون میشم بگیدایراد کار من کجاست .. آیا برنامه بالا ایراد داره یا بوردی که طراحی شده

SH.Daneshvar
سه شنبه 26 اردیبهشت 1385, 09:06 صبح
تا جایی که بنده میدنم WinXP پورت LPT رو خوب Support نمیکنه و من به شما پیشنهاد میکنم
حداقل بر روی پورت سریال یا همون RS232 کار کنید.

mzjahromi
سه شنبه 26 اردیبهشت 1385, 09:13 صبح
تا جایی که بنده میدنم WinXP پورت LPT رو خوب Support نمیکنه و من به شما پیشنهاد میکنم
حداقل بر روی پورت سریال یا همون RS232 کار کنید.
کارائی پورت RS232فرق میکنه درسته استاندارد تره ولی کارائی اش فرق میکنه.

ممنون میشم بگیدایراد کار من کجاست .. آیا برنامه بالا ایراد داره یا بوردی که طراحی شده
من با LPT زیاد کار کردم ولی نه تو XP
یه کار انجام بدید ببینید تغییری میکنه؟
اگه درایور پپرینتر رو سیستمتون نصبه اون رو Uninstallکنید ببینید نتیجه میگیرید یا نه؟

SH.Daneshvar
سه شنبه 26 اردیبهشت 1385, 09:20 صبح
درسته فرق میکنه اما اگر طرف میهمان هم یه دستگاه ساخت خودشون باشه بهتر تبدیلش کنند
به RS232 منظور بنده این بوده.

mzjahromi
سه شنبه 26 اردیبهشت 1385, 09:27 صبح
درسته فرق میکنه اما اگر طرف میهمان هم یه دستگاه ساخت خودشون باشه بهتر تبدیلش کنند
به RS232 منظور بنده این بوده.
این درسته
ولی مستلزم اینه که طرف دوم یک میکرو کنترولر و یا یک آی سی دریافت کننده اطلاعات RS232 داشته باشند. (UART)
ضمن اینکه توی این مثال دارن LED رو روشن و خاموش می کنن ولی با RS232 این کار امکان پذیر نیست.

FPGAINTEL
سه شنبه 26 اردیبهشت 1385, 09:45 صبح
سلام
بهتره از فایل io.dll استفاده کنی توی win xp هم جواب میده

vatal
سه شنبه 26 اردیبهشت 1385, 10:16 صبح
با تشکر از شما ..
من بالاخره متوجه نشدم ..... ایراد از تکه برنامه بالاست یا چیز دیگه !؟
یعنی کد مربوطه درسته ! و اینکه آخرش من چیکار کنم !؟

با تشکر :VATAL

vatal
سه شنبه 26 اردیبهشت 1385, 14:48 عصر
یکی نیست به من کمک کنه !
لااقل بگید ایراد کار کجاست .... کدی که توی Delphi نوشته شده یا سخت افزار مربوطه ؟؟؟؟

Ali-Far
سه شنبه 26 اردیبهشت 1385, 16:14 عصر
شما از همان فایل IO.dll استفاده کنید مشکل سخت افزار را فقط می توان با استفاده از خود شماتیک و برد آن فهمید !!!!!!!!!!!!!

آدرس دانلود فایل http://www.programmhevens.com

vatal
سه شنبه 26 اردیبهشت 1385, 17:04 عصر
یعنی کد بالا مشکلی نداره ....!
از مدیر های بخش خواهش میکنم به من کمک کنید ... بد جوری گیر کردم !

vatal
چهارشنبه 27 اردیبهشت 1385, 00:16 صبح
با سلام ..... !

من بالاخره این مشکل رو حل کردم .... گفتم تو سایت هم بگذارم اگه کسی خواست مثل من گیر نکنه

فایل inpout32.dll رو Upload میکنم رو سایت این فایل رو بغل دست فایلهای پروژه مربوطتون کپی
میکنید بعدش کد های کوچولوی زیر رو براحتی استفاده میکنید !

برای send data

function Out32(wAddr:word;bOut:byte):byte; stdcall; external 'inpout32.dll';
begin
bWriteMe:=ScrollBar1.position;
Label1.caption:=inttostr(bWriteMe);
bErr:=(Out32($378,bWriteMe));
end

برای read data



function Inp32(wAddr:word):byte; stdcall; external 'inpout32.dll';
begin
label2.caption:='When last read, the port was showing '+
inttostr((Inp32($379)and $F8));
end;

تا یادم نرفته منبع مطالب فوق : http://sheepdogguides.com/dt4j.htm
از همه دوستان بخاطر وقتی که گذاشتین سپاس گذارم !

mzjahromi
چهارشنبه 27 اردیبهشت 1385, 06:00 صبح
ببین
اول تحت داس با Debug چک کن ببین جواب میگیری؟
متاسفانه من توی XP کار نکردم اگه فرصت داشتم واسه ات تست میکردم
ولی اگه توی داس جواب گرفتی باید کدت رو تغییر بدی. اعداد مختلف رو بفرست رو پورت ببین عکس العملی می بینی.
درایور پرینتر رو سیستمتون نصب نیست؟

گه درایور پپرینتر رو سیستمتون نصبه اون رو Uninstallکنید ببینید نتیجه میگیرید یا نه؟