السلام عليكم
ارجو المساعدة
من السهل عرض قيمة متغير 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;