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

سؤال عن كيفية إرسال بايتات إلى منافذ الحاسوب

مغلق
بدأه djug في 16 يونيو 2006 · 16 رد · 2,760 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي بعض الأسئلة و أتمنى أن أجد الإجابة عندكم

-كيف يمكن إرسال مجموعة من البيانات على شكل Byte إلى المنافذ db9 أو منفذ الطابعة

-و هل يمكن أستغلال الطريقة لإضاءة مجموعة من led تكون موصولة بهذا المنفذ

-هل توجد مخاطر في ربط مجموعة من led مع هذه المنافذ

- ما هي الإحتياطات الواجب اتخاذها

- هل توجد دروس أو مقالات تتحدث عن هذا الموضوع

و شكرا مسبقا

تم تعديل هذه المشاركة بواسطة djug في 16 يونيو 2006 في 21:16

#2

السلام عليكم ,

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

لديك هذا الشكل التوضيحي

lptleds.gif

pinout.gif

مخرج الطابعة يكون فيه المخارج المرقمة من 2 الى 9 للمعلومات التي يراد ارسالها يعني اذا ارسلت 3 تكون المخارج 2 و 3 مضيئة اما الباقية منطفئة كما يقابلها في النظام الثنائي

لاحظ اتجاه الدايود

وهذا مثال بسيط

  

mov dx , 379h
mov al , 3
out dx , al
7asbi.gif
#3

وعليك السلام

طبعا لا يو جد مخاطر طالما نستعمل ال led -_- إلا ما ذُكر

لكن المشكله هي أن تستعمل دارة أخرى لها تغذية منفصلة عن المخرج (تأخذ التغذية من الكهرباء مثلا) عندها إن حدث خطأ و عاد جزئ من الكهرباء إلى المخرج العوض بسلامتك

الاحتياطات يمكنك فصل دارة المخرج عن الدارة بواسطة (مثلا led مضيئ و ترانزستور في الجانب المقابل يستقبل الضوء ليقوم بتفعيل الدارة الأخرى) :huh:

وهذه صوره مرفقة لعناوين المخارج lpt ;)

post-77339-1150598595_thumb.jpg

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#4

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

أضرار استخدام منفذ الطابعة

دراسة منفذ ال com بشكل تفصيلي,

كيف يمكنني أن أتحكم ببن معين دون أن أغير حالة البنات الأخرى

كيف يمكنني التعامل مع بوابة الLPT

الخرج على منفذ الطابعة في الاكس بي لا يعمل

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

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#5

و االه لاأدري كيف أشكركم

شكرا جزيلا على هذا الكم من المعلومات

#6

أخي Gsalah هل يمكن أت تشرح المخطط قليلا لأني لم أفهمه جيدا

#7

عفوا أخي Gsalah

أخيdjug

البنات من 2-9 بنات معطيات و لديك عنوان مخرجها

وصل عليها leds (ديودات مصدره للضوء) ومقاومات للحماية

أما البنات من 18-25 هي أرضي (0v)

وعند ارسال نبضه رقم خمسة مثلا على المخرج

وهو ما يقابل 00000101

سوف يصل للديود الأول و الثالث فرق كمون قدره 5v :o

مما يؤدي إلى إضاءتها و هكذا........

;)

ملاحظه البنات بالأزرق معطيات

بالأحمر حاله

بالأخضر أرضي

البنات 1 14 16 17 تحكم

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#8

ماذا تقصد بـ "بالأحمر حاله

البنات 1 14 16 17 تحكم"

حالة ماذا و التحكم بماذا

أرجو أت تعذرني أخي على أسئلتي و التي قد تبدو أو هي بالفعل غبية

ثانيا:

إذا أردت أن أعمل برنامجا يضيئ الـ led بطريقة تظهر فيها الإضاءة و كأنهاتتحرك من جهة إلى أخرى فهل البرنامج التالي صحيح

mov dx , 379h

mov ax , 128

mov cx, 16

bcl:sar ax

out dx , al

loop bcl

ثالثا:مامعنى mov dx , 379h

وإذا وضعنا قيمة أخرى ما الذي سيحدث

#9

:angry:

اقتباس
أرجو أت تعذرني أخي على أسئلتي و التي قد تبدو أو هي بالفعل غبية

:angry:

أسئلتك ليست غبية أنت تريد أن تتعلم إسأل ماشئت (الله يرفقني وأعضاء المنتدى للإجابة :lol: )

أولا:

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

المعطيات هي التي تمثل data المنقولة (كحرف مثلا ينقل إلى طابعة......)

التحكم تستخدم للتحكو بالجهاز الموصول

الحاله تعيد إستجابة الجهاز (ما حالته الآن)وهي الوحيدة التى لا يمكنك الخرج عليها

(ولكن تذكر كل ماورد إصطلاح أعني يمكنك أن تصمم طابعة تأخذ بنات التحكم كمعطيات ولكنك تخالف الاصطلاح العالمي!!!!!!)

ثانيا:

أخي عنوان مخرج المعطيات هو 378h

يمكنك إستعمال

mov al,1
rol al,1

sar إزاحة وسوف تثبت قيمة الإشارة

ثالثا:

378 389 38a

هي عنوان المخرج إن بدلته فلن تخرج على ال lpt

(سيحدث خطأ إن كتبت عنوان ليس لأي مخرج)

إذا كان نظام التشغيل الذي تعمل عليه xp :blink:

كل هذا لايعمل لأن المنافذ تعتبر بيئة محمية فيه :huh:

وإنك تحتاج إلى dll أو عليك كتابة خوارزميات كثيره .....

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#10

شكرا أخي الكريم على الرد

هل يمكن مثال عن استعمال بتات الحالة

ثانيا هل يمكن عمل كابل جهازين و من ثم نقل البيانات من أحدهما للآخر

أي أننا نرسل المعطيات من الأول في حين أن الثاني سيستقبلها

ثالثا:

ما هو مقدار شدة التيار التي تخرج من هذه المخارج

#11
اقتباس
شكرا أخي الكريم على الرد

لا شكر على واجب :D

أولا :

بنات الحاله -_-

لتفترض مثلا أنك صممت دارة (حساب الحرارة مثلا)

وأردت أن يصدر الكمبيوتر إنذار إذا كانت الحرارة أكثر من 50

يمكن للدارة التي صممتها أن تخبر الكمبيوتر هذا بواسطة تأريض البن رقم 10 (جعل القيمة 0v)

وباختبار قيمة هذا البن بواسطة تعليمة in تعرف إذا كان مؤرضا أما لا

فتعرف إذا كانت الحرارة فوق الخمسين أم لا......... :)

ثانيا:

إذا أردت هذة موجودة في ويندوز يمكنك عمل شبكة على مخرج lpt

ثالثا :

:blink: :blink:

لاتقل لي بأنك ستعتمد التيار الذي سيقدمه المخرج

عليك تصميم دارة تأخذ الأوامر من المنفذ و هي التي تؤمن ما تريد من تيارات و جهود وذلك حرصا على سلامته

(التيارات صغير +-30ma )

وإن تجاوزتها سلم على المنفذ ;)

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#12

صةالسلام عليكم

أولا:

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

البرنامج هو التالي:

************************

pile segment stack
	 db 100 dup(?)
pile ends
data segment
	 ;pas de données
data ends
code segment
		   assume cs:code,ds:data,ss:pile
debut	  proc 
		mov ax,data
		mov ds,ax   
bcl:	
	mov dx , 379h
	mov al , 0ffffh
	out dx , al
	jmp bcl

stop:	mov ax,4ch
		   int 21h
debut 	endp
code ends
end  debut

*******************************

هل هناك خطأ ما في البرنامج

ثانيا:

لاحظت أن هناك تيارا في المخرج حتى في حالة استخدام المنفذ من طرف أي برنامج

لقد قمت بوصل قطب دايود إلى بتات الحالة مرة وإلى التحكم مرة و القطب الثاني إلى الأرضي فتفاجأت بالدايود يضيء ما التفسير لذلك

ثالثا:

علما أنني أستعمل معالج AMD K6 3d هل هذا يمنع برامج assembleur التي نستعملها (علما أن لغة Assembleur التي نستعملها هي لغة خاصة بمعالجات Intel) من السير الجيد

و شكرا

djug.rar

#13

أولا:

يا أخي djug

استبدل 279 ب 278

mov al,0ffh

ماتبقى صحيح

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

اقتباس
إذا كان نظام التشغيل الذي تعمل عليه xp

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

وإنك تحتاج إلى dll أو عليك كتابة خوارزميات كثيره .....

اقتباس
فتفاجأت بالدايود يضيء

ما المشكلة في ذلك

ثالثا

هناك موضوع في المنتدى يتحدث عن هذا الأمر ابحث عنه

شكوت لوكيع سوءحفظـي ____ فأرشدني إلى ترك المعاصي

وقال لــــي إن العــلم نـــور ____ونـور الله لا يؤتــى لعــــاصي

#14

السلام عليكم

عدت بسؤال آخر :)

أردت أن أعمل دايودا يضيئ ثم ينطفأ دوريا باستعمال التالي:

etiq:

mov dx,387h
mov al,0ffh
out dx,al
nop
nop
nop
mov dx,387h
mov al,0h
out dx,al
nop
nop
nop
jmp etiq

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

أي مكمن المشكل

هل هناك حلول أو طرق أخرى لعمل هذه الإضاءة المتقطعة

إضافة إلى ذلك

أرجو أن تدلوني على مواقع، كتب، أو روابط كتب تتكلم عن parallel port :rolleyes:

#15

السلام عليكم.

سرعة الحاسب هي سرعة كبيرة جدا تتعدى سرعة البطاقة التي تحمل المنفذ التفرعي, أضف إلى ذلك أن المنفذ نفسه لا يصل إلى سرعة البطاقة المركب عليها نفسها.

يفضل دائما إعتماد إجرائية مؤقت فاصل Delay, للفصل بين أمرين متتاليين نحو المنفذ.

ما وقع هو أن المنفذ عمل في أقضصى سرعته التي يمكنه أن يصلها( و لا أعتقد أنها تتعدى تطبيقيا 150 كيلو هيرتز), فالصمام الثنائي تصله إشارة كهربائية مربعة بسرعة قياسية, الصمام سيقوم بالإضاءة والإنطفاء بسرعة كبيرة لا يمكن للعين أن تراها طبعا, فيخيل إليك أنها نصف مضيئة.

هذا لأن الجهد المتوسط هو فقط 2.5 فولت.

المؤقت الفاصل الذي قمت بعمله بواسطة تعليمات nop ليست كافية, بل تحتاج لموقت مضبوط على 1 ثانية.

loop:
mov dx,387h
mov al,0ffh
out dx,al
 call delay
mov dx,387h
mov al,0h
out dx,al
 call delay
jmp loop

أرى أن ينقل هذا الموضوع لقسم الإلكترونيات :D

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

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#16

أين أجد الدالة NOP

و إذا أردت برمجتها فكم من nop يلزم لذلك

أي كم زمن (دورة) nop واحد

و شكرا

#17

NOP أو nop هي تعليمات المعالج لا تقوم بشيء سوى زيادة programm counter.

عليك ببرمجة إجرائية تقوم بتأخير زمني وفق عدد أجزاء الثواني الذي تريدها, في المثال الذي قلته لك في مشاركتي السابقة سميتها delay.

قم بعمل حلقة loop تدور حول نفسها فقط لتضييع الوقت :P , طبعا يجب أن تراعي أن دقتها ترجع لسرعة المعالج الذي تعمل عليه.

لوكنت تبرمج لwin32 يمكنك إستدعاء sleep, أما لو كنت تبرمج في بيئة dos فهناك عدة طرق, منها إستخدام شريحة المؤقت pit.

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

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

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

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