|
السلام عليكم ورحمة الله وبركاته.
جزاك الله أخي على المعلومات المفيدة. ونحن في انتظار المزيد من الشرح والتوسع.. وفي انتظار أن تشرح التعامل مع بت معين.
ولكن لي تعليق على فقرة واحدة وهي خوفك من تأثير الضغط على السويتشات...
هذه المسألة لا خوف منها أبدا.
فتخيل أنك لم تضغط على السويتشات سيكون بورت A أثناء أول دورة شمال يساوي 3 فبعد انتهاء الدورة سيتلقى الأمر بورت A تساوي 7 فيظهر 5 فولت على A2 فقط ولا يحدث شيء للبت الأول والثاني.
كذلك لو كان الضغط على مفتاح واحد أو ضغطت على المفتاحين لن يؤثر أبدا على سير الخطة.
والسلام عليكم ورحمة الله وبركاته.
|
السلام عليكم ورحمه الله وبركاته
هذا كتاب يشرح مشكله اسمها Read Modify Write Problem
http://www.mediafire.com/view/bmpbk0...te_Problem.pdf
===================================
بالنسبه كيفيه تعامل مع بعدد بتات بدون اي تأثير على بتات اخرى موجوده في نفس البورت
لنأخذ مثال صغير لو اننا نريد ان نصفر كل بورت B بدون ان يتأثر بت 0 و5
ماذا نفعل او ماهي طريقه مناسبه
ماذا يعني هذا ؟
معناه اني اعمل 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 =(portb &0x37) +0xC8;
===========================================
سؤال كيف يمكنني ان اعمل
Check او toggle او set او
clear
لاي بت اريده ؟مثلا عندما اقول اجعل بت رقمه x =1 فان النتيجه ان هذا بت =1
واذا اخبرته اجعل هذا بت =0 فان قيمته تصبح بصفر واذا قلت له اعكس حالته فان النتيجه اذا كان 1 يصبح 0 واذا 0 يصبح 1 واذا قلت له ماهي حالته اذا كان 1 يخبرني انه يساوي 1 واذا 0 يخبرني =0
الجواب // ان شاء الله في مشاركه القادمه اعطيكم الجواب ولكن منو عنده جواب علما ان الكود صغير جدا وبسيط جدا
طبعا كود لكل check يختلف عن toggle وعن set وعن clear ولكن كلهم متشابهين تقريبا بالكود يعني اختلاف بسيط جدا
تحياتي