خدمات وبسایت آی‌سی‌تی نیـــک

طراحی و ساخت انواع پروژه‌های الکترونیکی با: میکروکنترلرavr - میکروکنترلرarm - میکروکنترلرpic و آردوینو

مقالات و آموزش‌های رایگان در سطوح پایه و حرفه‌ای برای الکترونیک و آی سی تی - ICT

آموزش میکروکنترلر PIC قسمت سوم تایمر ها(تولید تاخیر)

منتشر شده در میکروکنترلرpic

امتیاز کاربران

ستاره فعالستاره فعالستاره فعالستاره فعالستاره فعال
 

برنامه نویسی تایمر PIC18  به زبان C قسمت اولِ تولید تاخیر

PIC18  بسته به عضو خانواده دارای 2 تا 5تایمر می باشد. از تایمر ها می توان برای تولید تاخیر و نیز شمارش رویدادهایی که خارج از میکرو اتفاق میوفته استفاده کرد.هر تایمر نیاز به یک منبع پالس ساعت داره که میتونه داخلی یا خارجی باشه اگه منبع پالس ساعت داخلی باشه تایمر به برای تولید تاخیر زمانی(زمانسنج) استفاده و اگر منبع پالس ساعت خارجی باشه تایمر در این حالت شمارنده نامیده میشه

 در این قسمت میبینیم که چطوری تایمر های0 و 1 برای تولید تاخیر به کار میرن و در قسمت های بعدی هم کاربرد های دیگه مثله شمارنده رو بررسی میکنیم.

رجیستر های تایمر 0:

تایمر صفر تایمری 16 بیتی است که میتواند در 2 مد 8بیتی و 16 بیتی به کار رود. استفاده از تایمر 0 به صورت 16 بیتی به صورت دو بایت بالا و پایین انجام میشه رجیستر پایین TMR0L و  رجیستر بالا TMR0H می باشد. 

رجیستر کنترل تایمر 0 T0CON نام داره و برای تنظیم مد های مختلف تایمر به کار میره بیت های این تایمر در جدول زیر نشون داده شده:

T0CON

نکته:اگه بخوایم تایمر برای تولید تاخیر زمانی به کار بره بیت T0CS باید برابر صفر باشد.

نکته : توجه داشته باشید که مقدار فرکانس پالس داخلی که به تایمر میرسه یک چهارم مقدار نوسان ساز اصلی میکرو در صورتی که بیت های تقسیم گر تایمر صفر 0 باشند. مثلا اگه مقدار کریستال میکرو 10مگاهرتز باشه فرکانس پالس ساعت تایمر 2.5مگاهرتز میشه.

بیت پرچمTMR0IF

این بیت جزئی از رجیستر INTCON که وقتی مقدار تایمر به حداکثر خود یعنی FFFFH میرسه یک میشه از این بیت میشه برای اعلام وقفه سرریز تایمر که بعدا میگیم استفاده کرد. این بیت از طریق INTCONbits.TMR0IF قابل دسترسی میباشد.

مراحل برنامه نویسی تایمر 0 در مد 16بیتی:

  1. بیت T08BIT را برابر 0 میکنیم(مد16بیتی)
  2. T0CSرا روی منبع پالس داخلی قرار میدیم(T0CS=0)
  3. مابقی رجیسترا فعلا کاری نداریم(=0)
  4. چون در مد 16بیتی هستیم میتوانیم هر مقداری را در رنج 0000H تا FFFFH درون رجیستر های تایمر یعنی TMR0H و TMR0L بارگذاری کنیم.
  5. بعد از بار شدن TMR0H و TMR0L بیت TMR0ONاز رجیستر T0CON را برابر 1 میکنیم.
  6. تایمر شروع به شمارش به بالا میکنه تا به FFFFH برسه وقتی به این مقدار رسید TMR0IFبرابر 1 میشه 
  7. بیت TMR0IF رو برابر صفر و رجیستر هایTMR0H و TMR0L دوباره مقدار میدیم تا تایمر آماده شروع دور بعدی شمارش بشه

مقدار تاخیر بستگی به مقدار اسیلاتور تایمر و نیز مقدارهای درون TMR0H و TMR0L داره برای محاسبه مقدار تایمر به روش زیر عمل میکنیم:

فرض کنید مقدار نوسان ساز تایمر 2.5مگاهرتزه (T=0.4uS) در این حالت هر یک واحدی که به رجیستر TMR0H و TMR0L تایمر به سمت بالا اضافه میشه 0.4میکرو ثانیه طول میکشه بنابراین با یه حساب ساده میشه گفت :

FFFFH که به دهدهی برابر 65535هست در این مقدار نوسان ساز حدود 26 میلی ثانیه طول میکشه حالا اگه بخوایم 10میلی ثانیه تاخیر رو ایجاد کنیم به شکل زیر عمل میکنیم:

10000uS/0.4uS=25000

65535-25000=40535

40535 TO HEX = 9E57

کافیه این مقدار رو توی TMR0H و TMR0L قرار بدیم تا تایمر تاخیری برابر 10میلی ثانیه رو ایجاد کنه:

TMR0H=0X9E

TMR0L=0X57

برای تولید زمان های بیشتر باید بیت های تقسیم کننده (PRESCLER) تایمر صفر رو تغییر بدیم.

مثال : در برنامه زیر بیت PORTB رو به طور مداوم با مقدار تاخیر 10میلی ثانیه معکوس میکند:

#include <P18F458.h>


void T0Delay()
{
TMR0H=0X9E;
TMR0L=0X57;
T0CONbits.TMR0ON=1;//ON TIMER
while(INTCONbits.TMR0IF==0);//WAIT FOR TIMER0 FLAG
T0CONbits.TMR0ON=0;//OFF TIMER
INTCONbits.TMR0IF=0;
}


void main(void)
{
TRISB=0;
while(1)
{
PORTB=0x55;
T0Delay();
PORTB=0xAA;
T0Delay();
}
}

 

 مطالب مرتبط :

برچسب ها:

Tags: آموزش برق و الکترونیک میکروکنترلر pic microcontroller pic سری PIC18F وقفه تایمرها در pic آموزش میکروکنترلر PIC تایمر ها آموزش میکروکنترلر PIC قسمت سوم تایمر ها تولید تاخیر

دیدگاه‌ها  

# maede 1398-05-11 14:19
سلام خیلی ممنون از سایت خوبتون
ببخشید این برنامممه ایی که نوشتین راجب فرکانسش چیزی ننوشتین ... فرکانس باید چند باشد؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مهدی 1396-04-31 18:58
سلام من با ccs کار میکنم و برای یه پروژه میخوام وقفه تایمر 0 و وقفه int خارجی و وقفه compare تایمر 2 رو استفاده کنم . وقتی وقفه تایمر 2 رو فعال میکنم روتین وقفه تایمر صفر اجرا نمیشه کسی میدونه دلیلش چیه.
ممنون میشم با ایمیل برام جواب بفرستید
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر ارشد 1396-05-02 23:39
سلام دوست عزیز متاسفانه بنده با ccs کار نکردم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# roholla hn 1395-11-25 18:08
سلام اگه میشه ی برنامه ی کانتر ساده بذارید
من نمیدونم مثلا ا زt0con تو برنامه چه جوری باید استفاده کرد
تنظیمات بیتیشو مشکلی ندارم فقط نحوه ی استفاده تو برنامه رو میخوام
من از mikroc استفاده میکنم
ممنونم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# ali 1395-03-11 18:30
سلام.
هرچقدر تلاش کردم نتیجه ای نداد.
اگر لطف کنید مثل برنامه های دیگر سورس کد و شبیه سازی را قرار دهید خیلی خوب میشه.
این فایل مربوط به کد و شبیه سازی هست.
http://s7.picofile.com/file/8253757176/Timer0.rar.html
اگر وقت کردید ممنون میشم بررسی کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# ali 1395-03-08 17:10
با سلام و تشکر بابت مطالب سایت.
من این برنامه رو داخل proteus تست کردم جواب نداد.
مشکل از proteus هست؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
# مدیر ارشد 1395-03-09 20:34
سلام ،ممنون از شما
احتمالا برنامه رو اشتباه نوشتید
یک بار دیگه چک کنید کامل
چون احتمالش خیلی کمه که مشکل از پروتئوس باشه
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

4

پشتیبانی و مشاوره 24 ساعته

ictnic2

تماس با ما

  • تلگرام : ICTNIC2@

به ما بپیوندید

ما را در صفحات اجتماعی دنبال نمایید...

کاربران ثبت نامی

تا این لحظه تعداد

2415 نفر

در وبسایت تخصصی ictnic

ثبت نام و از خدمات ما استفاده می کنند.

ما را در آپارات دنبال کنید

aparat logo fa color black 275x100