اطلاعیه

Collapse
No announcement yet.

کمک درباره برنامه ی فلشر ساده(فوری)

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

    کمک درباره برنامه ی فلشر ساده(فوری)

    دوستان خوبم سلام.امیدوارم حال همتون خوب باشه.بچه من امتحان اصول میکرو دارم.یه برنامه فلشر هست که استاد گفته میاد برای امتحان.به قسمت از برنامه هست متوجه نمیشمش.این برنامشه
    /************************************************** ***
    Project : LED Flasher
    Author : Reza Sepas Yar
    Company : Pishro Noavaran Kavosh
    Chip type : ATmega16
    Clock frequency : 4.000000 MHz
    ************************************************** ***/

    #include<mega16.h>
    #include<delay.h>
    #define xtal 4000000

    int i;

    void main (void)
    {

    DDRD = 0xFF;

    while(1)
    {

    for(i = 1; i <= 128; i = i*2)
    {
    PORTD = i;
    delay_ms(100);
    }

    for(i = 128; i > 1; i = i/2)
    {
    PORTD = i;
    delay_ms(100);
    }

    }

    }
    دوستان من دستور if و این که چرا 128 ؟؟128 یعنی چی؟؟؟
    و این که DDRD = 0xFF; چیه؟؟؟؟؟یعنی چی؟؟درکش نمیکنم
    و این که میشه دستور while رو اخر نوشت؟؟؟
    و این که چرا ما از int i استفاده کردیم؟؟اصلا چی هست؟؟؟
    دوستان من فردا امتحانشو دارم ممنون میشم زود جواب بدین.ممنونم از همتون
    اگر خودت رو لایق خیلی چیزا میدونی,باید خیلی هم تلاش کنی...

    #2
    پاسخ : کمک درباره برنامه ی فلشر ساده(فوری)

    و یه چیز دیگه اونم اینه که برا چی ما از int i استفاده کردیم؟؟؟؟دلیلش چیه؟؟؟؟
    اگر خودت رو لایق خیلی چیزا میدونی,باید خیلی هم تلاش کنی...

    دیدگاه


      #3
      پاسخ : کمک درباره برنامه ی فلشر ساده(فوری)

      با سلام،

      با فرض اینکه 8 عدد LED روی پورت D میکرو متصل شده، با این دستور، پورت D بطور کامل خروجی تعریف میشه
      DDRD = 0xFF;

      رجیستر DDRD هم یه رجیستر توی میکرو هستش که جهت ورودی خروجی پورت D میکرو رو مشخص میکنه ( هر بیتی که یک باشه، بیت متناظرش در پین میکرو خروجی خواهد بود )

      عدد 128 که معادل باینریش میشه 10000000 یعنی اینکه PORTD.7 یا همون بیت هفتم از پورت D روشن میشه

      این برنامه قراره که LED ها رو به این ترتیب روشن و خاموش کنه :
      00000001
      00000010
      00000100
      00001000
      00010000
      00100000
      01000000
      10000000
      01000000
      00100000
      00010000
      00001000
      00000100
      00000010
      00000001

      این تغییر وضعیت ها در حلقه (While(1 که یه لوپ بی نهایت هست، بطور مستمر تکرار میشه!

      در حلقه For اول اینها تولید میشن :
      00000001
      00000010
      00000100
      00001000
      00010000
      00100000
      01000000

      یعنی اینکه از یک تا 128 با این شرط که در هر بار تکرار حلقه عدد قبلی در 2 ضرب میشه و یا به عبارتی، یکی به چپ شیفت پیدا میکنه

      و در حلقه For دوم هم اینها تولید میشن :
      10000000
      01000000
      00100000
      00010000
      00001000
      00000100
      00000010

      یعنی مثل For اول، فقط با تقسیم عدد قبلی به 2 یا همون یک شیفت به راست ......

      int i که با توجه به برنامه میتونست unsigned char i هم باشه، تعریف یک متغیر به اسم i هستش ( که حتما خوندی دیگه! )

      دستور while همین حالا هم آخر نوشته شده :surprised: چونکه :

      while(1)
      {
      .
      .
      .

      }
      مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

      Sh_Nourbakhsh@Yahoo.com

      http://s2.picofile.com/file/7170362468/_Wall_e_.jp

      دیدگاه

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