الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

برمجة ذواكر موصولة إلى ال LPT باستخدام الأسيمبلي

مغلق
بدأه Ali Issa في 6 يونيو 2005 · 9 رد · 1,171 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحبا

كنت قد طرحت هذا الموضوع في منتدى آخر في هذا الموقع ولكن وجدت الآن

أن مكانه الأنسب هنا

وهو على الشكل التالي:

قد تبدوا الفكرة للوهلة الأولى صعبة التحقيق

ولكن ذلك ممكن فعلياً وذلك من خلال استخدام الأسيمبلي في ارسال القيم (اما عن طريق الأسيمبلي مباشرة أومن خلال توابع جاهزة في لغات البرمجة تؤدي نفس الغرض

طبعاً هذا الكلام بعد إنجاز الجزء المادي الخاص بالذواكر

والتي هي بشكل مبسط ترانستورات وديودات

هنا لن نهتم بالدارات وطريقة توصيلها بشكل أساسي ولكن يكفي أن نتعامل مع هذة الذاكرة الإفتراضية على

أساس الخلايا المكونة من ترانزستور وحيد ومكثفة وحيدة

حيث سنعتبر أنها مؤلفة من أسطر افقية وعمودية وتقاطع كل سطر مع عمود يشكل خلية.

سنقوم بربط الدارة السابقة بالمنفذ التفرعي للحاسب LPT حيث اننا نعلم أن معظم منافذ الكومبيوتر هي منافذ رقمية (ما عدا بوابة الألعاب) أي منافذ غير تشابهيه . حيث كل إشارة هي إما 0 أو 1 ولا تحتمل حلاً آخر .

ويمكن تقسيمها إلى :

منافذ تفرعية : تستطيع التعامل مع عدة بتات في المرة الواحدة .

و منافذ تسلسلية : تستطيع التعامل مع بت واحد في كل مرة .

تستخدم النافذ التسلسلية في الإتصالات , تتميز بسهولة التعامل معها حيث لا تحتاج إلى نوعية خاصة من الكابلات , كمـا ويمكن وصلها إلى مناطق بعيدة جداً ,, كما في شبكة الإنترنت .

ولكنها بطيئة جداً في نقل البيانات وليس لها استخدامات فعلية في مشاريع التحكم الآلي

لذلك اخترنا هنا المنفذ التفرعي وللبدء بالعمل لابد من التعرف ولو بشكل مبسط على هذا المنفذ:

وهو عبارة عن موصل مؤنث مؤلف من 25 خطـاً من النوع D .

وفي الحقيقـة ,, ومن الناحية المنطقية . يتألف هذا المنفذ من ثلاث منافذ موصولة معا .وهو ليس منفذ واحد كمـا يظن البعض .

وهذة المنافذ هــــي :

مخرج معطيـات . بعرض 8 بتات وهو بعنوان 378H

يستخدم لتبادل المعطيات الطبيعي مع الطابعـة, حيث يحمل شفرات الحروف والكلمات

مدخل حالـة . بعرض 5 بتات وهو بعنوان 379H

لة استخدامات خاصة بالطابعة . ( الطابعة خالية من الورق , الطابعة مشغولة .... )

مخرج تحكـم . بعرض 4 بتات وهو بعنوان 37AH

استخداماتة خاصة للتحكم برأس الطباعة ولفائف الورق .

وأي من هـذة المنافذ السابقة يمكن استخدامة بشكل مستقل بغض النظر عن الإستخدامات الأصلية لـة .

وبعد هذة المعلومات الاساسية سنبدأ العمل معاً وهنا لن نضع حلول بل سنضع

أفكار ونناقش احتمالات الحل

نستطيع التعامل مع الذاكرة السابقة في ارسال القيم كما لوكنا نتحكم بإضاءة او إطفاء

ديود ضوئي (لد) عن طريق المنفذ

وهنا أود مناقشة الحلول من خلال توابع الأسمبلي .

علماً أنه يوجد لدينا تابعين في الأسيمبلي مهمان وهما

In & out

حيث يستخدمان على الشكل التالي

مثلا

IN AL,[035h]
MOV AH,AL
IN AL,[0F8h]
MOV DX,0E00h
OUT DX,AX

هنا مثال يوضح الأمر أكثر

سنقوم في هذا التطبيق البسيط على الكتابة في ذاكرة مؤلفة من نصف بايت و بالتالي 4 خلايا (بتات)

وستكون عبارة عن سطرين وعمودين وكما ذكرت مسبقاً سنعتبر أن كل تقاطع لسطر مع عمود

خلية هنا لابد من فهم بعض الافكار البسيطة في كيفة تصميم الذاكرة السابقة والتي ستوصل إلى المنفذ التفرعي LPT

وحتى تتم عملية الوصل هذة لابد من بعض الإلمام بطبيعة المنفذ السابق

والان سنصل الدارة السابقة بالشكل

الأعمدة موصولة بحيث تكون خرج لمفكك ترميز decoder وكما هومعلوم يكون خرجه

هو 2أس (عدد المداخل ) التي ستكون هنا هي مدخل وحيد وبالتلي مخرجين

سيوصل المدخل هنا إلى D0

أصبحنا نستطيع تصميم جدول مناسب للحالات الممكنة على دخل وخرج مفكك التشفير

المدخل -- المخرج A -- المخرج B

1 ------ 1 ------- 0

0 ----- 0 -------- 1

على الترتيب

وسنصل الأسطر إلى موزع في حالة الكتابة

او مجمع في حالة القراءة (تجارياً يوجد الMux/demux ) في قطعة واحدة

وعندها سيكون تفعيل الأول يعني إلغاء الثاني والعكس بالعكس

وفي حالتنا هذه سيكون للموزع خط انتخاب وحيد

خط الإنتخاب -- المخرج الأول -- المخرج الثاني

1 ----- القيمة المدخلة ----- 0

0 ------ 0 ----- القيمة المدخلة

على الترتيب

والان للكتابة ضمن الخلية الموجودة في الزاوية العليا اليسرى سنكون بحاجة للأمور التالية:

- تفعيل مفكك التشفير (يمكن اعتباره مفعل افتراضياً)

- تفعيل الموزع

- تفعيل المخرج A لمفكك التشفير

- تفعيل المخرج الاول c للموزع .

وعملياً يتم تفعيل مفكك التشفير بارسال القيمة 1 منطقي إلى بوابة السماحية Enable الموصولة إلى C0 (Control )

وكذلك الامر بالنسبة للموزع المصول إلى C1

لتفعيل المخرج A نرسل 1 منطقي إلى D0

وبذلك نكون قد وصلنا إلى المطلوب ويتم ذلك برمجياً كما يلي:

#include <stdio.h>
#include <iostream.h>
void main()
{
cout<<"send 1 to data "<<endl;
outport(378,ox1);
cout<<"send 1 to control  C1,C2 "<<endl;
outport(37A,ox3)

مع ملاحظة ان القيم ترسل بالنظام العشري أو الست عشري ويفضل ست عشرياً

ربما نكون بهذا الشكل قد كونا صورة أقرب للموضوع والمطلوب بعد فهم الكود السابق العمل على تحويله

على لغة التجميع ASM

ستصبح الشيفرة بالشكل التالي:

mov Al,1
out 378h,Al
mov Bl,3
out 37Ah,Bl

الآن إذا طلب ذاكرة 4*4 أي 16 بت أي 2بايت

وطلب كتابة القيمة 1 منطقي في الخلايا الفردية

ثم قراءة البت المركزي

باستخدام تعليمات الأسيمبلي حصراً

أتمنى أن أجد التفاعل في هذا الموضوع من كافة الأعضاء الكرام

تم تعديل هذه المشاركة بواسطة Ali Issa في 6 يونيو 2005 في 20:53

#2

أتمنى مناقشة الموضوع من المهتمين وخاصة من المشرفين الكرام

تم تعديل هذه المشاركة بواسطة Ali Issa في 6 يونيو 2005 في 21:31

#3

:unsure:

#4

غريب

أين شباب الأسيمبلي

تم تعديل هذه المشاركة بواسطة Ali Issa في 7 يونيو 2005 في 12:08

#5

السلام عليكم

اولاً حياك الله فى المنتدى وفى قسم الاسمبلى اخى علي, واسف جداً على التاخير فى الرد ولكن كما تعلم فهذه فترة إختبارات واغلبيه الاعضاء الله يكون فى عونهم مغيبين لهذا السبب.

وانا لدى مشاريع لابد من تسليمها خلال ايام لذلك مشاركاتى قليله, فارجو المعذره لى وللإخوه الاعضاء.

الموضوع شيق بالفعل ولكن للاسف انا منذ فتره طويله لا اتعامل معى الاسمبلي فى بيئه ال16 بت, وكما تعلم فإنه فى بيئه ال32 بت لا يمكنك الاتصال بالمنافذ بطريقه مباشره وإنما عليك ان تستخدم دوال الAPI, وبالتحديد نتعامل معى المنافذ على إنها ملفات, يعنى إذا اردت ان ترسل إشاره إلى منفذ معين تفتحه اولاً كما تفتح اى ملف ثم تقوم بإرسال الاشارات إليه او قرائه الاشارات وكانك تكتب او تقراء من ملف.

الفكره عامة يمكنك تنفيذها فى كلتا البيئتين بنفس الاسلوب تقريباً, كنت منذ عامين تقريباً قد كتبت برنامج يتصل بكاميرا عن طريق منفذ الcom وهو معقد اكثر من الLPT ولكن النتيجه كانت افضل من إستخدام الLPT لان الكاميره كانت على بعد 40 متر من السرفر دون ان يحدث تاخير فى إرسال الاشارات, فى الواقع لا اذكر المسافه المسموح بها فى حلة الLPT ولكنها اقصر من الcom بالاضافه لى انك لو استخدمت الLPT فلن تستطيع إلحاق طابعه بالجهاز إلى عن طريق الشبكه او بإستخدام موزع خاص يوزع الاشارات, وذلك لان الجهاز يحتوى على منفذ LPT واحد فقط...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#6

مشكور جدا سيد أحمد على الرد

ولنا عودة

#7
اقتباس
نتعامل معى المنافذ على إنها ملفات, يعنى إذا اردت ان ترسل إشاره إلى منفذ معين تفتحه اولاً كما تفتح اى ملف ثم تقوم بإرسال الاشارات إليه او قرائه الاشارات وكانك تكتب او تقراء من ملف.

هذا الموضوع لانختلف عليه ويحل في معظم لغات البرمجة باستخدام مكاتب ديناميكية dll تتعامل بدورها مع المنافذ

على أساس ملفات

ولكن هذا الموضوع لا يشكل مشكلة

كان المهم هو إيصال فكرة جريئة تستحق التفكير

بالنسبة للمشروع الذي قمت به من فترة -الكميرة- لدي تساؤل

لماذا إخترت الcom في ذلك

ألم يكن بالإمكان إستخدام ال usb أو المنفذ التفرعي عند كون العمل قريب ومشكلة الطابعة محلولة بوجود الusb

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

مشكور مرة أخرى B)

#8

السلام عليكم

بالنسبه للكاميرا اخى الاتصال المسموح به هو عبر منفذ الcom وجميع الاوامر والارشادات كانت مبنيه على اساس إستقبال الاشارات من منفذ الcom, بالتاكيد يمكنك إستخدام محول لغير الاشارات إلى usb ولكن وجدت التعامل معى الcom اسهل.

اما تفاصيل المشروع بإختصار هى على النحو التالى:

جهاز كمبيوتر به برنامج كلاينت وظيفته هى اخذ الاشارات من المستخدم وإرسالها عبر tcp لجهاز كمبيوتر سرفر, هذه الاشارات هى عباره عن ارشادات مشفره ترسل للسرفر وكل اشاره لها معنى مثل zoom , balance color , pan left, pan right ,tilt up والكثير من الاوامر التى تدعمها الكاميرا.

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

هذا بإختصار هو المشروع ونوع الكاميرا هو canon vc-c4 ...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#9

فعلا فكرة المشروع رائعة

لكن عمليا كيف يبدوا الأمر هل سيفي ذلك بالمطلوب

#10

نعم اخى الامر يفى بالمطلوب لانك عندما تستخدم الاسمبلى يمكنك التحكم فى كل بايت وعملية التشفير ماهى إلا تقليل حجم البيانات التى نرسلها عبر tcp حتى لا تاخذ وقت, كذلك عمل مجموعة threads يجعلك تتحكم فى التعامل معى البيانات بحيث تجعل إستقبال البيانات فى thread والتعامل معى الكاميرا فى thread اخر والتشفير فى thread ثالث وهكذا.

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…