NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4128 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 7 از 7

موضوع: سوال در مورد یه نکته ی برنامه نویسی

  1. #1
    کاربر دائمی
    تاریخ عضویت
    Jun 2009
    نام
    روح الله خرم بخت
    نوشته ها
    403
    تشکر
    456
    تشکر شده 591 بار در 214 پست

    پیش فرض سوال در مورد یه نکته ی برنامه نویسی

    سلام دوستان
    یه سوال داشتم . من خیلی جاها دیدم برای مقدار دادن به یه رجیستر میان به جای برابر قرار دادنش با مقدار یا استفاده از and , or ، از شیفت به شکل زیر استفاده میکنن . میشه یه توضیح بدید در مورد نحوه ی عملکرد این نوع مقدار دهی ؟
    PORTB=(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0);
    TCCR0=(1<<WGM01)|(1<< CS01);
    اگه میشه نحوه ی استفاده از این روش رو بهم یاد بدید
    با تشکر

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر علاقه مند rmsat آواتار ها
    تاریخ عضویت
    Oct 2007
    نوشته ها
    27
    تشکر
    6
    تشکر شده 33 بار در 11 پست

    پیش فرض

    نقل قول نوشته اصلی توسط roohlla نمایش پست ها
    سلام دوستان
    یه سوال داشتم . من خیلی جاها دیدم برای مقدار دادن به یه رجیستر میان به جای برابر قرار دادنش با مقدار یا استفاده از and , or ، از شیفت به شکل زیر استفاده میکنن . میشه یه توضیح بدید در مورد نحوه ی عملکرد این نوع مقدار دهی ؟
    PORTB=(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0);
    TCCR0=(1<<WGM01)|(1<< CS01);
    اگه میشه نحوه ی استفاده از این روش رو بهم یاد بدید
    با تشکر
    دوست عزیز در زبان c شما نمی تونید به طور مستقیم با بیت ها یک پورت کار کنید مگر اینکه ماکرویی برای این کار تعریف کنید مثلا فرم نوشتن PORTB2 در زبان C غلط است و استاندارد نیست. در هر صورت این دستورات که در بالا اومده با دستور مستقیم انتساب هیچ فرقی نداره.فقط دز یک صورت دیگه شما باید از دستور انتساب مستقیم استفاده نکنید مثلا فرض کنید شما یکی از پین های پورت B را به ورودی یک دستگاهی وصل کنید که ورودی می تونه 0 و یا 1 باشه در این صورت نمی تونید از دستور انتساب مستقیم استفاده کنید. وشما باید از دستورات and و or برای اینکار استفاده کنید.استفاده از این دستورات باعث عدم تداخل بیت های یک پورت با یکدیگر می شه.
    در ضمن دستور انتساب << ویا >> برای نسبت دادن مقادیر سمت راست به یک رجیستر می باشد.
    مثلا TCNT0=(1<<256 که مقدار 256 در رجیستر TCNT0 قرار می گیرد
    (1<<250
    ویرایش توسط rmsat : 22-01-2013 در ساعت 12:58

  4. تشکرها از این نوشته :


  5. #3
    کاربر دائمی
    تاریخ عضویت
    Jun 2009
    نام
    روح الله خرم بخت
    نوشته ها
    403
    تشکر
    456
    تشکر شده 591 بار در 214 پست

    پیش فرض

    خیلی خیلی ممنون . مرجعی در این مورد میتونید معرفی کنید ؟

  6. #4
    کاربر علاقه مند rmsat آواتار ها
    تاریخ عضویت
    Oct 2007
    نوشته ها
    27
    تشکر
    6
    تشکر شده 33 بار در 11 پست

    پیش فرض

    نقل قول نوشته اصلی توسط roohlla نمایش پست ها
    خیلی خیلی ممنون . مرجعی در این مورد میتونید معرفی کنید ؟
    مرجع که همه کتاب های زبان C می تونند مرجع خوبی باشند.شما اگه می خواهید با زبان c به صورت استاندارد کار کنید بهتره به طور کل کدویژن را فراموش کنید چون این کامپایلر باگ های زیادی داره من بهتون کامپایلر قدرتمند winavr را پیشنهاد می کنم که با کمی سرچ تو نت می تونید منابع خوبی براش پیدا کنید.البته این هم باید یادآوری کنم که کدویژن بخشی به نام کد ویزارد داره و شما می تونید پروژه های سریع و کوتاه را به کمک این بخش ایجاد کنید.

    وبلاگ من

  7. کاربران : 2 تشکر کرده اند از شما rmsat برای ارسال این پست سودمند:


  8. #5
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    نقل قول نوشته اصلی توسط rmsat نمایش پست ها
    مثلا tcnt0=(1<<256 که مقدار 256 در رجیستر tcnt0 قرار می گیرد
    سلام،
    ببخشید ولی این دستور عددی رو در tcnt0 قرار میده که بیت 256 ام آن 1 و بقیه بیت ها 0 هستند! دستور زیر عدد 256 رو در tcnt0 قرار می دهد :
    کد:
    tcnt0 = 1 << 8

  9. تشکرها از این نوشته :


  10. #6
    کاربر علاقه مند rmsat آواتار ها
    تاریخ عضویت
    Oct 2007
    نوشته ها
    27
    تشکر
    6
    تشکر شده 33 بار در 11 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali_h نمایش پست ها
    سلام،
    ببخشید ولی این دستور عددی رو در tcnt0 قرار میده که بیت 256 ام آن 1 و بقیه بیت ها 0 هستند! دستور زیر عدد 256 رو در tcnt0 قرار می دهد :
    کد:
    tcnt0 = 1 << 8

    شما درست می گید من اشتباه کردم.این برای بیت 256 ام هسش ولی تو دستور شما، مقدار 128 در رجیستر قرار گرفته (10000000) و برای مقادیر 256 باید مقدار (100000000) قرار بگیره که 9 بیتی میشه

  11. تشکرها از این نوشته :


  12. #7
    کاربر فعال
    تاریخ عضویت
    Dec 2011
    نام
    علی حاجی آبادی
    نوشته ها
    240
    تشکر
    46
    تشکر شده 237 بار در 155 پست

    پیش فرض

    دقیقاً
    اتفاقاً خودم موقعی که داشتم پیامو می فرستادم شک کردم به این قضیه

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

  1. [سوال] سوال برنامه نویسی در keil
    توسط rezapop در انجمن AT91 series (ATMEL)
    پاسخ: 1
    آخرين نوشته: 30-03-2014, 23:50
  2. سوال: برنامه نویسی arm در لینوکس ...
    توسط microprocesor_2002 در انجمن میکرو کنترلر های 32 بیتی(arm)
    پاسخ: 6
    آخرين نوشته: 25-09-2013, 10:11
  3. پاسخ: 4
    آخرين نوشته: 28-09-2012, 14:27
  4. سوال در مورد برنامه نویسی در keil
    توسط medadnoki در انجمن 8051
    پاسخ: 5
    آخرين نوشته: 03-09-2012, 11:55
  5. سوال در مورد برنامه نویسی arm7
    توسط ut_naji در انجمن AT91 series (ATMEL)
    پاسخ: 5
    آخرين نوشته: 06-07-2010, 14:02

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

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