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

   

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 21-02-2016, 02:41 PM المشاركة 65   
افتراضي إعلان عن شبه مسابقة جديدة



بسم الله الرحمن الرحيم.
أعلن أنني إن شاء الله سأضع أول كود تقدم به الأخ مجدي الذي يتكون من 44 تعليمة حيث به غلطة خفية جدا لا يمكن لبرنامج محاكاة اكتشافها.
سيكون السؤال من العبقري الذي يستطيع استنباط العيب الخفي؟؟؟
فهل أنتم مستعدون؟

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 21-02-2016, 05:49 PM المشاركة 66   
افتراضي


السلام عليكم ورحمة الله وبركاته.
جزاك الله أخي على المعلومات المفيدة. ونحن في انتظار المزيد من الشرح والتوسع.. وفي انتظار أن تشرح التعامل مع بت معين.
ولكن لي تعليق على فقرة واحدة وهي خوفك من تأثير الضغط على السويتشات...
هذه المسألة لا خوف منها أبدا.
فتخيل أنك لم تضغط على السويتشات سيكون بورت A أثناء أول دورة شمال يساوي 3 فبعد انتهاء الدورة سيتلقى الأمر بورت A تساوي 7 فيظهر 5 فولت على A2 فقط ولا يحدث شيء للبت الأول والثاني.
كذلك لو كان الضغط على مفتاح واحد أو ضغطت على المفتاحين لن يؤثر أبدا على سير الخطة.
والسلام عليكم ورحمة الله وبركاته.
السلام عليكم ورحمه الله وبركاته

هذا كتاب يشرح مشكله اسمها Read Modify Write Problem

http://www.mediafire.com/view/bmpbk0...te_Problem.pdf

===================================
بالنسبه كيفيه تعامل مع بعدد بتات بدون اي تأثير على بتات اخرى موجوده في نفس البورت
لنأخذ مثال صغير لو اننا نريد ان نصفر كل بورت B بدون ان يتأثر بت 0 و5
ماذا نفعل او ماهي طريقه مناسبه
كود:
portb &=0x21;
ماذا يعني هذا ؟
معناه اني اعمل portb & مع قيمه 0x21 وهذه تساوي بالباينري =0b00100001
وبتالي اي اي بت من portb سيعمل & مع قيمه مقابله له من 0x21 ونتيجه
1 & 0=0
1&1=1
وعليه
portb=0b00x0000x
x هي تعني قيمه هذا بت لن تتأثر لان عملت له & مع 1 فاذا كان هذا بت =1 النتيجه هي 1 واذا كان هذا البت 0 النتيجه 0
اذن نستنتج لكي تعامل مع بتات معينه اريدها هي فقط فأني اعمل & مع 1 بالنسبه للبتات التي لااريدها وبتالي لن تتأثر قيمتها وعمل & مع 0 للبتات التي اريدها وعند ذلك يمكن ان اجعلها 1 او 0 حسب رغبه

نطرح مثال اخر اريد جعل بت 3 و 6 و7 من portb تساوي 1 بدون ان تتأثر قيمت بتات اخرى على افتراض ان portb=0x2C
الجواب
بتات مطلوبه هي 3و6و7 اذن يجب ان نعمل & مع بورت B بقيمه = 0b00110111=
=0x37
كود:
portb &=0x37 +0xC8;
او

كود:
portb =(portb &0x37) +0xC8;
===========================================

سؤال كيف يمكنني ان اعمل Check او toggle او set او
clear

لاي بت اريده ؟مثلا عندما اقول اجعل بت رقمه x =1 فان النتيجه ان هذا بت =1
واذا اخبرته اجعل هذا بت =0 فان قيمته تصبح بصفر واذا قلت له اعكس حالته فان النتيجه اذا كان 1 يصبح 0 واذا 0 يصبح 1 واذا قلت له ماهي حالته اذا كان 1 يخبرني انه يساوي 1 واذا 0 يخبرني =0
الجواب // ان شاء الله في مشاركه القادمه اعطيكم الجواب ولكن منو عنده جواب علما ان الكود صغير جدا وبسيط جدا
طبعا كود لكل check يختلف عن toggle وعن set وعن clear ولكن كلهم متشابهين تقريبا بالكود يعني اختلاف بسيط جدا

تحياتي


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 21-02-2016 الساعة 05:56 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 21-02-2016, 11:16 PM المشاركة 67   
افتراضي


السلام عليكم ورحمه الله وبركاته
وعليك السلام ورحمة الله وبركاته.
هذا كتاب يشرح مشكله اسمها Read Modify Write Problem

http://www.mediafire.com/view/bmpbk0...te_Problem.pdf
سأحاول إن شاء الله فهم الكتاب.. لدي مشكلة بعض الشيء مع الإنجليزي.
===================================
بالنسبه كيفيه تعامل مع بعدد بتات بدون اي تأثير على بتات اخرى موجوده في نفس البورت
لنأخذ مثال صغير لو اننا نريد ان نصفر كل بورت B بدون ان يتأثر بت 0 و5
ماذا نفعل او ماهي طريقه مناسبه
كود:
portb &=0x21;
ماذا يعني هذا ؟
معناه اني اعمل portb & مع قيمه 0x21 وهذه تساوي بالباينري =0b00100001
وبتالي اي اي بت من portb سيعمل & مع قيمه مقابله له من 0x21 ونتيجه
1 & 0=0
1&1=1
وعليه
portb=0b00x0000x
x هي تعني قيمه هذا بت لن تتأثر لان عملت له & مع 1 فاذا كان هذا بت =1 النتيجه هي 1 واذا كان هذا البت 0 النتيجه 0
اذن نستنتج لكي تعامل مع بتات معينه اريدها هي فقط فأني اعمل & مع 1 بالنسبه للبتات التي لااريدها وبتالي لن تتأثر قيمتها وعمل & مع 0 للبتات التي اريدها وعند ذلك يمكن ان اجعلها 1 او 0 حسب رغبه
لحد هنا الكلام سهل ومفهوم.
نطرح مثال اخر اريد جعل بت 3 و 6 و7 من portb تساوي 1 بدون ان تتأثر قيمت بتات اخرى على افتراض ان portb=0x2C
الجواب
بتات مطلوبه هي 3و6و7 اذن يجب ان نعمل & مع بورت B بقيمه = 0b00110111=
=0x37
كود:
portb &=0x37 +0xC8;
او

كود:
portb =(portb &0x37) +0xC8;
===========================================
يمكن أن نبسطها بهذا الشكل:
prtb=portb|0xc8
أو:
portb|=0xc8
أما طريقتك فهي أولا ضمان أن تكون البتات المطلوبة على وضع صفر ثم تجمع 0b11001000 على الناتج لتضمن عدم جمع 1 مع 1 حتى لا يصبح الناتج 10 وتفسد الخطة... طريقة صحيحة ستؤدي الغرض لكن إن لم يكن أحد يعرفها من قبل فربما لا يمكنه فهم كلامك.

سؤال كيف يمكنني ان اعمل Check او toggle او set او
clear

لاي بت اريده ؟مثلا عندما اقول اجعل بت رقمه x =1 فان النتيجه ان هذا بت =1
واذا اخبرته اجعل هذا بت =0 فان قيمته تصبح بصفر واذا قلت له اعكس حالته فان النتيجه اذا كان 1 يصبح 0 واذا 0 يصبح 1 واذا قلت له ماهي حالته اذا كان 1 يخبرني انه يساوي 1 واذا 0 يخبرني =0
الجواب // ان شاء الله في مشاركه القادمه اعطيكم الجواب ولكن منو عنده جواب علما ان الكود صغير جدا وبسيط جدا
طبعا كود لكل check يختلف عن toggle وعن set وعن clear ولكن كلهم متشابهين تقريبا بالكود يعني اختلاف بسيط جدا
في انتظار بقية المشاركات التي تجيب فيها عن هذه الأسئلة.
تحياتي
جاءت الإجابات أعلاه.
جزاك الله خيرا على الشرح الجميل.
وعلى فكرة.. قبل الدخول في هذه المسابقة ما كنت أعرف هذه التعليمات وإنما تعلمتها من بعض الأكواد التي تقدم بها الأخ مجدي والأخ رشاد.. كما تعلمت من كودك حلقة while_do .
والسلام عليكم ورحمة الله وبركاته.


التعديل الأخير تم بواسطة : محمد ع يسى بتاريخ 22-02-2016 الساعة 12:39 AM

محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 22-02-2016, 10:42 PM المشاركة 68   
افتراضي


بسم الله الرحمن الرحيم.
أعلن أنني إن شاء الله سأضع أول كود تقدم به الأخ مجدي الذي يتكون من 44 تعليمة حيث به غلطة خفية جدا لا يمكن لبرنامج محاكاة اكتشافها.
سيكون السؤال من العبقري الذي يستطيع استنباط العيب الخفي؟؟؟
فهل أنتم مستعدون؟
هل أنتم مستعدون؟


magdy_3
:: مهندس متميز ::
تاريخ التسجيل: Aug 2006
الدولة: Philippines
المشاركات: 339
نشاط [ magdy_3 ]
قوة السمعة:
قديم 22-02-2016, 11:15 PM المشاركة 69   
افتراضي السلام عليكم


اخوانى الكرام
مبروك لكل الفائزين
وشكر خاص لاخى حسن هادى محمود
على التهنئة والمعلومات القيمة


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 23-02-2016, 06:18 AM المشاركة 70   
افتراضي


السلام عليكم
الجواب على سؤال في مشاركه 66

كود:
#define Check_bit(var,pos)  (var&(1<<pos) )
#define set_bit(var,pos)  (var|=(1<<pos) )
#define clear_bit(var,pos) ( var&=~(1<<pos) )
#define toggle_bit(var,pos)  (var^=(1<<pos) )


محمد ع يسى
:: عضو فضي ::
تاريخ التسجيل: May 2015
الدولة: مصر
المشاركات: 1,040
نشاط [ محمد ع يسى ]
قوة السمعة:
قديم 26-02-2016, 12:05 AM المشاركة 71   
افتراضي إعلان المسابقة الثانية... من العبقري الذي يستطيع اكتشاف الخطأ الخفي في هذا الكود


بسم الله الرحمن الرحيم.
السلام عليكم ورحمة الله وبركاته.
لقد طرحت هذا الموضوع:
http://www.qariya.info/vb/showthread.php?t=182419
كما وعدت بمسابقة أخرى ساخنة بعد هذه المسابقة.
في انتظار تفاعلكم...


الصورة الرمزية assed
assed
:: عضو فضي ::
تاريخ التسجيل: Jul 2014
الدولة: العراق - بغداد
المشاركات: 1,034
نشاط [ assed ]
قوة السمعة:
قديم 27-02-2016, 02:23 PM المشاركة 72   
افتراضي


السلام عليكم
مبروك الى الاخوة المشاركين عامة والاخوة الفائزين خاصة بهذا الموضوع الشيق ولقد فاتني الكثير منه ولاكن لابأس فكنت اعلم أني لوشاركت بكود سيكون الكود الوحيد الذي يترجم بغير لغة الميكروسي . وان حوالي 90% من أعضاء القرية يعتمدون الميكروسي فمبروك مرة ثانية وزادكم الله من علمهِ



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