الانتقال الى المشاركة

Primary: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondary: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Pattern: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
مرحبا بك في منتديات ابن خلدون التعليمية

أهلا وسهلا بك زائرنا الكريم، و يشرفنا أن تقوم بالتسجيل إذا رغبت بالمشاركة في المنتدى، أما إذا رغبت بقراءة المواضيع والإطلاع فتفضل بزيارة القسم الذي ترغب أدناه.


تسجيل الدخول التسجيل الآن



صورة

مساعدة في كود برمجة MikroC من فضلكم


  • لا تستطيع كتابة موضوع جديد
  • من فضلك قم بتسجيل دخولك لتتمكن من الرد
عدد ردود الموضوع : 2

#1
غير متصل   ElectroClasse

ElectroClasse

    مشرف المنتدى الجامعي

  • المشرفين
  • 63 المشاركات
  • البلد: Country Flag

بسم الله الرحمن الرحيم

السلام عيكم ورحمة الله وبركاته

أولا وقبل كل شيء تحياتي الخالصة لرواد هذا المنتدى المفيد و المتألق.....

لدي طلب فيما يخص في تقليص كود MIKROC 

الكود يتكون من 8 مداخل من B0 الى B7 

ومن 8 مخارج من C0 الى C7

حيث مبدئ وظيفة هذا الكود هو الدخول في دائرة غير منتهية حيث

لدينا شروط لكل مدخل يكون يساوي 0 فالمخرج المقابل له يكون 1

فمثلا :

if(portb.b0==0){portc=0b00000001;}
if(portb.b1==0){portc=0b00000010;}
if(portb.b2==0){portc=0b00000100;}
 

ولكن كلما زاد عدد المداخل كلما زاد عدد المخارج فمثلا ان كان

مدخلين في نفس الوقت يساويان 0 فالمخرجين المقابلان لهما يسواي 1

فمثلا

if(portb.b0==0&&portb.b1==0){portc=0b00000011;}
if(portb.b0==0&&portb.b2==0){portc=0b00000101;}
 

وبالتأكيد المداخل تختلف احيانا فمثلا يكون احيانا portb.b0 مع portb.b5 

او portb.b1 مع portb.b6 ........

وربما يكون بعض المرات 3 مداخل تكون تساوي 0 و مرات 4 الى 8 مداخل

وهنا الكود يزداد في السطور الى 256 احتمال ...........

وهذا ما جعلني اطلب من المحترفين في تقليص هذا الكود بطريقة متغيرات او ماتريس

والكود بدايته كالاتي

 

void main() {

trisb=0xff;
portb=0x00;
trisc=0x00;
portc=0x00;

do
{
if(portb.b0==0){portc=0b00000001;}
if(portb.b1==0){portc=0b00000010;}
if(portb.b2==0){portc=0b00001000;}
if(portb.b0==0&&portb.b1==0&&portb.b2==0){portc=0b00000011;}
if(portb.b0==1&&portb.b1==1&&portb.b2==1){portc=0b00000000;}
if(portb.b1==1){portc=0b00000000;}
} while(1);
}

وفي الاخير تقبلو مني فائق الاحترام والتقدير وشكرا.....

 



#2
غير متصل   يوسف الضادي

يوسف الضادي

    المدير- فارس مبرمجي العرب

  • المدراء
  • 411 المشاركات
  • المنطقه تيارت
  • البلد: Country Flag

السلام عليكم أخي الكريم

 

أقدم لك اقتراح ممكن يختصر عليك الكود بحيث تقوم أولا باحصاء ناتج كل مدخل هكذا

int n = 0;

if(portb.b0==0) n=n+1;//0001
if(portb.b1==0) n=n+2;//0010
if(portb.b2==0) n=n+4;//0100
if(portb.b3==0) n=n+8;//1000
if(portb.b4==0) n=n+16;//10000
if(portb.b5==0) n=n+32;//100000
if(portb.b6==0) n=n+64;//1000000
if(portb.b7==0) n=n+128;//10000000

portc = n;//ex b0 & b3 & b6 & b7 = 201 =>11001001

يعني مجموع الأعداد المحققة لما تحول الى ثنائي تعطيك محصلة الناتج

 

تحياتي الخالصة


  • halim_mah معجب بهذا

online.jpg


#3
غير متصل   ElectroClasse

ElectroClasse

    مشرف المنتدى الجامعي

  • المشرفين
  • 63 المشاركات
  • البلد: Country Flag

السلام عليكم أخي الكريم

 

أقدم لك اقتراح ممكن يختصر عليك الكود بحيث تقوم أولا باحصاء ناتج كل مدخل هكذا

int n = 0;

if(portb.b0==0) n=n+1;//0001
if(portb.b1==0) n=n+2;//0010
if(portb.b2==0) n=n+4;//0100
if(portb.b3==0) n=n+8;//1000
if(portb.b4==0) n=n+16;//10000
if(portb.b5==0) n=n+32;//100000
if(portb.b6==0) n=n+64;//1000000
if(portb.b7==0) n=n+128;//10000000

portc = n;//ex b0 & b3 & b6 & b7 = 201 =>11001001

يعني مجموع الأعداد المحققة لما تحول الى ثنائي تعطيك محصلة الناتج

 

تحياتي الخالصة

 

شكرا اخي الكريم على هذا الاقتراح وبارك الله فيك على تعبك معي

بعد اضافة بعد التغييرات عمل الكود 100/100  ولكن لدي تطوير الان للكود

في حالة ما يكون دخل يساوي الصفر فيكون الخرج يساوي واحد

ولكن لثلاث بيتات متتابع مثل

if(portb.b0==0){portc=0b00000111;}
if(portb.b1==0){portc=0b00001110;}
if(portb.b2==0){portc=0b00011100;}

حاولت ان اغير في الكود الذي اقترحته ولكن عند جمع دخلين يتغير 

تتابع البيتات مثل

if(portb.b0==0) {n=n+7;}//00000111
if(portb.b1==0) {n=n+14;}//00001110
if(portb.b2==0) {n=n+28;}//00011100
لكن في حالة دخلين يساوي الصفر من المفروض ان يكون بهذا الشكل مثلا
b0 & b3=00001111
ولكن النتيجة 7+14=21
21=000010101

فارجو منكم الافادة اخي الكريم وشكرا






عدد المتواجدون الآن فى الموضوع : 0

0 الأعضاء, 0 الزوار, 0 الأعضاء المجهولين