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

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

kaliloo
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: اليمن - عدن
المشاركات: 30
نشاط [ kaliloo ]
قوة السمعة:0
قديم 20-03-2015, 03:34 PM المشاركة 1   
افتراضي قراءة القيمة من 10pins من منفذين مختلفين واسنادها لمتغير واحد Twitter FaceBook Google+



السلام عليكم

ارجو المساعدة

من السهل عرض قيمة متغير 10بت واسنادها لمخارج المنفذ الاول 8بت و2بت في منفذ اخر بطرق عديدة .. اسهلها بكتابة
( portc.b0=y.bo; ..................portd.b3=y.b9

لكن الذي لم اتمكن منه هو العكس

اي انه كيف يمكن اخذ القيمة من عشرة مداخل في منفذين مختلفين واسناد القيمة الى متغير 10 بت؟
مثال : اريد اخذ القيمة 8bit من المنفذ b ...والبت التاسع من portd.b6 ... والبت العاشر من portd.b7 ...... واسناد العشر القيم للمتغير y --10bit

حاولت فعل ذلك بطريقة اسناد قيمة كل بت على حده ( y.b0=portb.b0; .......y.b9=portd.b7 ) لكن اعطى مترجم المايكروسي رسالة خطاء بانه لايمكن كتابة المتغير y بالصوره y.b0

اذاً ... ماهي الطريقة الصحيحة ..

وشكراً لكم

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:136
قديم 20-03-2015, 06:41 PM المشاركة 2   
افتراضي


السلام عليكم

ارجو المساعدة

من السهل عرض قيمة متغير 10بت واسنادها لمخارج المنفذ الاول 8بت و2بت في منفذ اخر بطرق عديدة .. اسهلها بكتابة
( portc.b0=y.bo; ..................portd.b3=y.b9

لكن الذي لم اتمكن منه هو العكس

اي انه كيف يمكن اخذ القيمة من عشرة مداخل في منفذين مختلفين واسناد القيمة الى متغير 10 بت؟
مثال : اريد اخذ القيمة 8bit من المنفذ b ...والبت التاسع من portd.b6 ... والبت العاشر من portd.b7 ...... واسناد العشر القيم للمتغير y --10bit

حاولت فعل ذلك بطريقة اسناد قيمة كل بت على حده ( y.b0=portb.b0; .......y.b9=portd.b7 ) لكن اعطى مترجم المايكروسي رسالة خطاء بانه لايمكن كتابة المتغير y بالصوره y.b0

اذاً ... ماهي الطريقة الصحيحة ..

وشكراً لكم
السلام عليكم
تفضل هذه طريقه وهي بعمل تشفيت
كود:
int value=0;
char gg=127;
bit gg1 , gg2;
void main()
{
 cmcon=7;
 trisa=0;trisb=0; portb=0; porta=0;
 gg1=1;
 gg2=1;
 value=gg1<<8;
 value +=gg2<<9;
 value +=gg;
 porta= value>>8;
 portb=value;
}
حيث افترضت متغير من نوع int وسميته value
حيث افترضت متغير gg وهو 8 بت
و gg1 كانه بت يعني portd.f0
وكذلك gg2
الان اريد جمع كل gg , gg1 , gg2 الى متغير واحد اسمه value
هنا نأخذ اول 8 بت ونضيفها مباشره الى متغير value

بعدين محتاج اضيف gg1 وهو البت 9 من متغير value
هنا نعمل gg1 شفت 8 مرات ليحتل مرتبه تاسعه في متغير value
ايضا نعمل gg2 شفت 9 مرات ليحتل مرتبه العاشره في متغير value

اما اذا عندك متغيرين وتريد أضافتهما الى متغير واحد الامر بسيط
انشأ متغير من نوع int وقم بجمع معه متغير الاول ثم قم بجمع متغير الثاني بعد عمل شفت له 8 مرات اي
كود:
value=value1;
value += value2<<8;

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

kaliloo
:: مهندس ::
تاريخ التسجيل: May 2013
الدولة: اليمن - عدن
المشاركات: 30
نشاط [ kaliloo ]
قوة السمعة:0
قديم 20-03-2015, 07:27 PM المشاركة 3   
افتراضي


السلام عليكم
تفضل هذه طريقه وهي بعمل تشفيت
كود:
int value=0;
char gg=127;
bit gg1 , gg2;
void main()
{
 cmcon=7;
 trisa=0;trisb=0; portb=0; porta=0;
 gg1=1;
 gg2=1;
 value=gg1<<8;
 value +=gg2<<9;
 value +=gg;
 porta= value>>8;
 portb=value;
}
حيث افترضت متغير من نوع int وسميته value
حيث افترضت متغير gg وهو 8 بت
و gg1 كانه بت يعني portd.f0
وكذلك gg2
الان اريد جمع كل gg , gg1 , gg2 الى متغير واحد اسمه value
هنا نأخذ اول 8 بت ونضيفها مباشره الى متغير value

بعدين محتاج اضيف gg1 وهو البت 9 من متغير value
هنا نعمل gg1 شفت 8 مرات ليحتل مرتبه تاسعه في متغير value
ايضا نعمل gg2 شفت 9 مرات ليحتل مرتبه العاشره في متغير value

اما اذا عندك متغيرين وتريد أضافتهما الى متغير واحد الامر بسيط
انشأ متغير من نوع int وقم بجمع معه متغير الاول ثم قم بجمع متغير الثاني بعد عمل شفت له 8 مرات اي
كود:
value=value1;
value += value2<<8;
مشكور اخي حسن .. الفكرة ممتازة ......سيتم التطبيق واعلامكم بالنتائج

تحياتي لك

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 0 اعجاب
شكراً حسن هادي محمود ( شكر العضو على هذه المشاركة )
إضافة رد

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

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

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


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

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