اطلاعیه

Collapse
No announcement yet.

مشکلابتدایی با دستورات

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

    مشکلابتدایی با دستورات

    با سلام خدمت دوستان من تازه کار با کدویزن رو شروع کردم اگه میشه بگید چه طور برنامه زیرو پیادش کنم اخه این برنامه ارور میده :cry2:

    #include <mega32.h>
    #include <delay.h>
    float s;
    void main(void)
    {
    PORTA=0x00;
    DDRA=0xff;
    PORTA.s=1;
    delay_ms(50);
    while (1) {
    PORTA.s=1;
    delay_ms(50);
    s=s++;

    };

    }

    اینم از ارور Error: C:\Users\click\Desktop\avr\main.c(8): the bit selector must be a constant
    بسیاری از ناکامیآ‌ها ناشی از این است که هنگام تسلیم شدن نمیآ‌دانید که تا چه حد به موفقیت نزدیکید .توماس ادیسون

    #2
    پاسخ : مشکلابتدایی با دستورات

    سلام عبارت
    کد:
    PORTA.s
    مشکل داره. اصلا یه همچین چیزی تو کدویژن نداریم.
    برا مشخص کردن یه پورت توی کدویژن از دستورات زیر استفاده می کنیم:

    اگر پورت A به صورت خروجی تعریف شده باشه:
    برای مقدار دهی کل پورت A :
    کد:
    PORTA = 0x12;
    برای مقدار دهی یک پایه از پورت A : مثلا پایه 6
    کد:
    PORTA.6 = 1;
    در این حالت فقط میتونیم 0 یا یک بدیم.

    اگر پورت A به صورت ورودی تعریف شده باشه:
    برای چک کردن مقدار پایه 3 که ببینیم 1 شده یا نه
    کد:
    if(PINA.3 == 1)
    {
    // codes
    }
    else
    {
    // codes
    }
    اللهم صل علی محمد و ال محمد و عجل فرجهم
    >>> www.DMF313.ir <<<
    اگر ژرف یابی و پژوهش نباشد; نتیجه اش یک جا ایستادن،
    در جا زدن و با دنیای پیرامون خود به تدریج بیگانه تر شدن
    است.

    دیدگاه


      #3
      پاسخ : مشکلابتدایی با دستورات

      شما متغیر s رو از نوع float تعریف کردی و به همین خاطر نمی تونی از اون در جایی مثل PORTA.s استفاده کنی.
      این روش شما هم درست و منطقی نیست. ظاهرا شما میخوایید پایه های میکرو یکی یکی روشن بشن. می تونید از تیکه کد پایین استفاده کنید:
      کد:
      #include <mega32.h>
      #include <delay.h>
      
      unsigned char s;
      
      void main (void) {
      
      PORTA=0x00;
      DDRA=0xff;
      
      while (1) {
        for (s=1;s<=0x80;s=s*2) {
          PORTA=s ;
          delay_ms(500) ;
          }
        }
      }
      در ضمن تاخیرت کم بود، بیشترش کردم تا بهتر برنامه دیده بشه.
      ---------
      .
      .
      ...........

      دیدگاه


        #4
        پاسخ : مشکلابتدایی با دستورات

        نوشته اصلی توسط حمید زارع
        سلام عبارت
        کد:
        PORTA.s
        مشکل داره. اصلا یه همچین چیزی تو کدویژن نداریم.
        برا مشخص کردن یه پورت توی کدویژن از دستورات زیر استفاده می کنیم:

        اگر پورت A به صورت خروجی تعریف شده باشه:
        برای مقدار دهی کل پورت A :
        کد:
        PORTA = 0x12;
        برای مقدار دهی یک پایه از پورت A : مثلا پایه 6
        کد:
        PORTA.6 = 1;
        در این حالت فقط میتونیم 0 یا یک بدیم.

        اگر پورت A به صورت ورودی تعریف شده باشه:
        برای چک کردن مقدار پایه 3 که ببینیم 1 شده یا نه
        کد:
        if(PINA.3 == 1)
        {
        // codes
        }
        else
        {
        // codes
        }

        دوست عزیز ممنون از راهنماییتون هدف من از نوشتن این برنامه این بود که میخواستم تمامه پین ها را به ترتیب روشن کنم اگه میشه راحت ترین برنامه را برای اینکار قرار دهید
        بازهم ممنون
        بسیاری از ناکامیآ‌ها ناشی از این است که هنگام تسلیم شدن نمیآ‌دانید که تا چه حد به موفقیت نزدیکید .توماس ادیسون

        دیدگاه


          #5
          پاسخ : مشکلابتدایی با دستورات

          نوشته اصلی توسط ajapyy
          شما متغیر s رو از نوع float تعریف کردی و به همین خاطر نمی تونی از اون در جایی مثل PORTA.s استفاده کنی.
          این روش شما هم درست و منطقی نیست. ظاهرا شما میخوایید پایه های میکرو یکی یکی روشن بشن. می تونید از تیکه کد پایین استفاده کنید:
          کد:
          #include <mega32.h>
          #include <delay.h>
          
          unsigned char s;
          
          void main (void) {
          
          PORTA=0x00;
          DDRA=0xff;
          
          while (1) {
            for (s=1;s<=0x80;s=s*2) {
              PORTA=s ;
              delay_ms(500) ;
              }
            }
          }
          در ضمن تاخیرت کم بود، بیشترش کردم تا بهتر برنامه دیده بشه.

          مهندس ممنون از پاسخ گوییتون اما برنامه شما هر پین رو بعد از روشن کردن خاموش میکنه و بعد پین دیگر رو روشن میکنه من میخام هر پین بعد از روشن شدن به همون صورت بمونه و خاموش نشه اگه ممکنه براتون یه برنامه با این موضوع بهم معرفی کنید
          با زهم ممنون
          بسیاری از ناکامیآ‌ها ناشی از این است که هنگام تسلیم شدن نمیآ‌دانید که تا چه حد به موفقیت نزدیکید .توماس ادیسون

          دیدگاه


            #6
            پاسخ : مشکلابتدایی با دستورات

            باید ترتیب توالی بیت ها به صورت زیر باشه تا قبلی ها هم خاموش نشن.
            کد:
            
            
            #include <mega32.h>
            #include <delay.h>
            
            
            void main (void) {
            char s[9] ={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
            int i = 0;
            PORTA=0x00;
            DDRA=0xff;
            
            
            
            while (1) {
              for (i=0;i<9;i++) {
                PORTA=s[i] ;
                delay_ms(500) ;
                }
              }
            اللهم صل علی محمد و ال محمد و عجل فرجهم
            >>> www.DMF313.ir <<<
            اگر ژرف یابی و پژوهش نباشد; نتیجه اش یک جا ایستادن،
            در جا زدن و با دنیای پیرامون خود به تدریج بیگانه تر شدن
            است.

            دیدگاه


              #7
              پاسخ : مشکلابتدایی با دستورات

              نوشته اصلی توسط حمید زارع
              باید ترتیب توالی بیت ها به صورت زیر باشه تا قبلی ها هم خاموش نشن.
              کد:
              
              
              #include <mega32.h>
              #include <delay.h>
              
              
              void main (void) {
              char s[9] ={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
              int i = 0;
              PORTA=0x00;
              DDRA=0xff;
              
              
              
              while (1) {
                for (i=0;i<9;i++) {
                  PORTA=s[i] ;
                  delay_ms(500) ;
                  }
                }
              دوستع عزیز ممنون از پاسخگوییتون مشکلم حل شد فقط یه سوال دیگه میشه در مورد این کدها یه توضیح بدی
              char s[9] ={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
              بسیاری از ناکامیآ‌ها ناشی از این است که هنگام تسلیم شدن نمیآ‌دانید که تا چه حد به موفقیت نزدیکید .توماس ادیسون

              دیدگاه


                #8
                پاسخ : مشکلابتدایی با دستورات

                نوشته اصلی توسط r e z a
                دوستع عزیز ممنون از پاسخگوییتون مشکلم حل شد فقط یه سوال دیگه میشه در مورد این کدها یه توضیح بدی
                char s[9] ={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
                این یک آرایه ی ده تایی از یک متغییر char هستش (10تا متغییر)
                در اینجا آرایه 0 مقدار هگزا دسیمال 0x00 دارد
                و آرایه ی 1 مقدار 0x01 دارد
                و آرایه ی 2 مقدار 0x03 دارد
                و آرایه ی 3 مقدار 0x07 دارد
                و الی آخر
                در ضمن آرایه ی 10 مقدار دهی نشده است پس مقدار آن0x00است
                برای تبدیل مبنا های هگزادسیمال به باینری و... میتونی از Mobaddel.exe استفاده کنی
                1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                !Electronic On! Programming On
                هوشمندانه سوال بپرسیم!
                http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                دیدگاه


                  #9
                  پاسخ : مشکلابتدایی با دستورات

                  دوستع عزیز ممنون از پاسخگوییتون مشکلم حل شد فقط یه سوال دیگه میشه در مورد این کدها یه توضیح بدی
                  char s[9] ={0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF};
                  به جای اینکه بیایم یکی یکی پورت ها رو مقدار دهی بکنیم اومدیم اینجوری حساب کردیم که اول کار همه پورت ها 0 هستن پس PORTA = 0x0
                  مرحله بعد بیت 0 از پورت A یک میشه پس پورت A میشه 0x01
                  مرحله بعد هم بیت 0 و هم بیت 1 از پورت A یک میشه پس میشه : 0x03
                  مرحله بعد هم بیت 0 هم بیت 1 هم بیت 2 از پورت A یک میشن پس میشه: 0x07
                  همینجور تا آخر......
                  تا همه پورت ها 1 میشن که مقدار پورت A میشه 0xff
                  اللهم صل علی محمد و ال محمد و عجل فرجهم
                  >>> www.DMF313.ir <<<
                  اگر ژرف یابی و پژوهش نباشد; نتیجه اش یک جا ایستادن،
                  در جا زدن و با دنیای پیرامون خود به تدریج بیگانه تر شدن
                  است.

                  دیدگاه

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