قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

السايبورج9
:: مهندس ::
تاريخ التسجيل: Oct 2006
المشاركات: 44
نشاط [ السايبورج9 ]
قوة السمعة:0
قديم 27-11-2008, 11:45 AM المشاركة 1   
افتراضي سلسلة دروس التحكم بمنفذ الطابعة للمساعدة على بناء روبوت موضوع مفيد جدا جدا Twitter FaceBook Google+



السلام عليكم

الدرس الاول :

ان شاء الله سيكون هذا الدرس عن النظام العشري و الثنائي و التحويل بينهم لاننى لا استطيع ان اتحدث عن الparallel Port قبل ان تكونوا ملمين بهذه النقطة وهذا الدرس منقول من منتدى الموسوعة العربية للكمبيوتر والانترنت مع بعض التصرف والتعديلات

النظام العشري

نسخدم النظام هذا يوميا في حياتنا و في اغلب امورنا و هو بكل بساطة نظام الارقام على الاساس العشري و يحتوي على :

0 1 2 3 4 5 6 7 8 9

عدد مكونات النظام العشري هو عشرة ارقام , و هذا هو سبب تسميته بهذا الاسم حيث انه يكبر بعد كل عشرة ارقام, مثل بسيط هو التالي:

0

1

2

3

4

5

6

7

8

9

10

11

لاحظتم الاختلاف بين ال9 و ال10 , حيث انه عندما انتهينا من الارقام ( اخر رقم هو 9) رجعنا للرقم الاول و هو صفر و اضفنا واحد بجواره, و لو واصلنا العد لوصلنا الى ال19 و ثم نرجع الرقم 9 الى صفر و نضيف واحد الى الرقم 1 فيصبح الرقم 20 و هكذا دواليك.



النظام الثنائي

كما قلنا ان النظام العشري يعتمد على اساس عشرة ارقام , فارقم الثنائي يعتمد على رقمين فقط و هما صفر وواحد

1 0

و بنفس الطريقة , عند الانتهاء من الارقام نضيف الرقم صفر و نزيد واحد , كما هو الحال

0

1

10

11

100

101

110

111

نلاحظ ان النظام يتكون من رقمين فقط , صفر وواحد نبدا بالصفر ثم واحد ثم نضيف واحد مكانالصفر و نضيف واحد بجوار الرقم عند انتهاء الارقام ( في حالتنا انتهاء الارقام هما صفر وواحد)

ملاحظة مهمة:

الرقم التالي 101100 في النظام الثنائي لا يلفظ ب مئة وعشرة الالاف و مئة! بل يلفظ كالتالي:

واحد صفر واحد واحد صفر صفر

و القاعدة هي : عندما نصل الى رقم صاحب الترتيب الذي يساوي اساس نظام العد ( في حالتنا هنا النظام الثنائي مثلا) نقوم بوضع الرقم صفر في الخانة الحالية و نضيف الرقم واحد في الجهة التالية له.

الآن بعد ان عرفنا ما هو النظام العشري و النظام الثنائي , سنقوم بالتحويل بينهم .

التحويل من النظام الثنائي الى العشري


اولا, لنتكلم عن النظام العشري, مثلا الرقم 134 يتكون من التالي :

= 10 ^0 ضرب 4 + 10^1 ضرب 3 + 10^2 ضرب 1

= 4 + 30 + 100

= 134

اليست الطريقة صحيحة؟

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

التحويل الى الرقم الثنائي شبيه جدا , و بما ان اساس النظان الثنائي هو 2 فنستبدل الرقم 10 ب 2 , لنأخذ رقما معيناً لنحوله, فليكن الرقم 111 مثلا

111

= 2^0 ضرب 1 + 2^1 ضرب 1 + 2^2 ضرب 1

= 1 + 2 + 4

= 7

جميل! الرقم 111 ( واحد واحد واحد) يساوي 7 في النظام العشري.

لنجرب رقماً اخر و ليكن 1010101

1010101

= 2^0 ضرب 1 + 2^1 ضرب 0 + 2^2 ضرب 1 + 2^3 ضرب صفر + 2^4 ضرب واحد + 2^5 ضرب صفر + 2^6 ضرب واحد

= 1 + 0 + 4 + 0 + 16 + 0 + 64

= 85


التحويل من النظام العشري الى الثنائي

الطريقة اسهل هنا, لنأخذ مثلا الرقم 400 , لتحويله نقسمه على 2 , فاذا كانت الناتج يحتوي على كسور فيكون الرقم الاول من الرقم الثنائي هو 1 و اذا لم يتحوي على كسور فيكون الرقم صفر

يعني :

400 / 2 = 200 , اذن الرقم الاول هو صفر

200 / 2 = 100 , صفر

100 / 2 = 50 , صفر ايضا

50 / 2 = 25 , صفر

25 / 2 = 12 , واحد

12 / 2 = 6 , صفر

6 / 2 = 3 , صفر

3 / 2 = 1 , واحد

1 / 2 = 0 , واحد

يصبح الناتج هو = 110010000

تبدأ من الاسفل و تصعد للاعلى .


بهذا نكون قد انتهينا من شرح هذه النقطة

وعلى فكرة من يرى ان عملية التحويل بين النظامين صعبة الى حد ما فيمكنه ان يستخدم الالة الحاسبةالخاصة بالويندوز لاجراء هذه التحويلات بعد تحويلها للscientific mode
ولكن كان لابد من هذا الشرح لتكونوا ملمين بالموضوع

سؤال يطرح نفسه: ما علاقة هذا الموضوع بالparallel port؟؟
باختصار شديد الparallel Port مكون من 25 pin مقسمين بطريقة معينة (ساشرحها بالتفصيل فى الدرس القادم) يوجد منهم 8pin يسموا بالData Port
كل pin تأخذالقيمة 1 او 0
1 معناها ان هذه الpin عليها جهد مقداره حوالى 5 فولت
0 معناها ان هذه الpin ليس عليها فولت (تقريبا)
فاذا كنا على سبيل المثال نوصل 8 اجهزة مختلفين فى 8 pin وكنا نريد تشغيل الجهاز الاول فقط واطفاء الباقين
فى هذه الحالة لا يمكن التعامل مع الpin الاولى ( او اى pin) منفردة بل لابد من التعامل ع ال8 pin فى نفس الوقت
لذلك نضطر الى ارسال قيمة ثنائية الى parallel Port كالتالى00000001 وهى تساوى 1 بالعشرى ايضا
ماذا لو كنا نريد تشغيل الاجهزة 1و5و8واطفاء الباقين
فى هذه الحالة نريد ارسال قيمة ثنائية تساوى 10010001 وهذه القيمة تساوى 145 بالنظام العشرى وهكذا


دوال للتحويل بين انظمة الاعداد المختلفة

اولا : دالة للتحويل من النظام العشرى الى النظام الثنائى Decimal to Binary

كود
'A quick and easy function to return the binary value for a number, without any preceding "0"s. This function returns a string with the binary number.

Public Function dec2bin(mynum As Variant) As String
Dim loopcounter As Integer
If mynum >= 2 ^ 31 Then
dec2bin = "Too big"
Exit Function
End If
Do
If (mynum And 2 ^ loopcounter) = 2 ^ loopcounter Then
dec2bin = "1" & dec2bin
Else
dec2bin = "0" & dec2bin
End If
loopcounter = loopcounter + 1
Loop Until 2 ^ loopcounter > mynum
End Function


دالة ثانية للتحويل Decimal Integer to Binary String

كود
'just put this function any where and pass a a number from 0 to 65535. You can pass higher that I think, but the function only pads the resulting string to 8 digit string or 16 digit string. anyway here it is:

Function dec2bin(N As Long) As String
ell:
If N > 0 Then
a = a + CStr(N Mod 2)
N = N \ 2
GoTo ell
End If
a = StrReverse(a)
g = Len(a)
If g < 8 Then
t = String$(8 - Len(a), "0")
a = t + a
End If
If g > 8 Then
t = String$(16 - Len(a), "0")
a = t + a
End If
dec2bin = a
End Function


دالة ثالثة للتحويل Decimal to Binary ايضا

كود
Private Sub Command1_Click()
MsgBox Dec2Bin(1024)
End Sub

Function Dec2Bin(ByVal n As Long) As String
Do Until n = 0
If (n Mod 2) Then Dec2Bin = "1" & Dec2Bin Else Dec2Bin = "0" & Dec2Bin
n = n \ 2
Loop
End Function


ثانيا : دالة للتحويل من Binary to Decimal

كود
'A simple function to convert Binary numbers to Decimal numbers.

Function Bin2Dec(Num As String) As Long
Dim n As Integer
n = Len(Num) - 1 a = n
Do While n > -1
x = Mid(Num, ((a + 1) - n), 1)
Bin2Dec = IIf((x = "1"), Bin2Dec + (2 ^ (n)), Bin2Dec)
n = n - 1
Loop
End Function
الرجاء الرد

اعلانات

السايبورج9
:: مهندس ::
تاريخ التسجيل: Oct 2006
المشاركات: 44
نشاط [ السايبورج9 ]
قوة السمعة:0
قديم 27-11-2008, 11:53 AM المشاركة 2   
افتراضي الدرس الثاني


مقدمة عن الLPT
http://www.4shared.com/file/10031758...llel_port.html

علما انني وضعت الموضوع في عدة منتديات هذا يعني انه ليس منقول مطلقا

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

السايبورج9
:: مهندس ::
تاريخ التسجيل: Oct 2006
المشاركات: 44
نشاط [ السايبورج9 ]
قوة السمعة:0
قديم 27-11-2008, 11:59 AM المشاركة 3   
افتراضي الدرس الثالث


هنا بعض البرامج المصنوعة بالفيجوال بيسك
للمساعدة

هنا نتكلم عن ال complement هو قلب قيمه ال pin فإذا كانت 0 تصبح 1 والعكس صحيح

ويتم ذلك عن طريق ال Xor فمثلا إذا اردنا قلب القيمه المطبقه على ال pin رقم 5 من ال control Port دون التأثير على باقي الpins نقوم بقرأه القيمه المطبقه على ال control Port و نعمل لها Xor مع 00010000 و هو يكافيء 16 بالعشري
(اي نعمل Xor مع الصفر لكل البينات التى لا نريد تغير قيمتها و Xor مع الواحد للبينه التى نريد قلبها ، فإذا كانت القيمه المطبقه على البينه رقم 5 هي 1 فإن 1 Xor مع 1 بنتج 0 وإذا كانت القيمه المطبقه على البينه رقم 5 هي 0 فإن 0 Xor مع 1 بنتج 1 )

نفرض ان القيمه المطبقه على البورت هي 00101001 ونريد قلب البينه رقم 5

00101001
Xor
00010000
---------------
00111001

وهنا تلاحظ ان البينه رقم 5 اصبحت 1 بدلا من ال 0 اما باقي البينات لم تتأثر

ولو فرضنا ان القيمه المطبقه على البورت هي 01010100 ونريد قلب البينه رقم 5

01010100
Xor
00010000
----------------
01000100

وتلاحظ ان البينه رقم 5 اصبحت 0 بدلا من 1 وباقي البينات لم تتأثر


و لتنفيذ ذلك بالفيجوال بيسيك نستخدم الكود التالي :

كود
Private Sub Command1_Click()
value1 = inp(&H37A)
value2 = value1 Xor 16
out &H37A, value2
End Sub


التعديل الأخير تم بواسطة : السايبورج9 بتاريخ 27-11-2008 الساعة 12:03 PM

السايبورج9
:: مهندس ::
تاريخ التسجيل: Oct 2006
المشاركات: 44
نشاط [ السايبورج9 ]
قوة السمعة:0
قديم 27-11-2008, 12:06 PM المشاركة 4   
افتراضي الدرس الرابع


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


geniusse01
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2008
الدولة: Jordan - Amman
المشاركات: 1,139
نشاط [ geniusse01 ]
قوة السمعة:106
قديم 28-11-2008, 08:59 PM المشاركة 5   
افتراضي


مشكور جدا اخي السايبورج...

ربنا يبارك فيك ويجزيك الخير.....ربنا يوفقك وينفع بك الاسلام والمسلمين...


alyameen
:: مهندس ::
تاريخ التسجيل: Dec 2008
المشاركات: 8
نشاط [ alyameen ]
قوة السمعة:0
قديم 15-12-2008, 08:07 PM المشاركة 6   
افتراضي موضوع ممتاز


شكراً على هذا الدرس الرائع يا أستاذ

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:32 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025