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

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

2sa1302
:: عضوية غير مفعلة ::
تاريخ التسجيل: Sep 2005
المشاركات: 82
نشاط [ 2sa1302 ]
قوة السمعة:0
قديم 04-01-2012, 02:00 AM المشاركة 1   
افتراضي كيفية تقسيم البورت الـ 8bit والتعامل مع قسم بمفرده Twitter FaceBook Google+



اخوانى الأعزاء احييكم بتحيه الأسلام - السلام عليكم ورحمة والله وبركاتة

أخوانى أريد أن أستفسر عن كيفية تقسيم البورت 8bit إلى 4بت + 4 بت والتعامل مع كل قسم منهم على حدة وقد أجابنى أخى روبتا ولكنى لم أستوعب الأجابة فأرجو ممن يستطيع المساعدة أن يقدم يد العون لى وسأرفق المشاركة السابقة والتى كانت

السلام عليكم أخوانى الكرام كل عام وأنتم بخير كل عام وأنتم إلى الله أقربأخوانى الكرام أردت أن أسأل إذا كان لدى portb = 0b11110000 وأردت أن أختبر آخر أربعة بيتات فقط فهل من أمر أستطيع به فعل ذلك أو بمعنى آخر لدى portb موصل عليه أربعة سويتشات على الأطراف b7,b6,b5b,b4 وأربعة ليدات على b0,b1,b2,b3 وأريد أن أختبر هل تم الضغط على الأربعة سويتشات جميعا أم لا .أعلم أنه يمكننى أستخدام الأمر portb.rb0 لكنى أسأل هل من الممكن تقسيم port على 4بيت و 4 بيت والتحكم فى كل أربعة على حده .وجزاكم الله خيرا

وكان رد أخى روبوتا

انت تريد قيمة ال4 بيت الخاصة بالليدات مثلا فى المتغير LED
LED=portb&0B00001111
و ال4 بيت الخاصة بالمفاتيح مثلا فى المتغير SWITCH
SWITCH=portb&0B11110000
SWITCH=SWITCH>>4
بالتوفيق

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

اعلانات

robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:102
قديم 04-01-2012, 05:44 AM المشاركة 2   
افتراضي


اسف اخى لتاخرى فى الرد
بالنسبة للدالة & فهى تقوم بعملية AND ومقارنة كل بيت مع المقابل له فى الطرف الاخر مثلا:
11100110
&
00100100
==
00100100
والغرض منها التخلص من ال4 بتات الغير مرغوب فيها فعندما نريد الحصول ال4 البتات الاولى والتخلص من ال 4 الاخيرة لل
1010XXXX
نقوم بالاتى :
1010XXXX & 00001111
وستكون النتيجة
0000XXXX
بغض النظر عن قيمة X سواء كانت صفر او 1
فمثلا عندما تكون قيمة بورت PORTB= 01100010 اى ان الليد الثانى يعمل و الاسويتش رقم 2 ورقم 3 يعملان
ونحن نريد فقط الليدات نستخدم
LED=portb&0B00001111
وستكون قيمة LED = 0B00000010
الان نريد قيمة ال switch :
SWITCH=portb&0B11110000
وستكون قيمة switch = 0B01100000
لاحظ ان قيمة switch غير صحيحة فينبغى ان تكون القيمة 5 وليس 96 كما هى فى هذه الحالة.هذا لانها فى الاربعة خانات العليا .
ولحل هذا الاشكال نقوم بعمل ازاحة باستخدام الدالة >> والتى تزيح الى اليمين :
SWITCH=SWITCH>>4
وظيفتها عمل ازاحة الى اليمين بمقدار اربع ازاحات (اى ان الاربع خانات العليا ستتحول الى خانات سفلى ) فتصبح قيمة
switch =0B00000110

بعد ذلك يمكنك اجراء ما تريد من العمليات على المتغيرين led & switch

اتمنى ان يكون الشرح واضح واذا عندك اى استفسار لاتتردد
بالتوفيق

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

somood
:: مهندس جيد ::
تاريخ التسجيل: Jan 2011
الدولة: نابلس
المشاركات: 222
نشاط [ somood ]
قوة السمعة:0
قديم 04-01-2012, 07:23 AM المشاركة 3   
افتراضي


اخي روبوتا اعتقد انك يمكن ان تختصر من هذا الكود اذا كنت تريد ان تقرأ بتات اعلى من الصفر مثل ان تقرا من البت رقم 4 الى البت 8 بأن تعمل ازاحة مباشرة للأول اربع بتات بأن تكتب
كود:
switch=PORTB>>4
اما اذا كنت تريد ان تقرأ اول اربع بتات فعندها تستخدم and كما ذكرت


robota
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: الخرطوم_السودان
المشاركات: 926
نشاط [ robota ]
قوة السمعة:102
قديم 04-01-2012, 09:17 AM المشاركة 4   
افتراضي


اخي روبوتا اعتقد انك يمكن ان تختصر من هذا الكود اذا كنت تريد ان تقرأ بتات اعلى من الصفر مثل ان تقرا من البت رقم 4 الى البت 8 بأن تعمل ازاحة مباشرة للأول اربع بتات بأن تكتب
كود:
switch=PORTB>>4
اما اذا كنت تريد ان تقرأ اول اربع بتات فعندها تستخدم and كما ذكرت
Good point , you're right
thank you


2sa1302
:: عضوية غير مفعلة ::
تاريخ التسجيل: Sep 2005
المشاركات: 82
نشاط [ 2sa1302 ]
قوة السمعة:0
قديم 04-01-2012, 07:55 PM المشاركة 5   
افتراضي


جزاك الله كل خير أخى الكريم وزادك الله ووهبك من العلم الكثير والكثير

إضافة رد

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

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

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


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

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