ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 18
  1. #1
    2008/02/19
    2,296
    43

    شیفت 16 بیت ذر کدویژن

    سلام

    میخواستم بدونم شیفت 16 بیت در کدویژن چطوره؟

    من این خط رو مینویسم ولی از بیت 8 به بعد خروجی صفر میده!
    کد:
     for(i=0;i<16;i++)
     {
      PORTA.0=(0x5555&(0x0001<<i));
      delay_ms(1);
     }

    ممنون از کمکتون
  2. #2
    2008/11/03
    تهران
    311
    8

    پاسخ : شیفت 16 بیت ذر کدویژن

    سلام
    پشت پرانتزها یک int بزار ببین مشکلش حل می شود.
    کد:
    PORTA.0=int(0x5555&(0x0001<<i));
  3. #3
    2008/02/19
    2,296
    43

    پاسخ : شیفت 16 بیت ذر کدویژن

    متاسفانه خطا داد
  4. #4
    2009/01/21
    1,059
    8

    پاسخ : شیفت 16 بیت ذر کدویژن


    پشت پرانتزها یک int بزار ببین مشکلش حل می شود.
    سلام
    این int که میزاریم واسه چیه بعضی جاها دیدم این کارو میکنن

    ذكات علم ياد دادنه ....
  5. #5
    2008/11/03
    تهران
    311
    8

    پاسخ : شیفت 16 بیت ذر کدویژن

    نقل قول نوشته اصلی توسط majid.4206
    سلام
    این int که میزاریم واسه چیه بعضی جاها دیدم این کارو میکنن
    سلام
    یعنی اون عملیاتی که در جلو پرانتز هست را به صورت 16 بیتی انجام دهد و نتیجه را به صورت 16 بیتی برگرداند.
  6. #6
    2008/09/02
    اصفهان
    1,897
    41

    پاسخ : شیفت 16 بیت ذر کدویژن

    این int فقط در ++C مصداق داره ودر C بایستی بصورت (int) استفاده اش کرد. و معنیش هم اینه که: از اینجا به بعد عبارت رو به عنوان یک int در نظر بگیر. مثلا اگر بخواییم مقدار اعشاری f رو در مقدار صحیح i بذاریم؛ صرف نوشتن دستور:


    i = f;


    باعث میشه که یک کامپایلر خوب فکر کنه که من حالیم نیست دارم چکار میکنم. چون رنج عددی قابل مدیریت توسط نوع اعشاری به مراتب بزرگتر از یک int هست. بنا براین برای اینکه بتونم به کامپایلر حالی کنم که:
    من حالیمه. کارتو بکن!

    باید این کد بصورت زیر نوشته بشه:

    i = (int)f;


    وگرنه کامپایلر در هر دو صورت مقدار صحیح f رو داخل i میریزه.

    متاسفانه این باگ کد ویژن هست. برای چک کردن اینکه حاصل عبارت صفر هست یا نه از تابع داخلی __BSTB1 استفاده میکنه که علی رغم صدا کردن این تابع بطور 16 بیتی؛ در تابع فقط با بایت پایینی کار میکنه. تنها صورتی که تونستم مجبورش کنم کد درست تولید کنه این بود:

    PORTA.0 = ((0x5555U & (0x0001U << i))!=0) ? 1 : 0;

  7. #7
    2008/11/03
    تهران
    311
    8

    پاسخ : شیفت 16 بیت ذر کدویژن

    برنامه زیر رو من الان تست کردم درست جواب می دهد.
    شما شیفت به چپ می دادید و بعد با آن مقدار and می کردید و نتیجه را درون یک پین می ریختید آنگاه از آن 16 بیت باید بیت صفرام داخل آن پین قرار گیرد به خاطر همین آن نتیجه که نیاز دارید را ملاحظه نمی کردید. در این جا مقدار 0x5555 را یک شیفت به راست می دهیم نتیجه 16 بیتی می شود بعد با یک and می کنیم که نتیجه بشود یک بیت آنگاه آنرا در پین خروجی قرار می دهیم.
    کد:
    for(i=0;i<16;i++)
     {
      PORTA.0=(0x5555>>i)&0x1;
      delay_ms(100);
     }
  8. #8
    2008/09/02
    اصفهان
    1,897
    41

    پاسخ : شیفت 16 بیت ذر کدویژن

    جناب آقا حامد گل.
    مشکل این نیست که چه کدی باید نوشته بشه که بشه ازش جواب گرفت. مسئله مهم تر اینجا این هست که چرا اون کد بالایی با این که درست هست جواب نمیده. و اون کد اولی با اینکه درسته کار نمیکنه. این مشکل کد ویژنه.

    فایل lst تولید شده از کامپایل این کد ها رو در کد ویژن یک نگاهی بکنین. خودتون براحتی متوجه میشین.
  9. #9
    2008/02/19
    2,296
    43

    پاسخ : شیفت 16 بیت ذر کدویژن

    سلام

    ممنون از آقا حامد و آقا رضای گل

    راستش من میخوام با استفاده از کد بالایی که نوشتم مثلا بیت های پنجم از یک سری آرایه رو بردارم...

    برای مثال برنامه ی زیر رو ببینید

    کد:
        for(cunter1=0;cunter1<8;cunter1++)
        {
          temp=cunter1*8;
          t0=(data_a[temp] & (0x01<<shiffter));
          t1=(data_a[temp+1] & (0x01<<shiffter));
          t2=(data_a[temp+2] & (0x01<<shiffter));
          t3=(data_a[temp+3] & (0x01<<shiffter));
          t4=(data_a[temp+4] & (0x01<<shiffter));
          t5=(data_a[temp+5] & (0x01<<shiffter));
          t6=(data_a[temp+6] & (0x01<<shiffter));
          t7=(data_a[temp+7] & (0x01<<shiffter));
          lach_data[cunter1]=t0 * 1 + t1 * 2 + t2 * 4 + t3 * 8 + t4 * 16 + t5 * 32 + t6 * 64 + t7 * 128;
        }


    این برنامه بیتی که shiffter به اون اشاره میکنه رو داخل متغیرهای t0~7 میریزه...

    الان این که نوشتم آرایه اش 8 بیتیه...

    ولی میخوام 16 بیتی یا حتی 32 بیتی بشه که داخل برنامه نویسی راحت تر باشم :redface:

    کد:
    PORTA.0 = ((0x5555U & (0x0001U << i))!=0) ? 1 : 0;

    این کد درست کار داد :applause:

    ولی میتونم بپرسم این قسمت چه کاری انجام میده؟
    کد:
    ? 1 : 0
    ممنون از لطف شما :nerd:
  10. #10
    2007/12/31
    786
    11

    پاسخ : شیفت 16 بیت ذر کدویژن

    سلام دادا.
    ولی میتونم بپرسم این قسمت چه کاری انجام میده؟
    ? 1 : 0
    با اجازه اساتید خودم آقا رضا و آقا حامد

    برای اینکه در بیان دچار سوء تفاهم نشیم بنده عین جملات کتاب آقای جعفرنژاد رو نقل میکنم:

    عملگر "؟" عبارتی را ارزیابی کرده، بر اساس ارزش آن عبارت (درستی یا نادرستی)، نتیجه عبارت دیگر را در متغیری قرار میدهد:
    متغیر = <عبارت1> ؟ <عبارت2> : <عبارت3>

    اگر <عبارت 1> داری ارزش درستی باشد، مقدار ازریابی شده <عبارت 2> در متغیر قرار میگیرد وگرنه مقدار ارزیابی شده <عبارت 3> در متغیر قرار خواهد گرفت.
    مثال:

    کد:
    int x,y;
    x=5;
    y=x>5 ? x*2 : x*5;
    در این دستورات داریم:
    <عبارت 1>: x>5
    <عبارت 2>: x*2
    <عبارت 3>: x*5

    <عبارت 1> دارای ارزش نادرستی است، زیرا x از 5 بزرگتر نیست. بنابراین مقدار <عبارت 3> که برابر با 25=5*5 است، در متغیر Y قرار دارد.
    تشکر لازم نیست!
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 18

موضوعات مشابه

  1. شیفت دادن 5 عدد led
    توسط hosseinip در انجمن پروسسورهای ARM
    پاسخ: 1
    آخرين نوشته: 2015/10/23, 01:08
  2. اسیلاتور شیفت فاز چیه ؟
    توسط KINDA در انجمن مدارهای آنالوگ و مدارهای مجتمع
    پاسخ: 9
    آخرين نوشته: 2015/09/08, 20:53
  3. مشکل در شیفت
    توسط VILLA-7 در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2014/09/22, 17:00
  4. شیفت ریجسترها
    توسط جعفر حاجی بابایی در انجمن مدار هاي ديجيتال
    پاسخ: 2
    آخرين نوشته: 2010/09/03, 11:52
  5. شیفت رجیستر
    توسط masoodhashemy در انجمن مدار هاي ديجيتال
    پاسخ: 1
    آخرين نوشته: 2008/05/29, 17:12

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •