fighters

    سلسلة دروس لشرح التعامل والتحكم بالparallel port

    شاطر
    avatar
    fighter
    الـمـديـرالـعـام
    الـمـديـرالـعـام

    عدد الرسائل : 226
    العمر : 28
    مزاجى :
    تاريخ التسجيل : 16/04/2008

    03 سلسلة دروس لشرح التعامل والتحكم بالparallel port

    مُساهمة من طرف fighter في الخميس مايو 01, 2008 3:01 pm

    السلام عليكم

    الدرس الاول :

    ان شاء الله سيكون هذا الدرس عن النظام العشري و الثنائي و التحويل بينهم
    لاننى لا استطيع ان اتحدث عن ال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

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

    اضغط على الفراشتين للتحميل







    _________________

      الوقت/التاريخ الآن هو الجمعة يونيو 22, 2018 5:14 am