دستور ENABLE INTRRUPTS :
برای فعال سازی وقفه سراسری میکروکنترلر AVR از این دستور باید استفاده شود. در غیر این صورت هیچ کدام از وقفه هایی که در برنامه می نویسیم اجرا نخواهد شد.
دستورات DISABLE و ENABLE :
از این دستورات برای فعال و غیر فعال کردن وقفه استفاده می شود و به شکل زیر در برنامه بسکام نوشته می شود:
DISABLE interrupt
ENABLE interrupt
دستور ON INTERRUPT :
زمانی که وقفه اتفاق بیافتد سیستم اجرای برنامه را متوقف کرده و به وقفه پاسخ می دهد و به برچسبی که برای آن وقفه تعریف شده است پرش می کند و بعد از برگشت ادامه برنامه اجرا می شود. این دستور به شکل زیر نوشته می شود:
ON INTERRUPT label
در دستور بالا label برچسب زیر برنامه ای است که برنامه در هنگام وقوع وقفه interrupt به آن پرش می کند و بقیه وقفه ها را تا زمانی که از زیر برنامه وقفه خارج شود غیر فعال می کند.
دستور RETURN :
برای برگشت از زیر برنامه وقفه به برنامه عادی از این دستور استفاده می کنیم. اگر از چندین RETURN استفاده کنیم اولین RETURN که داخل شرط یا حلقه نباشد به عنوان RETI (برگشت از وقفه استفاده می شود) و بقیه به عنوان RETURN استفاده می شود.
پیکربندی وقفه خارجی (EXTERNAL INTERRUPT) :
برای تعیین نحوه تحریک شدن وقفه خارجی از پیکربندی زیر استفاده می کنیم:
CONFIG INTX = STATE
X : بسته به نوع میکروکنترلر می تواند بین صفر برای ورودی وقفه خارجی صفر تا 7 برای ورودی وقفه خارجی هفتم تغییر کند. به عنوان مثال در میکروکنترلر Atmega32 سه ورودی وقفه خارجی وجود دارد:
1-External interrupt 0 (INT0)
2-External interrupt 1 (INT1)
3-External interrupt 2 (INT2)
STATE : نیز بسته به نوع میکروکنترلر می تواند یکی از گزینه های زیر باشد:
LOW LEVEL : در این حالت اعمال یک سطح پایین یا صفر به پایه INTX باعث رخ دادن وقفه برای ورودی وقفه خارجی X می شود.
FALLING : در این حالت اعمال یک لبه پایین رونده به پایه INTX باعث روی دادن وقفه خارجی می شود.
RISING : در این حالت اعمال یک لبه بالا رونده به پایه INTX باعث روی دادن یک وقفه خارجی می شود.
انواع وقفه در میکروکنترلرهای AVR :
وقفه های خارجی |
EXTERNAL INTERRUPTS |
|
وقفه خارجی صفر |
External interrupt 0 |
INT0 |
وقفه خارجی یک |
External interrupt 1 |
INT1 |
وقفه های خارجی 2 تا 7 برای بعضی از میکروکنترلرها |
External interrupt for some chips |
INT2 – INT7 |
وقفه تایمر کانتر صفر |
TIMER/COUNTER0 INTERRUPTS |
|
فعال و غیر فعال کننده تمام وقفه های موجود برای T/C0 |
Enable timer/counter0 interrupts |
TIMER0 , COUNTER0 |
وقفه سرریزی برای T/C0 |
Timer0 overflow interrupt |
OVF0 |
وقفه تایمر کانتر یک |
TIMER/COUNTER1 INTERRUPTS |
|
فعال و غیر فعال کننده تمام وقفه های موجود برای T/C1 |
Enable timer/counter1 interrupts |
TIMER1 , COUNTER1 |
وقفه سرریزی برای T/C1 |
Timer0 overflow interrupt |
OVF1 |
وقفه ورودی CAPTURE برای T/C1 |
Input capture timer1 interrupt |
CAPTURE1 , ICP1 |
وقفه تطابق مقایسه مد A برای T/C1 |
Output capture a interrupt |
COMPARE1A , OC1A |
وقفه تطابق مقایسه مد B برای T/C1 |
Output capture b interrupt |
COMPARE1B , OC1B |
وقفه تایمر کانتر دو |
TIMER/COUNTER2 INTERRUPTS |
|
فعال و غیر فعال کننده تمام وقفه های موجود برای T/C2 |
Enable timer/counter2 interrupts |
TIMER2 , COUNTER2 |
وقفه تطابق مقایسه ای برای T/C2 |
Timer2 output compare |
OC2 |
وقفه سرریزی برای T/C2 |
Timer2 overflow interrupt |
OVF2 |
وقفه ارتباط سریال UART |
UART INTERRUPTS |
|
وقفه دریافت کامل داده توسط UART |
Serial RX complete interrupt |
URXC |
وقفه خالی بودن رجیستر داده UART |
Serial data register empty interrupt |
UDRE |
وقفه ارسال کامل داده UART |
Serial TX complete interrupt |
UTXC |
فعال و غیر فعال کننده تمام وقفه های UART |
Disable URXC , UDRE and UTXC |
SERIAL |
سایر وقفه ها |
OTHERS |
|
وقفه مقایسه کننده آنالوگ |
Analog comparator interrupt |
ACI |
وقفه ارتباط سریال SPI |
SPI interrupt |
SPI |
وقفه ارتباط سریال دو سیمه TOW WIRE |
TWI interrupt |
TWSI |
وقفه آمادگی EEPROM |
EEPROM interrupt |
ERDY |
وقفه اتمام تبدیل توسط واحد ADC |
A/D converter interrupt |
ADC |
مثال :
Config INT0 = Falling
Enable interrupts
Enable Int0
On Int0 label2
Do
Loop
End
Label2 :
Dim A As Byte
If A > 1 Then
Return
End If
Return