يشار إلى المنفذ المتوازي على أنه منفذ متوازي.
1. اقرأ واكتب بالتوازي
في لغة التجميع ، يمكن تشغيل المنفذ الموازي مع التعليمات داخل وخارج ، ولكن لا توجد وظائف وطرق مقابلة في دلفي لقراءة الكتب والكتابة. تعليمات التجميع داخل وخارج ، يمكن بسهولة قراءة وكتابة المنافذ المتوازية. يمكننا أيضًا الوصول إلى المنفذ المتوازي عن طريق استدعاء وظائف Windows API أو DLLs و VXDs التي توفرها أطراف ثالثة ، لكنها أكثر ملاءمة وسريعة للقراءة وكتابة المنفذ المتوازي باستخدام طرق التجميع المدمجة.
استخدم وظيفة الإجراءات التالية وإجراءات WritePort لقراءة وكتابة المنافذ المتوازية ، ومنفذ المعلمة هو عنوان المنفذ للعمل.
دالة القراءة (المنفذ: كلمة): بايت ؛
var
ب: بايت ؛
يبدأ
ASM
MOV DX ، منفذ ؛
في AL ، DX ؛
Mov B ، آل ؛
نهاية؛
النتائج: = ب ؛
نهاية؛
الإجراء WritePort (Port: Word ؛ Conbyte: Byte) ؛
يبدأ
ASM
MOV DX ، منفذ ؛
موف آل ، كونبيت ؛
خارج DX ، آل ؛
نهاية؛
نهاية
للتحكم في المنفذ المتوازي من حيث البت ، يمكنك أولاً قراءة بيانات المنفذ المتوازي ، ثم إجراء عمليات بت ، ثم الكتابة إلى المنفذ المتوازي مرة أخرى ، بحيث يمكن تحقيق التحكم في المنفذ المتوازي.
المشغل المنطقي ويقوم بمنطق وتشغيل bitwise على رقمين ليتم تشغيلهما: أي نتيجة 1 و 1 هي 1 ، والآخر 0 و 1 و 1 و 0 و 0. نتائج 0 هي 0 0 .
يقوم المشغل المنطقي أو التشغيل المنطقي أو التشغيل على رقمين ليتم تشغيله: أي ، طالما أنتين "أو" واحد ، والنتيجة هي 1 ؛
استخدم والمشغل لتحديد الموضع 0. على سبيل المثال ، الثنائي من سداسي عشري 84h هو: 10000100 ، وبتته الثالثة هو 1. لتعيين الموضع الثالث على 0 وتبقى البتات الأخرى دون تغيير ، يمكنك استخدام: 84 دولارًا و $ fb = 80 دولارًا ، القيمة الثنائية البالغة 80H هي 10000000.
استخدم أو المشغل لتحديد الموضع 1 ، على سبيل المثال: الجزء الثاني من السداسي عشري 84H هو 0 10000110.
مثال:
1. قم بتعيين إمكانات بتات D2 من منفذ البيانات 378H إلى منخفض ، أي ، تم تعيينه 0:
ب: = readport (378 دولار) ؛
B: = B و $ FB ؛
WritePort (378 دولار ، ب) ؛
2. قم بتعيين إمكانات بتات D2 من منفذ البيانات 378H إلى ارتفاع ، أي ، المجموعة 1:
ب: = readport (378 دولار) ؛
ب: = ب أو 04 دولار ؛
WritePort (378 دولار ، ب) ؛
3. تحديد إمكانات بتات D2 من منفذ البيانات 378H:
ب: = readport (378 دولار) ؛
if ((B و 04 $) = $ 04) ثم
// الكود عندما تكون الإمكانات عالية
آخر
// الكود عندما تكون الإمكانات منخفضة
أو:
ب: = readport (378 دولار) ؛
if ((b أو $ fb) = $ ff) ثم
// الكود عندما تكون الإمكانات عالية
آخر
// الكود عندما تكون الإمكانات منخفضة
3. تنفيذ محدد
المثال التالي هو الارتفاع المحتمل لكل جزء من منفذ البيانات 378H الذي يتحكم في المنفذ المتوازي. 8 بت من منفذ البيانات: D0 ~ D7 تتوافق مع المسامير 2 ~ 9 من الواجهة المتوازية.
قم بتشغيل Delphi أولاً ، قم بإنشاء مشروع جديد ، وانقر فوق F12 لإضافة رمز القراءة والمنافذ إلى Unit1 of Form1:
دالة القراءة (المنفذ: كلمة): بايت ؛
الإجراء WritePort (Port: Word ؛ Conbyte: Byte) ؛
دالة القراءة (المنفذ: كلمة): بايت ؛
var
ب: بايت ؛
يبدأ
ASM
MOV DX ، منفذ ؛
في AL ، DX ؛
Mov B ، آل ؛
نهاية؛
النتائج: = ب ؛
نهاية؛
الإجراء WritePort (Port: Word ؛ Conbyte: Byte) ؛
يبدأ
ASM
MOV DX ، منفذ ؛
موف آل ، كونبيت ؛
خارج DX ، آل ؛
نهاية؛
نهاية؛
إضافة 8 مكونات مربع الاختيار ، وقم بتعديل خصائص التسمية التوضيحية الخاصة بهم إلى D0 إلى D7 على التوالي ، وترتيبها مباشرة إلى اليسار.
انقر نقرًا مزدوجًا فوق مربع الاختيار 1 وأضف رمز البرنامج التالي إلى حدث OnClick لمكون CheckBox1:
الإجراء tform1.checkbox1click (المرسل: tobject) ؛
var
ب: بايت ؛
يبدأ
ب: = 0 ؛
إذا تم تحديد مربعات الاختيار 1.chected ثم
ب: = ب أو $ 01 ؛
إذا مربع الاختيار
ب: = ب أو 02 دولار ؛
إذا مربع الاختيار
ب: = ب أو 04 دولار ؛
إذا مربع الاختيار
ب: = ب أو 08 دولار ؛
إذا مربع الاختيار. تحقق ثم
ب: = ب أو 10 دولارات ؛
إذا تم تحديد مربعات الاختيار 6.
ب: = ب أو 20 دولار ؛
إذا تم تحديد مربعات الاختيار 7.
ب: = ب أو 40 دولار ؛
إذا تم تحديد مربعات الاختيار 8. تحقق من ذلك
ب: = ب أو 80 دولار ؛
WritePort (378 دولار ، ب) ؛
نهاية؛
بعد الانتهاء من الإدخال ، قم بتعيين حدث OnClick لـ CheckBox2 على مربع الاختيار 8 ، مكونات مربع الاختيار 7 ، إلى حدث OnClick من CheckBox1: CheckBox1Click.
في هذا الوقت ، قم بتجميع البرنامج وتشغيله ، يمكنك النقر فوق مربعات الاختيار الثمانية هذه للتحكم في إمكانات كل بت من منفذ بيانات LPT1.
بعد ذلك ، تتم إضافة وظيفة مراقبة حالة منفذ البيانات في المنفذ المتوازي.
أضف مكون مؤقت في Form1: Timer1 ، قم بتعديل خاصية تمكينها إلى خاصية كاذبة وفاصل زمني إلى 1.
يضاف إلى حدث Ontimer في Timer1:
الإجراء tform1.timer1timer (المرسل: tobject) ؛
var
ب: بايت ؛
يبدأ
ب: = readport (378 دولارًا) ؛
مربع check1.checked: = ((b أو $ fe) = $ ff) ؛
مربع الاختيار.
مربع الاختيار.
مربع الاختيار.
مربع الاختيار.
checkbox6.checked: = ((b أو $ df) = $ ff) ؛
checkbox7.checked: = ((b أو $ bf) = $ ff) ؛
checkbox8. checked: = ((b أو 7f $) = $ ff) ؛
نهاية؛
إضافة مكون مربع الاختيار ، وخاصية التسمية التوضيحية المعدلة هي "منفذ متوازي" ، وأضفه إلى حدث OnClick الخاص به:
الإجراء tform1.checkbox9click (المرسل: tobject) ؛
يبدأ
Timer1.Enabled: = checkbox9.checked ؛
نهاية؛
قم بتجميع وتشغيل البرنامج ، انقر فوق "مراقبة المنفذ الموازي" ، ويمكنك مراقبة حالة منفذ بيانات المنفذ المتوازي LPT1 378H وتعديل حالته في الوقت الفعلي.
من أجل تسهيل عرض والتحقق من حالة منفذ البيانات 378H ، قمت بعمل دائرة اختبار منفذ متوازية صغيرة ، والتي تستخدم واجهة الطباعة ، و 8 مصابيح LED (الثنائيات المنبعثة للضوء) و 8 1K مقاومات. :
بعد اكتمال مخطط الدائرة ، قم بتثبيته على المنفذ الموازي للكمبيوتر ، وقم بتشغيل البرنامج المكتوب لعرض إمكانات كل جزء من منفذ البيانات بسهولة 378H.
أخيرًا ، دعونا نقوم بتجربة فانوس دوارة أخرى.
أولاً ، أعلن عن متغير عالمي TB: إضافة "TB: BYTE" أدناه "Form1: Tform1":
var
Form1: Tform1 ؛
السل: بايت ؛
ثم أضف مؤقتًا ومربع اختيار في Form1 ، وقم بتعديل الخاصية الممكّنة لـ Timer2 إلى False ، وتعديل الخاصية الفاصلة إلى 300 ، ثم انقر نقرًا مزدوجًا على Timer2 ، وأضفها إلى حدث OnTimer:
الإجراء tform1.timer2timer (المرسل: tobject) ؛
var
ب: بايت ؛
يبدأ
إذا tb = 0 ثم
السل: = 1
آخر
TB: = TB * 2 ؛
WritePort (378 دولار ، TB) ؛
ب: = readport (378 دولار) ؛
مربع check1.checked: = ((b أو $ fe) = $ ff) ؛
مربع الاختيار.
مربع الاختيار.
مربع الاختيار.
مربع الاختيار.
checkbox6.checked: = ((b أو $ df) = $ ff) ؛
checkbox7.checked: = ((b أو $ bf) = $ ff) ؛
checkbox8. checked: = ((b أو 7f $) = $ ff) ؛
نهاية؛
قم بتعديل خاصية Caption of CheckBox10 إلى "Drecolving Light Demo" ، ثم النقر نقرًا مزدوجًا فوق مربع الاختيار 10 ، وأضفه إلى حدث OnClick:
الإجراء tform1.checkbox10click (المرسل: tobject) ؛
يبدأ
timer2.enabled: = checkbox10.checked ؛
نهاية؛
تجميع وتشغيل البرنامج.
انقر على "العرض التوضيحي الفانوس الدوار" ، هل رأيت تأثير "الفانوس الدوار"؟ من خلال تعديل الفاصل الزمني لـ Timer2 ، يمكنك ضبط السرعة.
ملاحظة: لا يمكن استخدام الطريقة المذكورة أعلاه لتضمين الوصول إلى المنافذ المتوازية فقط تحت Win9x.
تم اختبار البرنامج أعلاه وتم تمريره تحت Win98+Delphi6.0