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





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









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









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





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

نمایش نتایج: از 1 به 6 از 6
  1. #1
    2020/02/18
    136
    23

    دستور bitread در mplab ,xc8

    سلام
    کار تابع bitRead در برنامه نویسی آردوینو برگرداندن مقدار بیت مورد نظر است که 0 یا 1 است وبه شکل bitRead(x , n); بکار میرود که x عدد مورد نظر است و n شماره بیتی است که میخواهیم برگرداند

    این دستور در کمپایلر xc8 برای mplab وجود ندارد ومیخواهم برایش زیر برنامه ای بنویسم ولی خطا میگیرم
    1 راه استفاده از تابع ltoa یا itoa هست که عدد مورد نظر را در آرایه کاراکتری قرار دهد وشماره بیت را بخوانیم
    راه دیگر آن عدد مورد نظر x را باتقسیمهای متوالی تا رسیدن به بیت مورد نظر انجام دهیم وباقیمانده را حساب کنیم
    تا کنون نتیجه نگرفتم وخروجی که میدهد اشتباه است.
    البته استفاده از تابع ltoa و itoa هم مشکل دیگری دارد که زمان اجرای برنامه تا چندین دقیقه طول میکشد در حالی که همین برنامه در آردوینو 1 ثانیه ای اجرا ونتیجه نمایش داده میشود
    برنامه یا تابعی که نیاز است مثلاً result = bitread(x , n); که result بیت مورد نظر که 0 یا 1 است و n شماره آن بیت است که چندمی باشد و x هم عددی است که میخواهیم بیت آنرا بدست آوریم والبته این x یا دسیمال است یا هگز وباید برنامه آنرا تشخیص دهد
  2. #2
    2017/02/06
    221
    102

    پاسخ : دستور bitread در mplab ,xc8

    باسلام.
    bitRead(unsigned char x,unsigned char n){




    return ((x & (1 << n)) >> n);
    }
    /*------------------------------------------*/
    #define bitRead(x,n) ((x & (1 << n)) >> n)

    تعریف به صورت ماکرو به نظر خودم بهتره چون جای اضافه نمیگیره و استک و اینا هم مصرف نمیکنه.
    ویرایش توسط A.I.E : 2021/09/19 در ساعت 00:40
  3. #3
    2020/02/18
    136
    23

    پاسخ : دستور bitread در mplab ,xc8

    نقل قول نوشته اصلی توسط A.I.E

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    باسلام.
    ..و استک و اینا هم مصرف نمیکنه.
    تشکر دوست عزیز
    ولی متاسفانه کار نداد
    البته قبل از ایجادتاپیک جستجوهایی زدم ونتیجه مطلوبی نگرفتم
    مثلا مشابه کد شما رو در سایتی دیدم با این تفاوت:
    return ((x & (1 << n)) ?1:0 );

    تونستم با کمی تغییر تا حدودی پاسخ بگیرم ولی فقط تا بیت 16 درست برمیگردونه ومثلاً اگر آرایه 64 بیت باشه بقیه بیتها همه 0 برگردونده میشن

    درصورت امکان اگر کسی تست کرد ونتیجه درست گرفت بنویسه
    با تشکر
  4. #4
    2017/02/06
    221
    102

    پاسخ : دستور bitread در mplab ,xc8

    نقل قول نوشته اصلی توسط isfahan

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    تشکر دوست عزیز
    ولی متاسفانه کار نداد
    البته قبل از ایجادتاپیک جستجوهایی زدم ونتیجه مطلوبی نگرفتم
    مثلا مشابه کد شما رو در سایتی دیدم با این تفاوت:
    return ((x & (1 << n)) ?1:0 );

    تونستم با کمی تغییر تا حدودی پاسخ بگیرم ولی فقط تا بیت 16 درست برمیگردونه ومثلاً اگر آرایه 64 بیت باشه بقیه بیتها همه 0 برگردونده میشن

    درصورت امکان اگر کسی تست کرد ونتیجه درست گرفت بنویسه
    با تشکر
    باسلام.
    این ماکرو رو من الان تست کردم و به درستی کار میکنه حتی از نتیجه ماکرو داخل if استفاده کردم که بدرستی کار کرد.

    #include <stdio.h>




    #define bitRead(x,n) ((x & (1 << n)) >> n)


    int main(){
    unsigned int x = 0b0101110001100110;
    if (bitRead(x,5))
    printf("1");
    else
    printf("0");
    return 0;
    }


    شما هم نمونه کدی که باهاش تست کردید رو قرار بدید در ضمن مطمئن بشید که کامپایلرتون میتونه با داده های 64 بیتی کار کنه.
    ویرایش توسط A.I.E : 2021/09/20 در ساعت 22:08
  5. #5
    2020/02/18
    136
    23

    پاسخ : دستور bitread در mplab ,xc8

    تشکر دوست عزیز
    کار داد
    قسمت کم ارزش به پر ارزش هم رعایت شده بود
    بصورت یک برنامه جدا گذاشتم در xc8 درست بود

    قضیه اینه که یک decrypt هست که مال کتابخانه آردوینو بوده و از دستور bitread تو اون استفاده شده
    تکه کد شما درست است ولی در برنامه کار نمیده وعدد درست رو بر نمیگردونه متاسفانه

    کد اصلی که در واقع یک library هست
    شکل فرخوانی هم اینطور هست:res(0x12345678,0x11111111,0x22222222)

    یا
    res(hex,hex,hex);
    که کلمات hex و اعدادی که نوشتم دلخواه است ولی به هگز هستند وبرگشت هم یک عدد هگز هست
    همین برنامه تو visual studio بدون تغییر عدد درست رو برمیگردونه ولی تو xc8 mplab خیر
    ویرایش توسط isfahan : 2021/09/23 در ساعت 20:11
  6. #6
    2020/02/18
    136
    23

    پاسخ : دستور bitread در mplab ,xc8

    کلا درست شد
    تبدیل کتابخانه سخته وبسیاری جاها خطاهایی میده که اصلا انتظارش نمیره وخیلی اذیت کننده هست
    به هرجهت کتابخانه هم تبدیل شد
نمایش نتایج: از 1 به 6 از 6

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

  1. مشکل با MPLAB X??
    توسط h_613 در انجمن میکروکنترلرهای PIC
    پاسخ: 3
    آخرين نوشته: 2019/02/10, 11:20
  2. پلاگين ccs در mplab
    توسط Meysamhl در انجمن میکروکنترلرهای PIC
    پاسخ: 3
    آخرين نوشته: 2014/11/10, 20:21
  3. آموزش نصب MPLAB X
    توسط hfhossein در انجمن میکروکنترلرهای PIC
    پاسخ: 14
    آخرين نوشته: 2013/08/25, 17:03
  4. MPlab X
    توسط vivaams در انجمن میکروکنترلرهای PIC
    پاسخ: 1
    آخرين نوشته: 2012/03/26, 11:40
  5. تعداد دستور اسمبلی یک دستور زبان C
    توسط brm3 در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2011/02/09, 16:47

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

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

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

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

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