اطلاعیه

Collapse
No announcement yet.

سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

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

    #91
    پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

    نوشته اصلی توسط Rohalamin
    عجیبه!
    من همین الان با مگا32a یه کد ساختم. oo:
    یعنی چی نداشت؟ شما ورژن کامپایلرتون چنده؟
    خب ممکنه رو کامپیوتر ایشون این کنابخونه نباشه. چیز خیلی عجیبی نیست.

    دیدگاه


      #92
      پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

      سلام
      مفهوم این خط چیه:
      ( PORTB&=~(1<<k
      قبل از دویدن باید راه رفتن یاد گرفت.

      دیدگاه


        #93
        پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

        نوشته اصلی توسط musefian
        سلام
        مفهوم این خط چیه:
        ( PORTB&=~(1<<k
        1 رو به اندازه k به سمت راست شیفت بده. بعد نقیضش کن(صفر تبدیل به یک، یک تبدیل به صفر) بعد Portb رو باهاش اند کن و در پورت B قرارش بده. البته شیفت شدن یک بیشتر از 8 بیت نمیتونه باشه :smile:
        ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

        امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

        دیدگاه


          #94
          پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

          نوشته اصلی توسط AliRezaDAVE
          1 رو به اندازه k به سمت راست شیفت بده. بعد نقیضش کن(صفر تبدیل به یک، یک تبدیل به صفر) بعد Portb رو باهاش اند کن و در پورت B قرارش بده. البته شیفت شدن یک بیشتر از 8 بیت نمیتونه باشه :smile:
          اخرش رو فهمیدم ولی 1 رو نباید k تا به چپ شیفت داد؟
          قبل از دویدن باید راه رفتن یاد گرفت.

          دیدگاه


            #95
            پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

            ( PORTB&=~(1<<k
            این دستور کل متغیر k را 1 بیت به سمت چپ حرکت میده
            یعنی اگر k = 0b00001111 باشه بعدش k = 0b00011110 میشه.
            حالا اگر مثلا به جای 1 عدد 4 باشه جواب آن k = 0b11110000 میشه
            بعد نقیضش میکنه و بعد با پورت b اند میکنه یعنی اگر هر دو 1 بود خروجی 1 میشه ولی در بقییه حالت ها 0 میشه .
            باد می وزد ...
            میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
            تصمیم با تو است ...

            دیدگاه


              #96
              پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

              نوشته اصلی توسط atrobot
              ( PORTB&=~(1<<k
              این دستور کل متغیر k را 1 بیت به سمت چپ حرکت میده
              a >> n

              a به اندازه n تا به چپ شیفت داده میشه.
              حالا چرا k یک بیت شیفت داده میشه؟مطمین هستید؟
              قبل از دویدن باید راه رفتن یاد گرفت.

              دیدگاه


                #97
                پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                همون حرف شما درسته. باید 1 رو به اندازه k به سمت چپ شیفت داد. آخرشب بود چپ و راستم رو قاطی کرده بودم :smile:
                ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

                امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

                دیدگاه


                  #98
                  پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                  نوشته اصلی توسط musefian
                  a >> n

                  a به اندازه n تا به چپ شیفت داده میشه.
                  حالا چرا k یک بیت شیفت داده میشه؟مطمین هستید؟
                  نه منظور من این است که n تعداد شیفت دادن مغیر به سمت مورد نظر است .
                  باد می وزد ...
                  میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
                  تصمیم با تو است ...

                  دیدگاه


                    #99
                    پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                    کد:
                    PORTB&=~(1<<k)
                    واسه صفر کردن بیت k ام در رجیستر PORTB کاربرد داره.
                    گذشت خصلت مردان است

                    دیدگاه


                      پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                      در مورد دستور while :

                      آیا زمانی که برنامه به دستور while میرسه در صورتی که این دستور دارای یک شرط برای اجرا باشه -برنامه منتظر برقرار شدن شرط میمونه یا در صورت درست نبودن شرط خط بعد از این دستور اجرا میشه ؟ به عنوان مثال :

                      کد:
                      while(!(UCSRA & (1<<TXC)))
                      در این خط برنامه قرار هست در صورت 1 شدن پرچم ارسال در usart دستوراتی اجرا بشه . آیا تا 1 شدن پرچم ارسال برنامه در این خط منتظر میمونه ؟

                      دیدگاه


                        پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                        زمانی که به while میرسه اگر شرط درست باشد دستوراتی که دادی پشت سر هم اجرا میشه و در همان جا می چرخه .
                        ولی اگه درست نباشه و دستورات داده شده پرش میکنه و به ادامه ی برنامه میره .
                        باد می وزد ...
                        میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
                        تصمیم با تو است ...

                        دیدگاه


                          پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                          در مورد do -while هم همینطوره؟ یعنی در صورت درست نبودن شرط while این دستور فقط یک بار اجرا میشه؟

                          یک سوال دیگه هم دارم که شاید تکراری باشه :
                          در این دستور :
                          کد:
                           UCSRA=1<<MPCM
                          این به این معنی هست که بیت MPCM یک بیت شیفت داده بشه . یعنی اگر 0 هست 1 بشه و اگر 1 هست 0 بشه درسته؟ اینو به این دلیل پرسیدم که در یکی از برنامه هایی که در حال تحلیلش هستم در مورد این خط به مشکل خوردم . ممون که جواب میدین

                          دیدگاه


                            پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                            بله do while هم همین طوره .
                            شیفت دادن به معنی این نیست که 0 را 1 کنه
                            متلا : عدد باینری 00001111 را که که بار شیفت بدهید تبدیل به 00011110 میشه .
                            باد می وزد ...
                            میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
                            تصمیم با تو است ...

                            دیدگاه


                              پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                              بله درسته ولی اگر متغیر یک بیتی باشه از صفر به یک و از یک به صفر باید تغییر کنه. معمولا برای 1 کردن پرچم های وقفه باید بیت پرچم یک واحد شیفت داده بشه تا از 1 به صفر تغییر وضعیت بده در مورد دستور DO -WHILE در یکی از آموزش های استاد کی نژاد برنامه ای هست که ظاهرا" اینطور نیست گفته شده که برنامه دستورات داخل DO رو مرتب چک میکنه چون شرط خروج از حلقه درون دستور DO - WHILE هست . این برنامه:
                              کد:
                              unsigned char Receive_Data(void)
                              {
                               unsigned char temp;
                               Timeout=Timeout_value;
                               do            
                               {
                               if(Timeout==0)return 0;
                               }
                               while(!(UCSRA & (1<<RXC))); 
                               temp=UCSRB;
                               Data=UDR;
                               return 1;
                              }
                              در توضیح ای خطوط گفته شد که برنامه در صورت رسیدن TIMEOUT به صفر از برنامه خارج میشه

                              دیدگاه


                                پاسخ : سوالات مربوط به زبان C و کدویژن(در میکرو AVR)

                                در کد زیر:
                                کد:
                                .
                                .
                                .
                                while(1){
                                while(!(TIFR& 0x40));
                                .
                                .
                                {
                                روی خط while(!(TIFR& 0x40)); برنامه صبر میکنه؟
                                قبل از دویدن باید راه رفتن یاد گرفت.

                                دیدگاه

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