m-anas

التحكم بمنفذ الطابعة عن طريق الدلفي

24 ردود في هذا الموضوع

بسم الله الرحمن الرحيم

سؤالي كالتالي

كيف يمكنني التحكم بمنفذ الطابعة عن طريق الدلفي

أرجوكم أريد الجواب بسرعة مع الكود المناسب ولكم جزيل الشكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

استخدم الأسمبلي المضمن ..

أجمل وأسرع طريقة .

لكتابة تعليمات أسمبلي , نكتب ASM ثم عند النهاية نضيف End;

إسم جزء الخرج 8 بت من منفذ الطابعة $378 "$ تعني ست عشري"

تعليمة الأسمبلي المتعلقة بإخراج قيمة ما على المنفذ هي Out

.

مثال عملي :

procedure TForm1.Button1Click(Sender: TObject);
begin
asm
 mov al,$ff
 mov dx,378h
 out dx,al
end;

 end;

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا جزيلا على هذا الرد الرائع

ولكن هل يمكن أن تزيد من الشرح أو أن تعطيني وصلات لدروس عملي

أعرف أن منفذ الطابعة له عدة أرجل فكيف يمكن التحكم برجل معين

أرجووك أن تزداد شرحا بالكود

ولك جزيل الشكر

المحب

أبو الخير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

يا شباب أرجوكم لماذل لا تردون

أنا بأمس الحاجة للمساعدة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم و رحمة الله وبركاته ...

أخي العزيز m-anas ...

إليك شرح بسيط عن كيفية استعمال ديلفي لربطه مع المنافذ ( كمنفذ الطابعة مثلا ) :

1ـ قراءة من منفذ ما :

هناك طريقتين في ديلفي لقراءة بيانات من منفذ ما :

الطريقة الأولى : استعمال لغة الأسمبلي في ديلفي : و ذلك بأن نكتب ( asm ) ثم تعليمات الإدخال ثم ( end ) كالتالي :

asm
mov DX,adress num
in AI,DX
mov Data , AI
end;

الطريقة الثانية : استعمال توابع خاصة في ديلفي : و هناك تابعين :

الأول ( port ) و الثاني ( Inprt ) :

X:= port[address num];

X:= inport[address num]

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

2ـ إخراج البيانات على منفذ ما :

أيضا هناك طريقتين في ديلفي لإخراج البيانات على منفذ ما .

الطريقة الأولى : باستخدام لغة الأسمبلي :

asm
mov DX , address num
mov AI ,data
out DX,AI
end;

الطريقة الثانية : باستخدام توابع خاصة في ديلفي : حيث يوجد هناك تابعين خاصين لإخراج البيانات على منفذ ما وهما ( port ) و ( outport ) :

port[address num]:=data;

outport(port address , data)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

3ـ كيفية تحديد رجل ( pin ) معينة في منفذ ما ( وليكن منفذ الطابعة ) :

يحتوي منفذ الطابعة على ثلاثة بوابات : بوابتي خرج و بوابة دخل ، ولكل من هذه البوابات عنوان ( address ) خاص بها ، لنفرض أننا نريد التعامل مع بوابة الخرج ( 8 بت ) و عنوانها ( 378$) ( $ في ديلفي تعني عدد ست عشري ) ، علما أن بوابة الخرج ( 8 بت ) تحتل الأرجل ( pins ) من ( 2 ) و حتى ( 9 ) من أرجل منفذ الطابعة .

لنفرض أننا نريد أن نفعّل الأرجل الخمسة الأولى من بوابة الخرج و باقي الأرجل الثلاثة لا نفعلها ، لعمل ذلك و بكل بساطة علينا أن نحدد شيئين :

1ـ الـ data التي سنرسلها إلى بوابة الخرج ( 8 بت ) في منفذ الطابعة و التي تؤدي إلى تفعيل الأرجل الخمسة الأولى من بوابة الخرج السابقة و عدم تفعيل الأرجل الباقية .

2ـ العنوان الذي سترسل إليه هذه الـ data .

بالنسبة للطلب الثاني فهو معلوم ( 378$ ) ، و يبقى علينا تحديد الطلب الأول ، نريد أن نفعل الأرجل الخمسة الأولى و لا نفعل الأرجل الثلاثة الباقية و هذا يعني أن الـ data هي ببساطة ( 1F$ ) يعني تفعيل الأرجل الخمسة الأولى و عدم تفعيل الأرجل الثلاثة المتبقية .

port[$378]:=$1F

و نفس المناقشة إذا كنا نريد التعامل مع بوابة الخرج الثانية ( 5 بت ) أو بوابة الدخل أو حتى أي منفذ آخر .

و لكني نسيت أن أقول شيئا أنه عندما نريد كتابة الـ data و الـعنوان بالست عشري فيجب أن تسبق بـ $ ، و إلا فإن ديلفي سيتعامل معها كأعداد عشرية ( بالنظام العشري ) .

أرجو أن أكون قد أوضحت الصورة جيدا بالنسبة لك ....

و السلام عليكم ورحمة الله وبركاته ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا جزيلا على مشاركتك الرائعة

وجزاك الله كل خير بصراحة ان هذه المشاركة كانت رائعة

لك جزيل الشكر

وألريد أن أعايدكم بليلة النصف من شعبان

كل عام وأنتم و الامة الاسلامية بخير وتقدم دائم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

[SIZE=1]السلام عليكم ورحمة الله وبركاته...

عندي بعض الأسئلة عن المشاركة الرائعة يا أخي FATA82

1 - ما هو الفرق بين INPORT - PORT و OUTPORT - PORT

2 - عندما فعلنا الأرجل الخمسة الاولى كتيت port[$378]:=$1F

أ - ما يعني الرقم $378

ب - = = = = = 1f$

3 - اذا أردت تفعيل الرجل الاولى فقط مثلا أو الاولى والثانية فقط

أو غيرها أي أرجل محددة ما هي الأوامر أو العناوين المطلوبة ولك جزيل الشكرأرجوا الاجابة السريعة

لا تؤاخذني على كثر الاسئلة لكن الموضوع جد حساس ومهم

جزاك الله كل خير

أخوك المحب أبو الخير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله و بركاته ...

أخي العزيز m-anas ...

إجابات الأسئلة :

1ـ في الحقيقة لا أعلم بدقة ما هو الفرق بين التعليمات السابقة ، و أنا في الواقع لم استخدم التعليمتين ( inport ) و ( outport ) و لكن قرأت عنهما ذات مرة في أحد المراجع و لم أتعامل معهما أبدا ، و إنما أتعامل مع التعليمة ( port ) في الإدخال و الإخراج ...

2ـ تفعيل رجل ( pin ) معين في منفذ الطابعة يعني أن نخرج على هذا الـ ( pin ) القيمة 1 منطقي ( و هذا يكافئ فيزيائيا إلى أن هذا الـ ( pin ) يوجد عليه جهد كهربائي ) و عدم تفعيل ( pin ) معين في منفذ الطابعة يعني أن نخرج على هذا الـ ( pin ) القيمة 0 منطقي ( و هذا يكافئ فيزيائيا إلى أن هذا الـ ( pin ) لا يوجد عليه جهد كهربائي ) .

و لتفعيل ( pin ) معين فإننا نضع مكانه في الـ data التي سنرسلها إلى المنفذ العدد 1 منطقي .

و لعدم تفعيل ( pin ) معين فإننا نضع مكانه في الـ data التي سنرسلها إلى المنفذ العدد 0 ( صفر ) منطقي .

يحتوي منفذ الطابعة على :

أ ـ بوابة خرج ( 8 بت ) { pin 2 - pin9 } .

ب ـ بوابة خرج ( 4 بت) { pin 1 } و { pin 14 } و { pin 16 } و { pin17 } ، علما أن ( 1 ) و ( 14 ) و ( 17 ) معكوسة ، بمعنى عندما نخرج عليها واحد منطقي فإنه يظهر لدينا صفر منطقي .

ج ـ بوابة دخل ( 5 بت ) { pin 10 } و { pin 11 } و { pin 12 } و { pin 13 } و { pin 15 } ، و علما أن ( 11 ) معكوس ، أي إذا كان مطبقا عليه واحد منطقي فإنه سيخزن صفر منطقي و العكس .

بقية الأرجل هي أرضي ، و يجب أن تلاحظ ملاحظة مهمة هي أنه يجب الانتباه إلى ترتيب الأرجل من أجل كل بوابة ، و سأحاول شرح هذه الفكرة لاحقا ...

كل بوابة من هذه البوابات لها عنوان :

بوابة الخرج ( 8 بت ) عنوانها هو ( 378$ ) .

بوابة الخرج ( 4 بت ) عنوانها هو ( 37A$ ) .

بوابة الدخل ( 5 بت ) عنوانها هو ( 379$ ) .

لنفرض أننا نريد أن نستخدم بوابة الخرج ( 8 بت ) ، هذه البوابة كما هو واضح من اسمها أنها تستطيع أن تخرج بيانات ( data ) بعرض ( 8 بت ) ، كل بت من هذه البتات مرتبط بـ ( pin ) في المنفذ التفرعي .

و بالتالي حتى نفعل ( pin ) معين نضع 1 منطقي في البت الخاص به و صفر منطقي في البت الذي لا نريد تفعيله ، و بالتالي لتفعيل الأرجل الخمسة الأولى لبوابة الخرج و عدم تفعيل الثلاثة الأخيرة الباقية ، فإن الـ data هي ( 1111 0001 ) ، هذا الرقم هو بالنظام الثنائي نحوله إلى مكافئة الست عشري فينتج لنا ( 1F$ ) { افترض أنك تعرف أنظمة العد }

3 ـ إذا أردت تفعيل الرجل الأول فقط في بوابة الخرج ( 8 بت ) فإن الـ data هي ( 0001 0000 ) و هذا يكافئ إلى ( 01$ ) ، و لتفعيل الرجل الأولى و الثانية معا فإن الـ data هي ( 0011 0000 ) و هذا يكافئ إلى ( 03$ ) .

أفضل أن تستخدم النظام الست عشري لأنه أسهل في التعامل مع عناوين البوابات أو الـ data .

المثال التالي يقوم بتفعيل الـ ( pin ) الأول و الثاني من بوابة الخرج ( 8 بت ) :

port[$378]:=$03

أرجو أن تكون قد أفدتك بشيء ولو بسيط ...

و السلام عليكم و رحمة الله و بركاته ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته........

لا أعرف كيف أشكرك على هذه المشركة والمعلومات الرائعة والشرح السهل

المفهوم جدا

وحسبي فقط أن أترك جزاك على الله

جزاك الله كل خير

ولكن أرجوا منك أن تسمع لسؤالي التالي

لقد فهمت الفكرة كما أظن فهما كافيا لبدء العمل البرمجي

وبالفعل فقد بدأت بالعمل ولكن للأسف فقد ظهر خطأ وهو

وسيط غير معرف : لل Port

جربت قراءة مواضيع الhelp ولكنني لم أستفد

أرجوا أن تكمل جميلك معي وتصحح لي هذا الخطأ

ملاحظة : إن نسخة الدلفي لدي هي : Delphi6 إن كان لها أي ثأثير

كما أنني لم أنصب الدلفي كاملا وانما مخصصا

أرجوا الاجابة على هذا السؤال ولك جزيل الشكر

و اعلم أن هذا الجميل لن أنساه ولن ينساه الله عز وجل

السلام عليكم

أخوك المخلص أبو الخير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هناك عدة احتمالات لهذه المشكلة :

1ـ نظام التشغيل :

نظم التشغيل بعد ويندوز 98 ( كنظام win 2000 و xp و nt ) هذه النظم أصبح من غير الممكن الوصول المباشر للمنافذ و ذلك من أجل زيادة أمن هذه النظم .

هناك برنامج اسمه WinIO يستخدم للوصول المباشر إلى المنافذ في بيئة XP/W2K ، و هذا الرابط لتنزيل البرنامج :

http://www.internals.com/utilities_main.htm

2ـ إعدادات البيوس :

ذكرت سابقا عناوين المنفذ التفرعي و لكن هذه العناوين قد لا تكون صحيحة دائما لذلك قم بالدخول إلى البيوس و ابحث عن كلمة peripheral في القوائم و عندها تجد خيارات منفذ الطابعة : العنوان و رقم المقاطعة و نوع النقل standared, bidirectional , ECP, EPP ، تأكد من عنوان منفذ الطابعة .

3ـ ديلفي 6 :

ربما لأنك لم تنزل نسخة ديلفي 6 بشكل كامل ، مع أن هذا الاحتمال ضعيف جدا ، و على الأغلب هو أحد السببين السابقين .

و إليك أخي العزيز ملفا يحتوي على معلومات جيدة للتحكم بمنفذ الطابعة باستخدام الديلفي ، و مرجع هذه المعلومات هو مجلة ترونكس العدد الأول .

أتمنى أن أكون قد أفدتك بشيء ولو بسيط ...

و السلام عليكم ورحمة الله وبركاته ...

التحكم بالمنفذ التفرعي باستخدام الديلفي.pdf

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته

اللهم اجزه عني كل خير ووفقه واياي إلى كل خير

شكرا جزيلا

أرجوا منك أن تكون أخي في الله وصديقي عبر الانترنيت

وأرجوا أن تراسلني على هذا العنوان

[email protected]

أنا في انتظار رسائلك

أخوك المحب

أبو الخير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته...

لقد قمت بالخطوات التالية :

1 – لقد أنزلت نظاما جديدا وهو winme .

2 – أنزلت الديلفي كاملا

3 – عرفت منغذ ال eps+epp فتم تعريف المنفذ من النظام

ولكن..

ما زال برنامج الديلفي يعطيني الرسالة التالية :

[error]unit1.pas[28]:undeclared identifier : 'port'

[fatal error] project1.dpr[5]:could not compile used unit 'unit1.pas'

أرجوا التفضل بالاجابة

أما ما يخص برنامج winio فكيف يمكن ربطه مع الديلفي

واستخدامه ولك جزيل الشكر

أخوك الذي لا يعرف كيف يشكرك

أبو الخير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم و رحمة الله و بركاته ...

هذه المشكلة التي لديك تعني أن ديلفي لم يتعرف على التعليمة ( port ) ، ربما تكون قد كتبت بشكل خاطئ و ربما ...هناك احتمالات عديدة ...

سأضع لك في المرفقات لاحقا ملفين ( أو أكثر حسب حجم الملفات ) ...

تحتوي هذه الملفات على :

1ـ العدد الأول من مجلة ترونكس ، إضافة إلى مثال كامل عن التحكم بالبوابة التفرعية باستخدام الديلفي مع الـ source code ... هذا المثال يوجد شرح كامل عنه في العدد الأول لمجلة ترونكس .

2ـ العدد الثاني من مجلة ترونكس ، إضافة إلى مثال كامل عن التحكم بدرجة الحرار باستخدام البوابة التفرعية ... هذا المثال يوجد شرح كامل عنه في العدد الثاني لمجلة ترونكس .

و إذا أردت مزيدا من الأمثلة فادخل إلى موقع مجلة ترونكس :

http://www.tronix-mag.com/

حيث يمكنك أن تحمل جميع الأمثلة الواردة في أعداد مجلة ترونكس .

فقط انتظر علي قليلا ... و أنا إن شاء الله سوف أنزلهم في المرفقات هنا حتى تستفيد و يستفيد الجميع بإذن الله ...

و السلام عليكم و رحمة الله و بركاته ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

يمكنك كذلك استخدام مكونات جاهزة من موقع:

www.torry.net

أو تجربة:

www.ipworks.com

ولنسخ مفتوحة:

soft.0zones.com

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم و رحمة الله وبركاته..

شكرا لك على هذا الرد الجميل لكن هل من المعقول أن تكون كلمة port غير معرفة في

unit1 هذا ما فهمته من الخطأ

أو هل للجهاز أو اللوحة الام أي تأثير ..

بصراحة أنا جدا محبط بعد المساعدة الرائعة منك وبعد أن فهمت الموضوع بشكل رائع

هل من المعقول من نسخة الدلفي

هل أنت تستخدم الديلفي 7 مثلا وهناك فرق عن الديلفي 6

أرجوا منك الرد وشكرا

جزاك الله كل خير

أخوك المحب

أبو الخير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته ...

ليس الجهاز هو الذي يؤثر ، و إنما نظام التشغيل ، بعض أنظمة التشغيل تمنع الوصول إلى المنافذ ، و ما يقوم به برنامج winio هو يقوم بتحميل بعض ملفات الـ dll إلى النظام ليصبح هذا النظام يسمح لك بالوصول الكامل و المباشر إلى المنافذ و قد جربه الأخ الفاروق من هذا المنتدى و استفاد منه ...

على كل هذه الرسالة التي ظهرت لك معناها أن المشكلة هي من نفس الديلفي ، بل من نفس التعليمة ... لذلك أنصحك أن تستخدم الأسمبلي المضمن في ديلفي كما شرحت سابقا ...

أنا في الحقيقة لست على دراية كبيرة بلغة الديلفي و ما زلت مبتدأ فيها ، و لكني في الأصل أدرس التحكم و أهتم بالهاردوير ( بحكم دراستي ) أكثر من السوفت وير ، لأنه عندما نريد أن نتحكم عن طريق الحاسب مثلا فإننا نصمم الهاردوير و يقوم مبرمج بتصميم السوفت وير ، و لكن في الحقيقو شدتني لغة الديلفي لأتعلمها ...

سأقوم بإرفاق ملف يحتوي على مشروع للتحكم بالمنفذ التفرعي عن طريق الديلفي ، يحتوي هذا الملف على الملف التنفيذي و الـ source code ، و صفحات من مجلة ترونكس لتفهم المشروع ، و هي تابعة للصفحات التي وضعتها سابقا .

1.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم و رحمة الله و بركاته ...

في المشاركة السابقة أرفقت لك مشروع مبدئي للتحكم بالمنفذ التفرعي عن طريق الديلفي ...

و الآن أضيف مرفق جديد هو متابعة لما سبق و تطبيق عملي له ، و هو مشروع التحكم بدرجة الحرارة باستخدام المنفذ التفرعي ...

يحتوي الملف المرفق على صفحات من العدد الثاني لمجلة ترونكس التي تشرح هذا المشروع إضافة إلى ملف المشروع ...

يغلب على هذا المشروع الطابع الهاردويري أكثر من السوفت ويري ، لأنه تم مناقشة السوفت وير في السابق ...

و أي سؤال عن الهاردوير أنا جاهز إن شاء الله ...

ملاحظة أخيرة : نظرا لضخامة حجم الملف فقد قسمته إلى نصفين

العدد الثاني1.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم و رحمة الله و بركاته ...

هذا هو القسم الثاني من الملف السابق ...

2.zip

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

عفوا على السرعة لكنني سألت عن المسألة

فاجبت بأن تعليمة الport لها component معين

أرجوا الافادة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم و رحمة الله و بركاته ...

أخي العزيز m-anas ...

باعتبار أن الport هو component ، لذلك إما أن تقوم بتحميل هذا الcomponent ، و الأفضل من ذلك أن تستخدم لغة الأسمبلي المضمنة في ديلفي كما شرحت سابقا فهذه الطريقة لا تحتاج component ...

و أنصحك أخي أن تفتح الsource code في الملف السابق في المرفقات لتتعلم منه عسى تجد فيه ما يفيدك ...

أرجو أن أكون قد أفدتك و لو بشيء بسيط

و السلام عليكم ورحمة الله و بركاته...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله و بركاته ...

أخي العزيز m-anas ...

بحثت لك في الإنترنت عن component من أجل ال port ، فوجدت لك الموقعين التاليين :

http://www.delphisource.com/component.asp?category=26

http://www.theclub.com.br/site/download/Ar...?Ling=01&Cat=16

كل ما عليك فعله هو البحث عن لكمة lpt في هاتين الصفحتين ختى تظهر لك الcomponent الخاصة بال port و التي يمكن تحميلها إلى جهازك .

أرجو أن أكون قد أفدتك و لو بشيء بسيط ...

و السلام عليكم ورحمة الله و بركاته ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا جزيلا يا أخي

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .