اطلاعیه

Collapse
No announcement yet.

مشکل در برنامه avr

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

    مشکل در برنامه avr

    با سلام.
    بنده با میخواستم با avr شمارنهده طراحی کنم که در پست قبلی با کمک یکی از دوستان انجام شد و حالا تعداد بیت های شمارش را افزایش دادم که چند تا مشکل پیش امد:
    1-led اول و دوم به ترتیب روشن میشوند و باقی led ها به ترتیب روشن نمیشوند.پ
    2-بعضی از led ها اصلا روشن نمیشوند.
    کد برنامه ای که نوشتم به صورت زیر است
    void main(void)
    { static int c=0;
    DDRA.0=0;
    DDRB=0b11111111;
    while (1)
    { while (!PINA.0)
    { delay_ms(50);
    switch (c)
    {


    case 0:
    PORTB=0b00000001;
    c++;
    break;




    case 1:


    PORTB=0b00000010;
    c++;
    break;






    case 2:
    PORTB=00000100;
    c++;
    break;




    case 3:


    PORTB=00001000;
    c++;
    break;




    case 4:


    PORTB=00010000;
    c++;
    break;


    case 5:


    PORTB=00100000;
    c++;
    break;


    case 6:


    PORTB=01000000;
    c++;
    break;




    case 7:


    PORTB=10000000;
    c++;
    break;












    }
    }
    }
    }
    ببخشید اگر اینجا بد کپی میشه.
    ممنون از دوستان که وقت میگذارند و پاسخ میدهند.

    #2
    پاسخ : مشکل در برنامه avr

    نوشته اصلی توسط saati.sms نمایش پست ها
    با سلام.
    بنده با میخواستم با avr شمارنهده طراحی کنم که در پست قبلی با کمک یکی از دوستان انجام شد و حالا تعداد بیت های شمارش را افزایش دادم که چند تا مشکل پیش امد:
    1-led اول و دوم به ترتیب روشن میشوند و باقی led ها به ترتیب روشن نمیشوند.پ
    2-بعضی از led ها اصلا روشن نمیشوند.
    کد برنامه ای که نوشتم به صورت زیر است
    void main(void)
    { static int c=0;
    DDRA.0=0;
    DDRB=0b11111111;
    while (1)
    { while (!PINA.0)
    { delay_ms(50);
    switch (c)
    {


    case 0:
    PORTB=0b00000001;
    c++;
    break;




    case 1:


    PORTB=0b00000010;
    c++;
    break;






    case 2:
    PORTB=00000100;
    c++;
    break;




    case 3:


    PORTB=00001000;
    c++;
    break;




    case 4:


    PORTB=00010000;
    c++;
    break;


    case 5:


    PORTB=00100000;
    c++;
    break;


    case 6:


    PORTB=01000000;
    c++;
    break;




    case 7:


    PORTB=10000000;
    c++;
    break;












    }
    }
    }
    }
    ببخشید اگر اینجا بد کپی میشه.
    ممنون از دوستان که وقت میگذارند و پاسخ میدهند.
    سلام
    برای اینکه شما اعدادو به صورت باینری باید وارد کنید که از LED سوم به بعد اعدادو به صورت دسیمال وارد کردید! برای مثلا برای LED آخر باید بنویسید:

    PORTB = 0b10000000;

    اما شما اون 0b اول عدد رو ننوشتید! برای جلوگیری از همچین مشکلی از این دستور هم میشه استفاده کرد:

    PORTB = (1<<c);

    ضمنا چون متغیر c قرار نیست مقداری بیشتر از 255 بگیره و قرار نیست عدد منفی در اون ذخیره بشه، به صورت unsigned char تعریف بشه بهتره! کلمه static هم لازم نیست قبلش بیاد.

    دیدگاه

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