PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : سوال در مورد یه نکته ی برنامه نویسی



roohlla
22-01-2013, 11:38
سلام دوستان
یه سوال داشتم . من خیلی جاها دیدم برای مقدار دادن به یه رجیستر میان به جای برابر قرار دادنش با مقدار یا استفاده از and , or ، از شیفت به شکل زیر استفاده میکنن . میشه یه توضیح بدید در مورد نحوه ی عملکرد این نوع مقدار دهی ؟

PORTB=(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0);
TCCR0=(1<<WGM01)|(1<< CS01);

اگه میشه نحوه ی استفاده از این روش رو بهم یاد بدید
با تشکر

rmsat
22-01-2013, 12:53
سلام دوستان
یه سوال داشتم . من خیلی جاها دیدم برای مقدار دادن به یه رجیستر میان به جای برابر قرار دادنش با مقدار یا استفاده از 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

roohlla
22-01-2013, 15:43
خیلی خیلی ممنون . مرجعی در این مورد میتونید معرفی کنید ؟

rmsat
22-01-2013, 20:56
خیلی خیلی ممنون . مرجعی در این مورد میتونید معرفی کنید ؟

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

وبلاگ من (You can see links before reply)

ali_h
23-01-2013, 11:53
مثلا tcnt0=(1<<256 که مقدار 256 در رجیستر tcnt0 قرار می گیرد


سلام،
ببخشید ولی این دستور عددی رو در tcnt0 قرار میده که بیت 256 ام آن 1 و بقیه بیت ها 0 هستند! دستور زیر عدد 256 رو در tcnt0 قرار می دهد :


tcnt0 = 1 << 8

rmsat
23-01-2013, 13:37
سلام،
ببخشید ولی این دستور عددی رو در tcnt0 قرار میده که بیت 256 ام آن 1 و بقیه بیت ها 0 هستند! دستور زیر عدد 256 رو در tcnt0 قرار می دهد :


tcnt0 = 1 << 8



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

ali_h
23-01-2013, 14:46
دقیقاً :hi:
اتفاقاً خودم موقعی که داشتم پیامو می فرستادم شک کردم به این قضیه :0013: