سلام به دوستان خوب و عزيزم
قبل از هر چيز فرا رسيدن اين ماه مبارک رو به همه شما دوستان تبريک مي گم.و روزه نمازهاي همتون مورد قبول حق تعالي قرار بگيره.راستش مي خواهم يه گله اي بکنم از اين دوستاني که فقط مطالب رو مي خونن و نظر نمي دن
و بايد بگم اون دسته از عزيزاني که مطالب اين وبلاگ به دردشون مي خوره و مي خواهند که هر چه زودتر وبلاگ آپديت بشه بايد « توجه کرديد بايد
» لطف کنن و تو قسمت نظرات نقاط قوت ، ضعف ، پيشنهادات و نظرات خودشونو رو بگن از الان گفته باشم تا قسمت نظرات اين پست حداقل ۱۰ نظر نداشته باشه از مطلب بعدي خبري نيست ها.... بعداً نگيد نگفتي.خوب از اين مسائل که بگذريم مي رسيم به پيکره بندي و استفاده از تايمر-کانترها در محيط Bascom ببينيد دوستان طبق برگه هاي اطلاعاتي که براي هرمدل از ميکرو وجود دارد هر کدام داراي يک يا چند تايمر-کانتر هستند که ما مي توانيم از آن ها هم به عنوان تايمر بسيار دقيق استفاده کنيم يا به عنوان کانتر که پالس هاي ورودي به پايه هاي T0 ، T1،.... را شمرده در واقع محتواي اين کانترها با يک پالس که مقدار آن از صفر به يک متغير است يک واحد افزايش مي يابد. که از اين خاصيّت مي توان براي اندازه گيري فرکانس موج هاي خارج از ميکرو استفاده کرد.
با استفاده از دستور زير مي توان تايمر-کانترها را در مد تايمر پيکره بندي کرد که در آن x يکي از اعداد 0،1،2،3 به معني تايمر 0 يا يک و... است و عبارت PRESCALE مي تواند يکي از موراد 1024،256،64،8،1 باشد که اين عدد تقسيمي از فرکانس کريستال مورد استفاده در ميکرو است به عنوان مثال اگر فرکانس کريستال مورد استفاده برابر 8 مگاهرتز باشد و مقدار PRESCALE برابر 8 آنگاه فرکانس پالس اعمالي به تايمر برابر 1=8/8 يک مگاهرتز خواهد بود.
Config timerX=timer ,PRESCALE=1 / 8 / 64 / 256 / 1024
در دستور بالا چنانچه Timerx را Timer0 قرار دهیم و آن را مساوی با timer قرار دهیم Timer0 را در مُد تایمر پیکره بندی کرده ایم .
دوستان اصولاً محتوای یک تایمر تا مقدار مشخصی با هر پالس ساعت افزایش می یابد و پس از آن دوباره صفر می شود که این مقدار مشخص در تایمر های هشت بیتی عدد ۲۵۶ و در تایمر های شانزده بیتی عدد ۶۵۵۳۶ است که تایمر وقتی در مد تایمر پیکره بندی می شود با شمردن تا این مقدار سرریز شده و دوباره صفر می شود و یک بیت پرچم را در رجیستر میکروکنترلر یک می کند که کاربر می تواند با نظارت بر این بیت برنامه خود را بنویسد، که تایمر صفر یک تایمر هشت بیتی است و تایمر یک، یک تایمر شانزده بیتی است و تایمر دو، یک تایمر هشت بیتی است و تایمر سه، یک تایمر شانزده بیتی است.
با استفاده از فرمول زیر می توان حداکثر زمان تأخیری که می توان توسط یک تایمر هشت بیتی ایجاد کرد را محاسبه نمود که در آن Fosc فرکانس کریستال مورد استفاده میکرو و PRESCALE تقسیمی از فرکانس کریستال مورد استفاده میکرو است که به شمارنده تایمر اعمال می شود. که برای محاسبه زمان تأخیر تایمر های شانزده بیتی از عدد 65536 به جای عدد 256 در فرمول استفاده می شود.
PRESCALE*256 / Fosc
با استفاده از دستور زیر می توان مقدار اولیه ای را در رجیستر شمارنده تایمر قرار داد که در اینصورت تایمر از عدد مورد نظر شروع به شمارش کرده در نتیجه به میزان عدد مورد نظر از 256 کمتر شمرده می شود و برای محاسبه زمان تأخیر عدد مورد نظر را از 256 کم کرده و در فرمول قرار می دهیم. که در آن value عدد مورد نظر است.
TimerX= value
در مثال زیر مقدار PRESCALE برابر با 1024 و فرکانس کریستال برابر یک مگاهرتز است و مقدار اولیه 10 در رجیستر شمارنده تایمر قرار داده شده است که طبق فرمول 1000000/246*1024 میزان تأخیر برابر با 251 میلی ثانیه است یعنی تایمر هر 251 میلی ثانیه یک بار سرریز می شود. همانطور که مشاهده می کنید عدد 10 از 256 کم شده و عدد 246 در فرمول قرار گرفته است.[دو زاریتون افتاد
]؟
"regfile="m32def.dat$
crystal=1000000$
config timer0=timer , prescale=1024
timer0 = 10
و با استفاده از دستور زیر می توان مقدار تایمر را خواند و در متغیر Var قرار داد.
Var= TimerX
اکنون که تایمر را در مد تایمر پیکره بندی کردید و نحوه ایجاد تأخیرهای مختلف با آن را فرا گرفتید می توانید با استفاده از دستور Start TimerX تایمر X را شروع به شمارش کنید و با استفاده از دستور Stop TimerX آن را متوقف کنید. نکته دیگری که می ماند آن است که تایمر هر بار که سرریز می شود یک پرچم به نام Ovf 0 را یک می کند که شما برای نظارت بر این پرچم می توانید از دستورات وقفه استفاده کنید طوری که میکرو طبق روال دستورات برنامه را انجام می دهد و به محض بروز سرریز شدن تایمر و یک شدن پرچم Ovf X اجرای دستورات به بر چسب مربوطه پرش کرده و پس از اتمام مراحل دوباره به بدنه اصلی برنامه باز می گردد اما برای استفاده از وقفه ابتدا باید توسط دستور enable interrupts اجازه کلی استفاده از تمامی وقفه ها داده شود [این دستور امکان استفاده از تمامی وقفه ها را می دهد] سپس توسط دستور enable TimerX وقفه مربوط به تایمرها را فعال کرد و در نهایت با استفاده از دستور ON Ovf X Lable در صورت یک شدن هریک از بیت پرچم های Ovf 0 ، Ovf 1 ، Ovf 2 یا Ovf 3 به برچسب Lable که در پایان برنامه بعد از دستور End قرار می گیرد پرش کرد.
خوب دوستان إن شاء الله در پست بعد به پیکره بندی تایمرها در مد کانتر اشاره خواهم کرد و قول یه پروژه خوب «فرکانس متر»
رو به شما دوستان میدم فقط یادتون نره که قسمت نظرات باید 10 تا نظر داشته باشه تا پست بعدی رو بنویسم.![]()
فعلاً یا حق ![]()

