View
75
Download
1
Category
Preview:
DESCRIPTION
บทที่ 5 Interrupt. เทอดศักดิ์ ลิ่วหาทอง สาขาวิชาอิเล็กทรอนิกส์ สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง. Interrupt. ปัญหาของการเขียนโปรแกรมติดต่อกับอุปกรณ์ต่อพ่วงจำนวนมากคือ ไม่ทราบเวลาที่แน่นอนที่อุปกรณ์ต่อพ่วงเหล่านั้นต้องการติดต่อกับ PIC - PowerPoint PPT Presentation
Citation preview
บทท 5Interrupt
เทอดศกด ลวหาทองสาขาวชาอเลกทรอนกส
สถาบนเทคโนโลยพระจอมเกลาเจาคณทหารลาดกระบง
Interrupt
• ปญหาของการเขยนโปรแกรมตดตอกบอปกรณตอพวงจำานวนมากคอ– ไมทราบเวลาทแนนอนทอปกรณตอพวงเหลานน
ตองการตดตอกบ PIC– ทำาให PIC ตองทำาการวนตรวจสอบตลอดเวลาวาเมอไหรอปกรณตอพวงตองการทจะตดตอดวย
– เทคนคทใชในการตรวจสอบมอย 2 เทคนคคอ• Polling• Interrupt
Polling
• Polling เปนการเขยนโปรแกรมเพอตรวจสอบโลจกทไดรบจากอปกรณตอพวงตลอดเวลาวาเมอไหรทอปกรณตอพวงตองการทจะตดตอดวย
• ตวอยางเชนการตรวจสอบการกดสวทช โปรแกรมจะตองตรวจสอบตลอดเวลาวาเมอไหรทผใชกดสวทช
• ขอดของ Polling คอเขยนโปรแกรมงาย และตรวจสอบการทำางานของโปรแกรมไดงาย
• ขอเสยคอ PIC จะตองเสยเวลาในการตรวจสอบการกดสวทชตลอดเวลาทำาใหไมสามารถทำางานอยางอนได
while(1){ if(PORTBbits.RB0==0) { i++; if(i==8) i=7; PORTD = LED[i]; Delay10KTCYx(100); } if(PORTAbits.RA5==0) { i--; if(i<0) i=0; PORTD = LED[i]; Delay10KTCYx(100); }}
RB0
Vcc
Interrupt
• Interrupt เปนวงจรดจตอลทอยใน PIC ทำาการตรวจสอบโลจกทไดรบจากอปกรณตอพวง
• เมอวงจรตรวจพบวาอปกรณตอพวงตองการ ตดตอดวยกจะไปเรยกโปรแกรมทเหมาะสมตอไป
(Interrupt Service Routine ISR)Interrupt Service Routinei++;if(i==8) i=7;PORTD = LED[i];Delay10KTCYx(100);
INT0
Vcc
Interrupt Source
• สญญาณ Interrupt ของ PIC18F8722 มดงน• TMR0, TMR1, TMR2, TMR3, TMR4 เปน
สญญาณ Interrupt ทเกดจากวงจร Timer ทอย ภายใน PIC
• RB เปนสญญาณ Interrupt ทเกดจากการตรวจ สอบวามบทใดบทหนงของ RB<0:7> มการเปลยน
สถานะ• INT0, INT1, INT2, INT3 เปนสญญาณ Interrupt ทเกดจากอปกรณตอพวงภายนอกสงสญญาณ
มาบอก PIC วาตองการตดตอดวย
Interrupt Priority
• เนองจาก PIC สามารถรบสญญาณ Interrupt ไดหลายสญญาณ
• ดงนนจงมโอกาสทจะมสญญาณ Interrupt หลาย สญญาณสงไปให PIC พรอมๆกน หรอในเวลาท
ใกลเคยงกน• ตวอยางเชนผใชกดสวทชเพอสงสญญาณ INT0
ไปบอก PIC วาตองการตดตอดวย พรอมกบTMR0 สงสญญาณ Interrupt ไปบอก PIC ใหอาน
คาอณหภมจาก Thermal Sensor• ดงนนจะตองมวธการเพอตดสนใจวาจะให PIC
ทำาการตดตอกบผใชกอน หรอจะใหอานคาจากThermal Sensor กอน
Interrupt Priority
• ถา PIC ตดสนใจตดตอกบผใชกอนทจะไปอานคาจากThermal Sensor แสดงวา INT0 ม Priority สงกวาTMR0
• แตถา PIC อานคาจาก Thermal Sensor กอนตดตอกบผ ใช แสดงวา TMR0 ม Priority สงกวา INT0
• ถามสญญาณ Interrupt ทม Priority สง (High Priority) PIC จะไปเรยกโปรแกรมทเกบไวใน Address ท 0008H
• แตถามสญญาณ Interrupt ทม Priority ตำา (Low Priority) PIC จะไปเรยกโปรแกรทเกบไวใน Address ท0018H
Interruptvoid main (void){
กำาหนดคณสมบตของI/O Port, ADC, Timer
และ Interrupt กำาหนดคาเรมตนของ
I/O Port
while (1){
คำาสงท 1; คำาสงท 2;
: คำาสงท N
}}
0018HTimer Interrupt (Low Priority Interrupt)
อานคาจาก Thermal Sensor{
คำาสงท 1; คำาสงท 2; คำาสงท 3;
: คำาสงท N
}
0008HINT0 Interrupt (High Priority Interrupt)
ตดตอกบผใช{
คำาสงท 1; คำาสงท 2;
: คำาสงท N
}
Interrupt Bit
• สญญาณ Interrupt แตละสญญาณม Flag, Enable และ Priority Bit เพอใชควบคมการทำางานดงน
• Flag Bit (TMR0IF, TMR1IF, TMR2IF, TMR3IF, TMR4IF, RBIF, INT0IF, INT1IF, INT2IF, INT3IF) ถา
เปน 1 คอตรวจสอบพบสญญาณ Interrupt ถาเปน0 คอไมพบสญญาณ Interrupt
• Enable Bit (TMR0IE, TMR1IE, TMR2IE, TMR3IE, TMR4IE, RBIE, INT0IE, INT1IE, INT2IE, INT3IE) ถา
เปน 1 คอ Enable ถาเปน 0 คอ Disable
Interrupt Bit
• Priority Bit (TMR0IP, TMR1IP, TMR2IP, TMR3IP, TMR4IP, RBIP, INT0IP, INT1IP, INT2IP, INT3IP) ถา
เปน 1 คอตงใหเปน High Priority ถาเปน 0 ตงให เปน Low Priority
Interrupt Bit
• นอกจาก Flag, Enable, และ Priority ทสญญาณInterrupt แตละตวตองมแลว ยงมบททใชควบคม
การทำางานทงหมดของสญญาณ Interrupt คอ• IPEN (Interrupt Priority Enable) ถาเปน 1
เปนการ Enable การทำางานแบบ Priority ถาเปน 0 คอไมมการทำางานแบบ Priority
IPEN=1
• GIEH (Global Interrupt Enable High) ถาเปน 1 จะ Enable สญญาณ Interrupt ทกตวทม Priority
Bit = 1 ถาเปน 0 จะ Disable สญญาณ Interrupt ทกตวทม Priority Bit = 1
• GIEL (Global Interrupt Enable Low) ถาเปน 1 จะEnable สญญาณ Interrupt ทกตวทม Priority Bit = 0 ถาเปน 0 จะ Disable สญญาณ Interrupt
ทกตวทม Priority Bit = 0
IPEN=1
• ถา Flag Bit ของสญญาณ Interrupt แบบ High Priority เทากบ 1 PIC จะไปเรยกโปรแกรมทAddress 0008H
• ถา Flag Bit ของสญญาณ Interrupt แบบ Low Priority เทากบ 1 PIC จะไปเรยกโปรแกรมทAddress 0018H
IPEN=0
• PEIE (Peripheral Interrupt Enable) ถาเปน 1 จะEnable สญญาณ Interrupt จากอปกรณตอพวง
ทกตว ถาเปน 0 จะ Disable สญญาณ Interrupt จากอปกรณตอพวงทกตว
• GIE (Global Interrupt Enable) ถาเปน 1 จะ Enable สญญาณ Interrupt ทกตว ถาเปน 0 จะ Disable สญญาณ Interrupt ทกตว
• เมอ Flag Bit ของสญญาณ Interrupt ตวใดตวหนง เปน 1 PIC จะไปเรยกโปรแกรมท Address 0008H
Interrupt Respond
• เมอ Flag Bit = 1 และ PIC เรยกใชโปรแกรม Interrupt Service Routine (ISR) แลว จะทำาให GIEH = 0, GIEL = 0 ( ถา IPEN = 1) หรอ GIE = 0 ( ถา IPEN = 0)
• เพอปองกนไมให PIC รบสญญาณ Interrupt อนอก• สญญาณ Interrupt แบบ High Priority สามารถ
แทรกการทำางานของ Interrupt แบบ Low Priority แต สญญาณ Interrupt แบบ Low Priority ไมสามารถ
แทรกการทำางานของ Interrupt แบบ High Priority
Interrupt Respond
• เนองจาก PIC มสญญาณ Interrupt อยหลาย สญญาณ ดงนนเมอ ISR ถกเรยกใชแลว โปรแกรม
จะตองทำาการตรวจสอบวา เปนสญญาณ Interrupt ชนดใด โดยการตรวจสอบวา Flag Bit ของ
Interrupt ตวใดเปน 1• เพอปองกนไมให PIC รบสญญาณ Interrupt อนอก• เมอออกจาก ISR แลว GIE = 1 ( หรอ GIEH=1,
GIEL=1) โดยอตโนมตเพอให PIC สามารถรบ สญญาณ Interrupt ตวใหมได
Recommended