این پروژه به در خواست یکی از دوستان اصلاح شده و ورژن جدیدترش رو در اینجا قرار دادم ورژن قبلی که ایشون خودشون طراحی کرده بودن دچار مشکلاتی بود که در عمل lcd جشمک میزد و علاوه بر اون ر پیاده سازی واقعی کلید ها به درستی عمل نمیکردن که با اصلاحاتی که روی پروژه انجام شده این مشکلات حل شدن و چون جنبه ی آموزشی داره برای شما قرار دادم.در این پروژه آلارم و ساعت و تاریخ رو با استفاده از تایمر کانتر میکرو راه اندازی کرده ایم ولی همونطور که میدونید این کار در عمل درست نیس چون تایمر میکرو برای ساخت ساعت دقیق نیس مگه این که از RTC استفاده کنیم ولی به هر حال این پروژه دارای زیر برنامه ی محاسبه تاریخ و زمان آلارم برای تاریخ هستش که میتونیم با RTC میکرو راه اندازی کنیم.
نحوه ی استفاده از تایمر کانتر در پروژه ساعت:
در این پروژه برای تولید دقیق زمان از تایمر استفاده شده است که پیکر بندی آن از طریق رجیسترهای کنترلی زیر انجام شده است در این برنامه از تایمر 0 برای شمارش زمان استفاده شده است که با توجه به اعداد قرار داده شده به شکل زیر :
TCCR0=0x03; TCNT0=0x00; OCR0=0x00;
با قرار دادن TCCR برابر عدد 3 در واقع رجیستر زیر را با 3 پر کرده ایم:
یعنی CS00 ,CS01 را با عدد 1 و1 پر کرده ایم که طبق جدول زیر تایمر دارد با کلاک ی با اندازه ی 64/1 کلاک سیستم کار میکند:
که در این حالت اگر کلاک میکرو 1 مگاهرتز باشد: 1000000/64=15625 یعنی تایمر با کلاک 15625 در حال شمارش است یعنی هر 64 میکرو ثانیه یک کلاک و برای رسیدن به 10 میلی ثانیه محتوای تایمر یک به چه مقداری برسد؟156 مقداری است که در
آن زمان تایمر به 10 میلی ثانیه خواهد رسید.در حالی که در برنامه مقدار تاپ 256 پس مقدار زمان نشان داده شده دقیق نیس و باید پیگربندی اصلاح گردد: ابتدا مقدار CS00 ,CS01 را با عدد 10 و1 پر میکنیم تا کلاک بر 8 تقسیم شود برای تولید 1 میلی ثانیه تایمر باید در عدد 125 سرریز نماید. و در مد CTC پیکر بندی میکنیم تا مقدار تاپ را با OC0 کنترل کنیم پس مقدار TCCR برابر با عدد 0A میشود و OCR هم باید 125 باشد که معادل هگز آن 7D است
TCCR0=0x0A; TCNT0=0x00; OCR0=0x;7D
با این پیکر بندی تایمر با دقت بالا یک میلی ثانیه را به ما میدهد و با 100 بار پرشدن آن به 100 میلی ثانیه خواهیم رسید برای این که وقفه ی تایمر کانتر نیز فعال شود باید رجیستر زیر را هم با عدد 02 پر کرد:
TIMSK=0x02
حال با تعریف زیر برنامه ی وقفه تایمر 0 هرگاه تایمر صفر به مقدار125 برسد به زیر برنامه رفته و عبارت زیر را اجرا مینماید:
if (num==9){ second_s++; if(timer_a){second_s_c++;} }
در این عبارت هر گاهnum به 10 برسد second_s یکی افزایش میابد و نشان میدهد که 10 میلی ثانیه رد شده است زیرا هر بار که به وقفه رجوع شود 1 میلی ثانیه رد شده با این حساب اگر second_s به تعداد 100 برسد یک ثانیه گذشته است و میتوان متغیر ثانیه را یک واحد افزاش داد و همچنین اگر متغییر ثانیه به 60 برسد یک دقیقه گذشته و میتوان دقیقه را یک واحد افزایش داد و به همین شکل... که ذر ادامه برنامه وقفه به شکل زیر عمل شده:
if (second_s_c==99){ if(second_c<=60){ second_c++; } if(second_c>59){ second_c=0; minute_c++; } if(minute_c>59) { minute_c=0; hour_c++; } if(hour_c>23) { hour_c=0; } second_s_c=10; } if (second_s==99)
توجه :کاربر گرامی شما علاوه بر خرید مستقیم همچنین میتوانید این فایل را با خرید اشتراک ماهانه دانلود نمایید پس مشترک ماهانه ی سایت شوید و تا پایان مدت اشتراک از آپدیت ها و فایلهای جدید موجود در سایت بهره مند گردید.
لیست فایلهای اعضای اشتراکی
نام فایل :
ساعت با تایمر 1 میکرو 1
سه شنبه, 26 آبان 1394 12:41
حداقل اشتراک |
محتویات |
زمان ایجاد |
حجم فایل |
تعداد دانلودها |
تنها کاربران عضو یا دارای مجوز میتوانند دانلود نمایند |
توضیحات :