اطلاعیه

Collapse
No announcement yet.

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

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

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

    نوشته اصلی توسط musefian
    در کد زیر:
    کد:
    .
    .
    .
    while(1){
    while(!(TIFR& 0x40));
    .
    .
    {
    روی خط while(!(TIFR& 0x40)); برنامه صبر میکنه؟
    تا زمانی که بیت ششم TIFR صفر باشه و یک نشده باشد بله صبر میکند.
    ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

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

    دیدگاه


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

      در مورد مقدار دادن به بیت های رجیستر ها بصورت زیر توضیح بدید که چه مزایایی داره نسبت به مقدار دادن یه عدد هگز به رجیستر؟این شکل در بقیه کمپایلر ها هم عمل میکنه؟
      کد:
      ADMUX=(1<<REFS1) | ( 1:<<REFS0)
      یه سوال دیگه: متغییر char برای کاراکتر ها بکار میره،پس چرا signed یا بدون علامت تعریفش میکنند،مگه کاراکترها هم علامت دارن؟
      قبل از دویدن باید راه رفتن یاد گرفت.

      دیدگاه


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

        نوشته اصلی توسط musefian
        در مورد مقدار دادن به بیت های رجیستر ها بصورت زیر توضیح بدید که چه مزایایی داره نسبت به مقدار دادن یه عدد هگز به رجیستر؟این شکل در بقیه کمپایلر ها هم عمل میکنه؟
        کد:
        ADMUX=(1<<REFS1) | ( 1:<<REFS0)
        یه سوال دیگه: متغییر char برای کاراکتر ها بکار میره،پس چرا signed یا بدون علامت تعریفش میکنند،مگه کاراکترها هم علامت دارن؟
        lمزیتش خوانایی بیشتر برای زمانی است که میخوایم فقط یک بیت رو صفر یا یک کنیم.
        مخصوصا وقتی که رجیستر شامل بیتهای کنترلی و پرچم هم هست.
        در مورد متغیر char هم باید گفت این متغیر از نوع 8 بیت هست و دلیل اینکه بهش صفت علامت دار یا بدون علامت رو میدن برمیگرده به زمانی که میخوایم ازش برای محاسبات استفاده کنیم. در حالت کلی وقتی برای نمایش کاراکتر استفاده بشه علامتی نداره اما وقتی میخوای برای محاسبات استفاده کنی کامپایلر میتونه ازش تفسیر یک علامت دار رو داشته باشه که از -128 تا 127 تغییر میکنه
        ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

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

        دیدگاه


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

          سوالی در مورد دستور pragma used دارم .
          توی یکی از برنامه های sim900 دستوری وجود داره به شکلی که گفتم . میخواستم بدونم از دوستان کسی میدونه این دستور چیکار میکنه؟
          کد:
          #pragma used+
           char getchar(void) 
           { 
           char data;
           while (rx_counter==0) wait_loop(); 
          
           data=rx_buffer[rx_rd_index++]; 
           #if RX_BUFFER_SIZE != 256 
           if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; 
           #endif #asm("cli")
           
           --rx_counter; 
           #asm("sei") 
           return data;
           } 
          #pragma used-

          دیدگاه


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

            فرض کنید یه ارایه داشته باشیم بصورت:
            unsigned char arr[8]={0x00, 0x00, 0x81, 0x81, 0x81, 0x7E, 0x00, 0x08};
            چطوری میتونیم به صورت یکجا هر کدوم از عددای این ارایه رو یک واحد به راست شیفت بدیم؟

            دیدگاه


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

              نوشته اصلی توسط ((O-I-O))
              فرض کنید یه ارایه داشته باشیم بصورت:
              unsigned char arr[8]={0x00, 0x00, 0x81, 0x81, 0x81, 0x7E, 0x00, 0x08};
              چطوری میتونیم به صورت یکجا هر کدوم از عددای این ارایه رو یک واحد به راست شیفت بدیم؟
              سوال هوشه؟
              فکر نمیکنم مجموعه خونه ها رو یکجا بتونید تغییر بدید
              گفت که دیوانه نهی لایق این خانه نهی

              دیدگاه


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

                سلام
                من یه کدی مثلا 50 رو به LCD میفرستم ولی در LCD عدد 2 رو نمایش میده من باید چی کار کنم مشکل برنامه من کجاست آیا باید تبدیل مبنا رو انجام بدم :question: :question:
                خیلی ممنون میشم جواب بدید :applause: :applause: :applause: @};- @};-

                اینم قسمتی از برنامه :
                کد:
                unsigned char t;
                void main()
                {  
                  t=50; 
                  lcd_init(16);
                  lcd_clear();
                  lcd_gotoxy(0,0);
                  lcd_clear(); 
                  lcd_gotoxy(1,0);
                  lcd_putchar(t);

                دیدگاه


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

                  نوشته اصلی توسط ALI micro
                  سلام
                  من یه کدی مثلا 50 رو به LCD میفرستم ولی در LCD عدد 2 رو نمایش میده من باید چی کار کنم مشکل برنامه من کجاست آیا باید تبدیل مبنا رو انجام بدم :question: :question:
                  خیلی ممنون میشم جواب بدید :applause: :applause: :applause: @};- @};-

                  اینم قسمتی از برنامه :
                  کد:
                  unsigned char t;
                  void main()
                  {  
                    t=50; 
                    lcd_init(16);
                    lcd_clear();
                    lcd_gotoxy(0,0);
                    lcd_clear(); 
                    lcd_gotoxy(1,0);
                    lcd_putchar(t);
                  lcd بیچاره درست عمل میکنه
                  معادل اسکی کاراکتر "2" عدد 50 میشه
                  مثلا اگه 48 رو بفرستی "0" رو نشون میده
                  49 هم "1"
                  گفت که دیوانه نهی لایق این خانه نهی

                  دیدگاه


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

                    نوشته اصلی توسط Finder_
                    lcd بیچاره درست عمل میکنه
                    معادل اسکی کاراکتر "2" عدد 50 میشه
                    مثلا اگه 48 رو بفرستی "0" رو نشون میده
                    49 هم "1"
                    سلام
                    برای اینکه دسیمال روی LCD نمایش بده باید چه کدی بنویسم. :question:
                    ممنون :applause: :applause: @};- @};- @};- @};-

                    دیدگاه


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

                      نوشته اصلی توسط ALI micro
                      سلام
                      برای اینکه دسیمال روی LCD نمایش بده باید چه کدی بنویسم. :question:
                      ممنون :applause: :applause: @};- @};- @};- @};-
                      دو راه داری:
                      1- میتونی از تابع ساده و مزخرف sprintf استفاده کنی. کارت خیلی آسون میشه اما ...
                      2-ببین برای نمایش عدد دو رقمی باید یکان رو جدا و دهگان رو جدا نمایش بدی. فرض کن میخوای مقدار متغیر a رو نمایش بدی و فرض میکنیم این مقدار دو رقمی باشه.
                      اول باید دهگان رو جداکنیم. a/10 این کارو انجام میده. کافیه a/10+48 رو نمایش بدیم. مثلا اگه 5 باشه 5+48 رو نمایش میدیم. حالا برای یکان a%10 مقدار یکان a رو به ما میده. پس باید این مقدارو با 48 جمع کنیم و نمایش بدیم.

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

                      دیدگاه


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

                        فرض کنید یه حلقه داریم که بخوایم بدون ایجاد تاخییر مثلا 50 میلی ثانیه اجرا بشه چطوری باید از تاییمر استفاده کرد.بدون تایمر نمیشه؟
                        اگه یه حلقه while بصورت زیر بنویسم:
                        کد:
                        while(تایمر)
                        { 
                        for(i= ; i< ; i++)
                        {
                        }
                        }
                        دستورات داخل حلقه فور تا زمانی که تایمر بشمره اجرا میشه یا برنامه روی همون تایمر صبر میکنه؟

                        دیدگاه


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

                          نوشته اصلی توسط ((O-I-O))
                          فرض کنید یه حلقه داریم که بخوایم بدون ایجاد تاخییر مثلا 50 میلی ثانیه اجرا بشه چطوری باید از تاییمر استفاده کرد.بدون تایمر نمیشه؟
                          اگه یه حلقه while بصورت زیر بنویسم:
                          کد:
                          while(تایمر)
                          { 
                          for(i= ; i< ; i++)
                          {
                          }
                          }
                          شما بیا تایمری که انتخاب کردی رو براساس زمانی که میخوای تنظیم کن. بعدش هر وقت دچار سرریز بشه یا اینکه تطبیق رخ بده میتونید از پرچمهای رجیستر TIFR برای خروج از حلقه استفاده کنی.
                          ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

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

                          دیدگاه


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

                            به این شکل درسته؟دستورات داخل حلقه فور به تکرار و زمان تعیین شده اجرا خواهند شد؟
                            کد:
                            while(TCCR0=0x02;
                            while(!(TIFR&0x02));
                            if(TOV0=1)
                            {
                            goto lable1;
                            )
                            { 
                            for( i= ; i< ; i++)
                            {
                            }
                            {
                            lable1:
                            TIFR|=0x02;
                            .
                            .

                            دیدگاه


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

                              سلام تا جایی که میشه از دستور goto استفاده نکنید چون بعضی مواقع باعث هنگ کردن میکرو میشه . :redface:
                              باد می وزد ...
                              میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
                              تصمیم با تو است ...

                              دیدگاه


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

                                نوشته اصلی توسط ((O-I-O))
                                فرض کنید یه حلقه داریم که بخوایم بدون ایجاد تاخییر مثلا 50 میلی ثانیه اجرا بشه چطوری باید از تاییمر استفاده کرد.بدون تایمر نمیشه؟
                                اگه یه حلقه while بصورت زیر بنویسم:
                                کد:
                                while(تایمر)
                                { 
                                for(i= ; i< ; i++)
                                {
                                }
                                }
                                دستورات داخل حلقه فور تا زمانی که تایمر بشمره اجرا میشه یا برنامه روی همون تایمر صبر میکنه؟
                                از اینتراپت سرریز تایمر استفاده کن.

                                سوال دومو نفهمیدم. واضحتر بگین
                                گفت که دیوانه نهی لایق این خانه نهی

                                دیدگاه

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