اطلاعیه

Collapse
No announcement yet.

پیدا کردن باگ برنامه :|

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پیدا کردن باگ برنامه :|

    سلام دوستان برنامه ساده ای که در زیر میبینید به این صورت باید عمل کند که 8 تا led هست از شماره 0 تا 7 به ترتیب روشن میشه و در صورت برعکس شدن پین بی 0 از همون led که روشن بوده برعکس حرکت کنه نکتش همینه :angry:حالا یه باگ کوچیکی داره این که در حالت حرکت از صفر تا هفت اگر یه دور بزنه بار دوم دیگه led اول روشن نمیشه
    لطفا توجه کنید منطق باید همینطور باشه یعنی میدونم میشه به روش های دیگه درستش کرد
    حالا یه نگاهی بکنید به این چهار تا خط ببینید جریانش چیه :

    کد:
    
    
    
    #include <mega16.h>
    #include <delay.h>
    unsigned int i;
    void main(void) {
     i=1;
    DDRA=0XFF;
     while(1)
     {
     if (PINB.0==1) {
      for (i=i;i<256;i=i*2) {
      PORTA=i;
      delay_ms (1000);
       if(i==128)
       i=1;
      if (PINB.0==0){
      break;
      }
      };
      }
    else
     {  
      for (i=i;i>0;i=i/2) {
      PORTA=i;
      delay_ms (1000);
       if(i==1)
      i=256;  
      if (PINB.0==1)
      break;
      };
     };
     }
    }

    #2
    پاسخ : پیدا کردن باگ برنامه :|

    سلام
    اگه فقط می خواید این مشکل حل بشه
    نوشته اصلی توسط snow patrol
    ...در حالت حرکت از صفر تا هفت اگر یه دور بزنه بار دوم دیگه led اول روشن نمیشه
    شما نحوه عمل کرد for رو گویا نمیدونید
    for به این صورت کار میکنه که (برای بار اول) ابتدا مقدار اولیه متغییر رو قرار میده سپس شرط رو چک میکنه بعد برنامه داخل for رو انجام میده و در اخر گام for رو انجام میده
    برنامه شما وقتی که i=128 به صورت زیر عمل میکنه:
    برنامه شما هنگامی که تشخیص میده i برابر شده با 128 مقدار i رو مساوی 1 قرار میده در حالی که هنوز گام بعدی(*2) رو انجام نداده (چون که به اخر برنامه نرسیده)حالا که i=1 شده به اخر برنامه for میرسه و گام رو اجرا میکنه و i=2 میشه و برنامه میره به اول for و چک کردن شرط اش،شرط باز درسته و iکه مساوی 2 هستش رو روی port قرار میده.پس i=1 رو شما ندارین که روی پورت قرار بدین
    کدتون باید اینجوری باشه
    کد:
          for (i=i;i<=256;i=i*2)
            {
            if(i==256)
              i=1;  
            PORTA=i;
            delay_ms (100);
    
            if (PINB.0==0)
              break;
            };

    دیدگاه

    لطفا صبر کنید...
    X