این ساعت یکی از کاملترین برنامه های اسمبلی برای ساعت با avr را دارا میباشد.در این برنامه با استفاده از تایمر 1 میکرو زمانی با دوره ی 1 ثانیه تولید کرده ایم و هر بار با وقفه ی تایمر 1 مقدار رجیستر r16 را یکی افزایش میدهیم.پس از این که مقدار r16 به عدد 60 رسید باید رجیستر دقیقه را که r19 انتخاب شده است یکی افزایش داده شود و رجیستر r16 را صفر کینم برای ساعت هم رجیستر r21 در نظر گرفته شده است.نکته مهم در این برنامه این است که برای نمایش مقدار ثانیه و دقیقه و ساعت در خروجی مجبوریم که مقادیر به دست آمده را به مقدار کد اسکی تبدیل نماییم این در حالی است که این مقادیر ابتدا باید به bcd تبدیل شده و سپس با 48 جمع شوند تا به مقدار کد اسکی عدد تبدل شود.
یک روش ابتکاری برای تبدیل یک بایت به دو عدد bcd:
روشهای زیادی برای تبدیل یک بایت به دو عدد bcd وجود دارد ولی سریعترین روش در این پروژه استفاده از جمع با 6 است که الگوریتمی به این شکل دارد که اگر عدد از 10 بیشتر بود با 6 جمع میکنیم و اگر از 20 بیشتر بود با 12 و اگر از 30 بیشتر با 18 و الی آخر و از آنجایی که عدد مورد نظر ما همواره از 60 کمتر است این تکرار را فقط تا 6 بار ادامه میدهیم.
تبدیل عدد به کد اسکی:
عدد تبدل شده به bcd هموراه در r17 قرار دارد.این عدد همواره شامل دو بخش 4 بیتی است که این دو چهار بیت را در دو رجیستر r18 وr20 میریزیم که شامل دو عدد یکان و دهگان میباشد.حال کافی است که این عدد را با 48 دسیمال جمع کینم تا دو عدد اسکی قابل ارسال به پورت سریال را داشته باشیم.برای زیبایی مقادیر نمایش داده شده بر روی پورت سریال چند کارکتر : و = و time را هم به پروت سریال ارسال میکنم و هر بار مقدار زمان بر روی پورت سریال آپدیت میگردد.
فایلهای موجود در پروژه ساعت دیجیتال به زبان اسمبلی با avr:
- فایل پروتیوس
- فایل پروژه Atmel® Studio 7
- فایل اسمبلی کامل پروژه
توضیحات بیشتر | قیمت : 30000 تومان |