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

   

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 20-12-2009, 04:45 PM المشاركة 9   
افتراضي



حل السؤال الاول :

كود:
void flashing(char xx) {portb=0xff;delay_ms(300); portb=xx;delay_ms(300); portb=0xff;delay_ms(300); portb=xx;delay_ms(300); } void main() {trisa.f0=1;trisa.f1=1;trisa.f2=1;trisa.f3=1;trisb=0;portb=0; loop: if(porta.f0==0){portb++;if(portb>9)portb=0;while(porta.f0==0){}} if(porta.f1==0){flashing(portb);while(porta.f1==0){}} if(porta.f2==0){if(portb==0)portb=10;portb--;flashing(portb);while(porta.f2==0){}} if(porta.f3==0){portb=0;flashing(portb);while(porta.f3==0){}} goto loop; }
هذا ما توصلت له من حل للسؤال .
عملية الفلاش جعلتها بين الرقم الظاهر على السفن سكمنت و الصفر . لاني لم اتمكن من اطفاء السفن سكمنت .

الخطأ الثاني هو لا يجوز استخدام portb كمؤشر للدالة . هذا التصحيح جاء من الاستاذ احمد
تعمدت و ضع الكود باخطائه رغم انه يعمل لكي نستفيد من هذه الاخطاء .

يوجد خطأ اخر بسيط ارجو اكتشافه عند التشغيل على البروتوس و معالجته هنا .

من الاخطاء التي ارتكبتها و اعترض عليها الكومبايلر هي انني وضعت الكود الرئيسي قبل كود الدالة . ارجو الانتباه الى هذا الخطأ .

تم تصحيح الاخطاء


التعديل الأخير تم بواسطة : حيدر علاج حسن بتاريخ 25-12-2009 الساعة 07:02 PM
اعلانات

mkks87
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2009
المشاركات: 92
نشاط [ mkks87 ]
قوة السمعة:
قديم 20-12-2009, 05:46 PM المشاركة 10   
افتراضي


لاطفاء السفن سيجمنت
portb=0xff

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

tariq9999
:: مهندس ::
تاريخ التسجيل: Aug 2009
المشاركات: 44
نشاط [ tariq9999 ]
قوة السمعة:
قديم 20-12-2009, 07:47 PM المشاركة 11   
افتراضي


حل السؤال الاول
كود:
void flasher(char xx)
{portb=0xff;delay_ms(200); portb=xx;delay_ms(200); portb=0xff;delay_ms(200);
portb=xx; }
void main()
{char x;
trisa.f0=1;trisa.f1=1;trisa.f2=1;trisa.f3=1;trisb=0;
portb=0;
loop:
x=portb;
if(porta.f0==0){portb++;if(portb>9)portb=0;
while(porta.f0==0){}} if(porta.f1==0){flasher(x);
while(porta.f1==0){}}
if(porta.f2==0){if(portb==0)portb=10;portb--;
x=portb;flasher(x);
while(porta.f2==0){}}
if(porta.f3==0){portb=0;
x=portb;flasher(x);
while(porta.f3==0){}}
goto loop; }
مع الشكر للاخ حيدر
اتمنى من الكل المشاركة في حل السؤال
لكي تعم الفائدة


التعديل الأخير تم بواسطة : tariq9999 بتاريخ 20-12-2009 الساعة 07:55 PM

mkks87
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2009
المشاركات: 92
نشاط [ mkks87 ]
قوة السمعة:
قديم 20-12-2009, 08:38 PM المشاركة 12   
افتراضي


حل السؤال الاول

كود:
int x,i;
void flasher()
{
  for(i=0;i<=1;i++)
      {
        portb=x;
        delay_ms(200);
        portb=0xff;
        delay_ms(200);
      }
}
//*************************
void lightstop()
{
     flasher();
    portb=x;
}
//*************************
void increase()
{
    portb++;
    x=portb;

    if(portb>9)
      portb=0;
}
//*************************
void decrease()
{
    if(portb==0)
     portb=10;
     portb--;
   x=portb;


     flasher();
     portb=x;

}

//***************************
void zero()
{
  x=0;
  delay_ms(200);
    flasher();
    portb=0;
}
//****************************
void main()
{
 trisa=0xff;
 trisb=0;
 portb=0;
   while(1)
     {

              if(porta.f0==0)
              {
               increase();
               while(porta.f0==0){}
              }



              if(porta.f1==0)
              {
                lightstop();
                while(porta.f1==0){}
              }

              if(porta.f2==0)
              {
               decrease();
               while(porta.f2==0){}
              }
               
              if(porta.f3==0)
              {
              zero();
              while(porta.f3==0){}
              }
     }
}


التعديل الأخير تم بواسطة : mkks87 بتاريخ 25-12-2009 الساعة 08:19 PM

mkks87
:: مهندس متواجد ::
تاريخ التسجيل: Oct 2009
المشاركات: 92
نشاط [ mkks87 ]
قوة السمعة:
قديم 20-12-2009, 08:46 PM المشاركة 13   
افتراضي


حل السؤال الثالث

كود:
int i,x;
void invert(int y)
{
   portb=y;
   portb=~portb;
   delay_ms(300);
   portb=y;
}
//********************
void main()
{
  trisb=0;
  portb=0b00000001;
  delay_ms(300);
   x=portb;
  invert(x);
    for(i=1;i<=7;i++)
     {
        portb<<=1;
        delay_ms(300);
        x=portb;
        invert(x);
     }


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 20-12-2009, 10:41 PM المشاركة 14   
افتراضي


ما شاء الله . بارك الله فيكم يا اخوان على هذه الجهود .

فعلا عندما جربت portb=0xff; انطفأت السفن سكمنت .
شكرا للاخ mkks87 . لكني لم افهم لماذا تنطفي عندما ياخذ المنفذ b هذه القيمة .
ارجو التوضيح . وشكرا مرة اخرى .


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 20-12-2009, 11:11 PM المشاركة 15   
افتراضي


حل السؤال الثالث . شغال 100%

كود:
void coplement() {portb=~portb;delay_ms(300); portb=~portb*2;delay_ms(300); } char i=0; void main() {trisb=0; while(1) {portb=1;delay_ms(300); for(i=0;i<8;i++) coplement(); }}


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 20-12-2009, 11:38 PM المشاركة 16   
افتراضي


ما هو الكود الخاص لرفع متغير الى قوة (أس) ؟
كثيرا ما احتاج هذا الكود .لما فيه من قوة في حل المتتاليات . كما في السؤال الثالث مثلا .



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