آموزش برنامه نویسی میکروکنترلر PIC قسمت چهارم منابع وقفه
در pic18 بسته به این که کدوم نوعشو انتخاب میکنید ابزارهای جانبی متفاوتی وجود دارد که ممکنه وقفه داشته باشند. اما به هر حال یکسری وقفه ها در همه انواع میکروکنترلر ها مشترک و موجوده مثله:
- وقفه تایمرها
- وقفه سخت افزار خارجی
- وقفه USART
- وقفه ADC
و وقفه هایی دیگه مثله وقفه تغییر PORTB که معمولا برای اتصال به KEYPAD ازش استفاده میشه و وقفه CCP که برای PWMو مد مقایسه ازش استفاده می شود. وقفه های بیشتری هم وجود داره که بعدا بررسی می شود.
وقفه ها باید به صورت نرم افزاری فعال شوند. همانطور که در شکل بالا میبینید بیت GIE که در رجیستر INTCON میباشد وظیفه فعال و غیرفعال کردن کلیه وقفه ها را داراست و چنانچه بخواهیم وقفه های مربوط به ADC یا پورت سریال را هم فعال کنیم بایستی علاوه بر بیت GIE بیت PEIE را نیز فعال کنیم.
مراحل فعال سازی یک وقفه:
- بیت GIE از رجیستر INTCON باید یک شود .
- بعد از یک شدن GIE با یک کردن بیت هر وقفه ای آن وقفه شروع به کار می کند. چون وقفه های زیادی وجود داره رجیستر های زیادی هم وظیفه ذخیره این وقفه ها رو دارند مثلا رجیستر INTCON وظیفه نگهداری از بیت فعال ساز وقفه تایمر صفر را داراست.
- همانطور که گفتیم ناچاریم برای بعضی از وقفه ها بیت PEIE را نیز فعال کنیم.
آموزش برنامه نویسی وقفه تایمر
آموزش برنامه نویسی وقفه سخت افزار خارجی
آموزش برنامه نویسی وقفه ارتباط سریال
آموزش برنامه نویسی وقفه تغییرPORTB
مطالب مرتبط : |
برچسب ها:
Tags: آموزش برق و الکترونیک میکروکنترلر pic microcontroller pic آموزش برنامه نویسی میکروکنترلر PIC مراحل فعال سازی وقفه در pic منابع وقفه در pic وقفه تایمرها در pic وقفه سخت افزار خارجی درpic
بسیار عالیه چ سایت خوبی دارین
خیلی خوب آموزش دادینا امیدوارم ادامه بدین
با کامپایلر ccs آموزش نمیذارین؟؟
آیا این سبک برنامه نویسی در کامپایلر ccs جواب میده؟؟
بله با کامپایلر ccs هم با کمی تغییر میتونید.
البته ما کامپایلر اصلی pic ،یعنی mplab رو پیشنهاد میکنیم چون کاملا حرفه ای تر و کامل تره
void interrupt()
{ flag=1 ;
}
void main()
{ TRISB = 1;
intcon=0b10001000;
lcd_init();
x1: for( ; ; )
{
if (flag==1)
{
lcd_out(1,2,"in terrupt");
delay_ms(200);
}
else
{
lcd_out(1,2,"ma in");
delay_ms(200);
}
goto x1;
}
}
salam .man mikham barnameiy benevisam k moje morabaee ro bedam ru lcd namayesh bede tu main hastam ya interrupt...hen gam rising tu interrupt hastim.. ama ba barname e k neveshtam in kar anjam nemishe...moshk elesh chie?
mamnun misham rahnamaiy konid
برنامتون درسته فقط به جای void interrupt همانطور که تو آموزش برنامه نویسی وقفه سخت افزار خارجی هم گفتیم باید وقفه رو به این شکل تعریف کنید:
void interrupt int0_ISR()
{
if (INT0IE && INT0IF)
{
INT0IF=0;
mybit=1;
}
}
پیشنهاد میکنم یکبار دیگه این قسمت رو دقیق مطالعه کنید :
http://www.ictnic.com/learning/263-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%88%D9%82%D9%81%D9%87-%D9%87%D8%A7%DB%8C-%D8%B3%D8%AE%D8%AA-%D8%A7%D9%81%D8%B2%D8%A7%D8%B1-%D8%AE%D8%A7%D8%B1%D8%AC%DB%8C.html