اطلاعیه

Collapse
No announcement yet.

مشکل در انجام تقسیم ساده به وسیله میکرو!

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

    مشکل در انجام تقسیم ساده به وسیله میکرو!

    سلام دوستان
    به یه مشکل جالب برخورد کردم در رابطه با انجام یه عملیات تقسیم به وسیله یک mega32:
    وقتی دوعدد رو به صورت مستقیم برهم تقسیم میکنم عملیات تقسیم به درستی انجام میشه و نتیجه در متغیر مورد نظر قرار میگیره مثلا:
    کد:
    temp=66300/19200;
    اما همین دوعدد اگه توی دوتا متغیر قرار بگیرن و بر هم تقسیم بشن مقدار صفر در temp قرار میگیره!!
    کد:
    a=66300;
    b=19200
    temp=a/b;
    اساتید لطفا راهنمایی بفرمایید کارم واقعا گیره یه تقسیمه!! :cry2: :cry2:

    #2
    پاسخ : مشکل در انجام تقسیم ساده به وسیله میکرو!

    سلام
    برنامت رو کامل بذار تا بشه مشکل رو برطرف کرد با احتمال زیاد نوع متغیرها رو اشتباه تعریف کردی.
    موفق باشی...

    دیدگاه


      #3
      پاسخ : مشکل در انجام تقسیم ساده به وسیله میکرو!

      نوشته اصلی توسط mehrdad_italy
      سلام
      برنامت رو کامل بذار تا بشه مشکل رو برطرف کرد با احتمال زیاد نوع متغیرها رو اشتباه تعریف کردی.
      موفق باشی...
      مگه باید متغیرها از چه نوعی باشه؟
      من long int تعریف کردم اینم یه برنامه هستش که دو عدد رو ضرب میکنه ولی عددی که رو LCD نمایش داده میشه اشتباهه:
      کد:
      #include <mega16.h>
      #include <delay.h>
      #include <stdio.h>
      #include<lcd.h>
      #define xtal 8000000
      #asm
      .equ __lcd_port=0x15 ;PORTC
      #endasm
      char b1[10];
      void main(void)
      {
      long int i,a,b;
      lcd_init(16);
      lcd_clear();
      lcd_putsf("Waiting...");
      delay_ms(2000);
      while(1)
      {
      a=3100;
      b=25;
      i=a*b;
      sprintf(b1,"%d",i);
      lcd_puts(b1);
      delay_ms(1000);
      lcd_clear();
      }
      }
      حاصل 1060800 هستش ولی عدد نمایش داده شده 11964 هست.

      دیدگاه


        #4
        پاسخ : مشکل در انجام تقسیم ساده به وسیله میکرو!

        شاید این کمکت کنه
        http://www.eca.ir/forum2/index.php?topic=52236.0

        دیدگاه


          #5
          پاسخ : مشکل در انجام تقسیم ساده به وسیله میکرو!

          نوشته اصلی توسط akamseda
          مگه باید متغیرها از چه نوعی باشه؟
          من long int تعریف کردم اینم یه برنامه هستش که دو عدد رو ضرب میکنه ولی عددی که رو LCD نمایش داده میشه اشتباهه:
          کد:
          #include <mega16.h>
          #include <delay.h>
          #include <stdio.h>
          #include<lcd.h>
          #define xtal 8000000
          #asm
          .equ __lcd_port=0x15 ;PORTC
          #endasm
          char b1[10];
          void main(void)
          {
          long int i,a,b;
          lcd_init(16);
          lcd_clear();
          lcd_putsf("Waiting...");
          delay_ms(2000);
          while(1)
          {
          a=3100;
          b=25;
          i=a*b;
          sprintf(b1,"%d",i);
          lcd_puts(b1);
          delay_ms(1000);
          lcd_clear();
          }
          }
          حاصل 1060800 هستش ولی عدد نمایش داده شده 11964 هست.
          شما گفتی تقسیم درسته ؟؟ خوب برای تقسیم باید نوع متغییر رو جوری تعریف کنی که شامل اعداد صحیح و اعشاری باشه مثل :
          float
          double
          وقتی شما میای متغییر رو long int تعریف می کنی فقط شامل اعداد صحیح میشه.
          حالا بعد از انجام این کارها یه نکته باقی می مونه به صورت زیر عمل کن :
          اول به آدرس زیر برو :
          Project/configure/C compiler/
          بعد از قسمت Sprintf feature گزینه float,width,precision رو انتخاب کن
          موفق باشی...

          دیدگاه


            #6
            پاسخ : مشکل در انجام تقسیم ساده به وسیله میکرو!

            دوست عزیز ، 3100*25 میشه 77500 که بیشتر از 8 بیت یعنی 65535 هست.
            شما باید به جای %d از %ld استفاده کنی. اگر باز هم درست نشد باید تو تنظیمات پروژه بخش مربوط به printf رو بزاری روی long.

            دیدگاه

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