اطلاعیه

Collapse
No announcement yet.

کوچ کردن از کدویژن به AtmelStudio

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

    #31
    پاسخ : کوچ کردن از کدویژن به AtmelStudio

    سلام

    مهندس یه جایی دیدم for رو به این طریق نوشته بود.معنیش چیه؟
    کد:
    for(;;)
    تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


    تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

    دیدگاه


      #32
      پاسخ : کوچ کردن از کدویژن به AtmelStudio

      (;for همون حلقه بینهایت هستش
      جای مهندس جواب دادم ؟؟؟؟!? :mrgreen:
      گذشت خصلت مردان است

      دیدگاه


        #33
        پاسخ : کوچ کردن از کدویژن به AtmelStudio

        نوشته اصلی توسط سعید دلشاد منور
        بله درسته.
        البته اینم میشه
        PORTB=(0<<PB3)|(0<<PB4)|(0<<PB4) |(0<<PB6)
        (نتونستم بصورت صحیح اینجا بنویسم کپی کنی درست میشه)
        از استاد RubeuS شرمنده هستم که دارم میپرم وسط حرف :"> :"> :"> :">
        شما لطف دارین .

        فقط ... :redface: :redface:
        فکر نمیکنم این خط که نوشتین درست باشه .

        ( من خودم اینطوریم که ، بزرگترین توهین برای من اینه که چیزه اشتباهی بلد باشم و کسی بهم نگه )

        فکر میکنم من قبلا هم تو همین تاپیک گفته بودم تو یه پست مربوط به شیفت منطقی:

        نکته خیلی خیلی مهم:
        صفر را به هر اندازه به چپ شیفت دهید ، فرقی نمیکنه و جواب صفر میشه پس کد زیر :

        کد:
        PORTB=(0<<PB3)|(0<<PB4)|(0<<PB4)|(0<<PB6)
        مثل این میشه:
        کد:
        PORTB= 0 | 0 | 0 | 0
        واین یعنی:
        کد:
        PORTB= 0
        راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
        کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
        نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
        http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
        انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

        دیدگاه


          #34
          پاسخ : کوچ کردن از کدویژن به AtmelStudio

          نوشته اصلی توسط سعید دلشاد منور
          سلام

          مهندس یه جایی دیدم for رو به این طریق نوشته بود.معنیش چیه؟
          کد:
          for(;;)
          همون طور که دوستمون فرمودند ، این یک حلقه بینهایت است.

          سوال: چرا این یک حلقه بینهایت است؟!
          جواب: اول باید بررسی کنیم که حلقه بینهایت یعنی چه؟
          زمانی که شما حلقه های for و while و do while را طوری بنویسید که هیچوقت شرط حلقه false یا صفر نشود ، به این میگن یک حلقه بینهایت. پس اگر به جای شرط این حلقه ها از TRUE یا یک عدد ثابت غیر صفر استفاده کنید یا چیزی ننویسید ، حلقه به حلقه بینهایت بدل میشود.( در رابطه با خالی گذاشتن جای شرط در کامپایلر های مختلف برخورد متفاوت است ولی در اکثر مواقع فقط میشه جای شرط for را خالی گذاشت.)

          ساختار for :
          کد:
          for( دستوری که بعد از اتمام هر دور اجرا میشود , شرط , مقادیر اولیه )
          حالا اگر شما جای شرط را خالی بزارید یا یک عدد ثابت بزارید ، حلقه for به حلقه بینهایت بدل میشود.
          راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
          کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
          نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
          http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
          انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

          دیدگاه


            #35
            پاسخ : کوچ کردن از کدویژن به AtmelStudio

            نوشته اصلی توسط صادق ابراهیمی
            سلام
            برای صفر کردن درسته
            کد:
            PORTB &= ~((1<<PB6) | (1<<PB4) | (1<<PB3));
            که از پورت B بیت 3-4 و 6 رو صفر میکنه و بقیه رو دست نمیزنه ؟
            سلام سید
            حالا این دورسته
            چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

            دیدگاه


              #36
              پاسخ : کوچ کردن از کدویژن به AtmelStudio

              نوشته اصلی توسط صادق ابراهیمی
              سلام سید
              حالا این دورسته
              سلام

              بله بله صد در صد .

              میخواید بررسی کنیم؟

              بررسی میکنیم:
              کد:
              PORTB &= ~((1<<PB6) | (1<<PB4) | (1<<PB3));
              که میشه :
              کد:
              PORTB &= ~((0b01000000) | (0b00010000) | (0b00001000));
              و این میشه:
              کد:
              PORTB &= ~(0b01011000);
              که میشه:
              کد:
              PORTB &= 0b10100111 ;
              که این همون:
              کد:
              PORTB = PORTB & 0b10100111;
              است

              که یعنی PORTB را با 0b10100111 اند(AND ) کن بریز تو PORTB . که با اینکار بیتهای 3 و 4 و 6 صفر میشن و بقیه همون مقدار قبلی میمونن.


              راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
              کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
              نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
              http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
              انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

              دیدگاه


                #37
                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                یه سوال.
                تو کد ویژن مثلا میخاستیم چک کنیم که اگر یک پین صفر یا یک بود فلان کار رو بکن.
                مانند زیر
                کد:
                if(PIND.0==0) {
                }
                خب تو اینجا چطوری میشه؟
                تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


                تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

                دیدگاه


                  #38
                  پاسخ : کوچ کردن از کدویژن به AtmelStudio

                  نوشته اصلی توسط سعید دلشاد منور
                  یه سوال.
                  تو کد ویژن مثلا میخاستیم چک کنیم که اگر یک پین صفر یا یک بود فلان کار رو بکن.
                  مانند زیر
                  کد:
                  if(PIND.0==0) {
                  }
                  خب تو اینجا چطوری میشه؟
                  صفحه قبل همین تاپیک:
                  http://www.eca.ir/forum2/index.php?topic=81025.msg494372#msg494372

                  میتوانید از همون دیفاینی که نوشتم استفاده کنید و به عنوان مثال به جای دستور بالا از:

                  کد:
                  if(getbit(PIND,0)==0) {
                  }
                  یا

                  کد:
                  if(!getbit(PIND,0)) {
                  }
                  استفاده کنید
                  راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                  کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                  نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                  http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                  انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                  دیدگاه


                    #39
                    پاسخ : کوچ کردن از کدویژن به AtmelStudio

                    نوشته اصلی توسط RubeuS
                    صفحه قبل همین تاپیک:
                    http://www.eca.ir/forum2/index.php?topic=81025.msg494372#msg494372

                    میتوانید از همون دیفاینی که نوشتم استفاده کنید و به عنوان مثال به جای دستور بالا از:

                    کد:
                    if(getbit(PIND,0)==0) {
                    }
                    یا

                    کد:
                    if(!getbit(PIND,0)) {
                    }
                    استفاده کنید
                    به نظرم کد اولی میگه که اگر پین d0 صفر بود فلان کار رو بکن.
                    و کد دومی هم میگه که اگر پین d0 یک بود فلان کار رو بکن.درسته؟
                    در ضمن اون getbit چیه؟ اگه اونو ننویسیم میشه؟
                    مثل این:
                    کد:
                    if(PIND,0==0) {
                    }
                    راستی میشه یه مثال ساده ای هم بزنین؟
                    تکاور شدن جرات افزون کند.....هراس از دل مرد بیرون کند....


                    تا تکاور به تن زخمی خود جان دارد....مرز اسلام در این ملک نگهبان دارد.........

                    دیدگاه


                      #40
                      پاسخ : کوچ کردن از کدویژن به AtmelStudio

                      نوشته اصلی توسط سعید دلشاد منور
                      به نظرم کد اولی میگه که اگر پین d0 صفر بود فلان کار رو بکن.
                      و کد دومی هم میگه که اگر پین d0 یک بود فلان کار رو بکن.درسته؟
                      در ضمن اون getbit چیه؟ اگه اونو ننویسیم میشه؟
                      مثل این:
                      کد:
                      if(PIND,0==0) {
                      }
                      در رابطه با کد اول که نوشتم . یعنی:
                      کد:
                      if(getbit(PIND,0)==0) {
                      }
                      همون طور که گفتید ، یعنی اگر پین d0 صفر بود فلان کار رو بکن.


                      در رابطه با کد دومی که نوشتم. یعنی:
                      کد:
                      if(!getbit(PIND,0)) {
                      }
                      یعنی اگر پین d0 یک نبود فلان کار رو بکن.(یا اگر پین d0 صفر بود فلان کار را بکن - که کارش با کد اول یکی است) به علامت ! در پشت شرط توجه کنید.

                      getbit یک دیفاینه که خودم نوشتم و بشکل زیر تعریف شده:

                      کد:
                      #define getbit(port,bit) ( ( (port) & (1 << (bit) ) ) >> (bit) )
                      در رابطه با ننوشتنش هم :
                      نه نمیشه باید نوشتش ، کامپایلر اون کدی که نوشتین را ارور سینتکسی میده و درست نیست.
                      حتما باید دیفاین بالا را بالای برنامه تون بگذارید و بعد همون طور که نوشتم شرط را بنویسید.

                      نکته اساسی: از کلیه دوستان میخوام حتما کدهایی را که هرجایی بهش بر میخورند ، کامپایل کنند و در محیط دیباگ نتیجه کد را ببینند.
                      (انشالله اگر وقت شد زمانی که خواستم پست اول را ویرایش کنم، مطالبی در رابطه با کار کردن در محیط دیباگ atmel studio قرار میدهم)
                      راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                      کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                      نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                      http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                      انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                      دیدگاه


                        #41
                        پاسخ : کوچ کردن از کدویژن به AtmelStudio

                        سلام آقای مرتضوی
                        من خیلی وسواس(املاش درسته؟)دارم که یه استاد به اون کاری که کردم مهر تایید بزنه وبس
                        حالا یه سوال دیگه اگه داخل یه تابع هر عملیاتی انجام بدیم داخل همون تابع محرمانه باقی میمونه غیر از اون توابعی که متغییرهای خروجیشون ازنوع غیر محلی (چی میگن به این نوع متغییر؟،همونی که بالای تابع مین هست) هستن.
                        اگه یک بیت رو ست یا کلر کنیم موقعی که از تابع خارج بشیم به همون حالت قبل بر میگرده؟

                        ببخشید یکی دیگه
                        تفاوت این دو چیه
                        کد:
                        UCSRB=(1<<MPCM)
                        UCSRB|=(1<<MPCM)
                        رجیستر هارومیدونم چیه آیا هرو مقدار یک رو به بیت میدن ؟
                        چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

                        دیدگاه


                          #42
                          پاسخ : کوچ کردن از کدویژن به AtmelStudio

                          سلام

                          بنده میخواستم 6 بیت اول از داده data را با شرط زیر ( منطق شرط با مشاهده عبارت قابل فهم است ) بررسی کنم ، آیا اینکار در اتمل استودیو صحیح است ؟

                          باتشکر .


                          کد:
                          if ( ( temp_even % 2==1 ) && ( data & 0x0002==0 ) && (data & 0x0004==0) && (data & 0x0008==0) && (data & 0x0010==0) && (data & 0x0020==1 ) )

                          دیدگاه


                            #43
                            پاسخ : کوچ کردن از کدویژن به AtmelStudio

                            نوشته اصلی توسط صادق ابراهیمی
                            سلام آقای مرتضوی
                            من خیلی وسواس(املاش درسته؟)دارم که یه استاد به اون کاری که کردم مهر تایید بزنه وبس
                            حالا یه سوال دیگه اگه داخل یه تابع هر عملیاتی انجام بدیم داخل همون تابع محرمانه باقی میمونه غیر از اون توابعی که متغییرهای خروجیشون ازنوع غیر محلی (چی میگن به این نوع متغییر؟،همونی که بالای تابع مین هست) هستن.
                            اگه یک بیت رو ست یا کلر کنیم موقعی که از تابع خارج بشیم به همون حالت قبل بر میگرده؟
                            ا اتفاقا چند وقت پیش یکی همین سوال براش پیش اومده بود . یادم نمیاد کدوم تاپیک بود و الانم که تاپیکش قدیمی شده . دوباره مینویسم:
                            متغییر ها از نظر حوزه دسترسی به اونها دو نوع هستند:
                            1- Local Variables یا متغییر های محلی
                            2- Global Variables یا متغییر های سراسری

                            متغییرهای محلی از نظر طول عمر ( Life Time) به دو دسته تقسیم میشوند:

                            1- متغییر هایی که در بین اجرای برنامه با اجرای یک تابع ایجاد میشوند و بعد از اتمام تابع و بازگشت ( return) ازبین میروند و به اصطلاح لایف تایمشون تموم میشه.

                            2- متغییر هایی که در بین اجرای برنامه با اجرای یک تابع ایجاد میشوند ولی تا آخر برنامه در حافظه وجود دارند و با بازگشت از تابع از بین نمیروند.(به این نوع متغییر ها به اصطلاح static میگویند.)
                            نکته : متغییر های با حوزه دسترسی سراسری دارای لایف تایم همیشگی از اول اجرا تا پایان اجرا هستند.

                            خوب اینها یه سری تعریف بود . بریم سر وقت عمل و کدنویسی با سی:

                            برای اینکار باید اولا متغییر در جای مناسب اعلان شود و ثانیا در هنگام اعلان متغییر ، باید به کامپایلر گفته بشه که متغییر مورد نظر تو کدوم دسته از نظر لایف تایم قرار داره:
                            1- متغییر در جای مناسب اعلان شود: اینکار باعث میشه که به کامپایلر بگیم که متغییر از نظر حوزه دسترسی در کدام دسته قرا میگیرد :
                            اگر خارج از توابع متغییر اعلان بشه ( عموما بالای برنامه خارج از توابع) یعنی متغییر از نوع global یا سراسری است.
                            اگر داخل تابعی اعلان بشه (در سی باید اول تابع اعلان بشه) یعنی متغییر از نوع local یا محلی همون تابع است.


                            2- در هنگام اعلان متغییر ، باید به کامپایلر گفته بشه که متغییر مورد نظر تو کدوم دسته از نظر لایف تایم قرار داره :
                            کلا برای اعلان یک متغییر معمولی باید به شکل زیر عمل کرد:
                            کد:
                            [Life Time] Type Name;
                            برای اینکار قبل از نوشتن Type متغییر ، باید از کلمات کلیدی زیر استفاده کرد:

                            auto : این کلمه کلیدی به کامپایلر میگه که من میخوام متغییرم از نوع 1 ( متغییر هایی که در بین اجرای برنامه با اجرای یک تابع ایجاد میشوند و بعد از اتمام تابع و بازگشت ( return) ازبین میروند ) اعلان کنم . (اگر قبل از نوشتن Type هیچ چیزی ننویسیم یعنی متغییر از نوع auto است)
                            برای مثال اعلان زیر در یک تابع که خیلی هم استفاده میشه :
                            کد:
                            int x;
                            با اعلان زیر یکی است:
                            کد:
                            auto int x;
                            static : این کلمه کلیدی به کامپایلر میگه که من میخوام متغییرم از نوع 2 ( متغییر هایی که در بین اجرای برنامه با اجرای یک تابع ایجاد میشوند ولی تا آخر برنامه در حافظه وجود دارند و با بازگشت از تابع از بین نمیروند ) اعلان کنم .

                            برای مثال اعلان زیر در یک تابع باعث میشه که متغییر x در اجرای اول تابع ایجاد شود و تا آخر برنامه ازبین نرود:
                            کد:
                            static int x;
                            البته کلمات کلیدی دیگه هم هست : شامل register و extern که مربوط به لایف تایم نمیشه.
                            راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                            کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                            نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                            انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                            دیدگاه


                              #44
                              پاسخ : کوچ کردن از کدویژن به AtmelStudio

                              نوشته اصلی توسط صادق ابراهیمی
                              اگه یک بیت رو ست یا کلر کنیم موقعی که از تابع خارج بشیم به همون حالت قبل بر میگرده؟

                              ببخشید یکی دیگه
                              تفاوت این دو چیه
                              کد:
                              UCSRB=(1<<MPCM)
                              UCSRB|=(1<<MPCM)
                              رجیستر هارومیدونم چیه آیا هرو مقدار یک رو به بیت میدن ؟
                              دوباره سلام
                              ببخشید اینا جاموندن
                              you rock dude
                              چه یافت آنــکه تــو را گم کرد وچه گم کرد آنـکه تــو را یافت.

                              دیدگاه


                                #45
                                پاسخ : کوچ کردن از کدویژن به AtmelStudio

                                نوشته اصلی توسط صادق ابراهیمی
                                ببخشید یکی دیگه
                                تفاوت این دو چیه
                                کد:
                                UCSRB=(1<<MPCM)
                                UCSRB|=(1<<MPCM)
                                رجیستر هارومیدونم چیه آیا هرو مقدار یک رو به بیت میدن ؟
                                دستور اول بیت MPCM را یک و بقیه بیت ها را صفر میکنه.

                                دستور دوم بیت MPCM را یک میکنه و بقیه بیت ها را دست نمیزنه و مقدار قبلیشون میمونن.

                                -------------------------------------
                                ویرایش :
                                با تشکر از تذکر جناب کی نژاد:
                                توجه شود که بیت MPCM درون رجیستر UCSRA قرار دارد .

                                همچنین دستور دوم باعث یک اشتباه بزرگ میشود:
                                چون در این رجیستر تعدادی فلگ وجود دارد ، در صورتی که مقدار این فلگ ها یک باشد دستور دوم باعث پاک کردن ناخواسته فلگها میشود.
                                راه اندازی ماژول nrf24l01p برای codevision (ارتباط بیسیم بین دو میکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                                کوچ کردن از کدویژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                                نحوه نوشتن اصولی یک لایبرری و درایور نرم افزاری( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                                http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول های مختلف توسط اعضای انجمن
                                انشالله به زودی تاپیک ها به روز رسانی خواهد شد،

                                دیدگاه

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