1 / 33

บทที่ 5 Interrupt

บทที่ 5 Interrupt. เทอดศักดิ์ ลิ่วหาทอง สาขาวิชาอิเล็กทรอนิกส์ สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง. Interrupt. ปัญหาของการเขียนโปรแกรมติดต่อกับอุปกรณ์ต่อพ่วงจำนวนมากคือ ไม่ทราบเวลาที่แน่นอนที่อุปกรณ์ต่อพ่วงเหล่านั้นต้องการติดต่อกับ PIC

ebony
Download Presentation

บทที่ 5 Interrupt

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 5Interrupt เทอดศักดิ์ ลิ่วหาทอง สาขาวิชาอิเล็กทรอนิกส์ สถาบันเทคโนโลยีพระจอมเกล้าเจ้าคุณทหารลาดกระบัง

  2. Interrupt • ปัญหาของการเขียนโปรแกรมติดต่อกับอุปกรณ์ต่อพ่วงจำนวนมากคือ • ไม่ทราบเวลาที่แน่นอนที่อุปกรณ์ต่อพ่วงเหล่านั้นต้องการติดต่อกับ PIC • ทำให้ PIC ต้องทำการวนตรวจสอบตลอดเวลาว่าเมื่อไหร่อุปกรณ์ต่อพ่วงต้องการที่จะติดต่อด้วย • เทคนิคที่ใช้ในการตรวจสอบมีอยู่ 2 เทคนิคคือ • Polling • Interrupt

  3. 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); } }

  4. Interrupt • Interrupt เป็นวงจรดิจิตอลที่อยู่ใน PIC ทำการตรวจสอบโลจิกที่ได้รับจากอุปกรณ์ต่อพ่วง • เมื่อวงจรตรวจพบว่าอุปกรณ์ต่อพ่วงต้องการติดต่อด้วยก็จะไปเรียกโปรแกรมที่เหมาะสมต่อไป (Interrupt Service Routine ISR) Interrupt Service Routine i++; if(i==8) i=7; PORTD = LED[i]; Delay10KTCYx(100);

  5. Interrupt Source • สัญญาณ Interrupt ของ PIC18F8722 มีดังนี้ • TMR0, TMR1, TMR2, TMR3, TMR4 เป็นสัญญาณ Interrupt ที่เกิดจากวงจร Timer ที่อยู่ภายใน PIC • RB เป็นสัญญาณ Interrupt ที่เกิดจากการตรวจสอบว่ามีบิทใดบิทหนึ่งของ RB<0:7> มีการเปลี่ยนสถานะ • INT0, INT1, INT2, INT3 เป็นสัญญาณ Interrupt ที่เกิดจากอุปกรณ์ต่อพ่วงภายนอกส่งสัญญาณมาบอก PIC ว่าต้องการติดต่อด้วย

  6. Interrupt Priority • เนื่องจาก PIC สามารถรับสัญญาณ Interrupt ได้หลายสัญญาณ • ดังนั้นจึงมีโอกาสที่จะมีสัญญาณ Interrupt หลายสัญญาณส่งไปให้ PIC พร้อมๆกัน หรือในเวลาที่ใกล้เคียงกัน • ตัวอย่างเช่นผู้ใช้กดสวิทช์เพื่อส่งสัญญาณ INT0 ไปบอก PIC ว่าต้องการติดต่อด้วย พร้อมกับ TMR0 ส่งสัญญาณ Interrupt ไปบอก PIC ให้อ่านค่าอุณหภูมิจาก Thermal Sensor • ดังนั้นจะต้องมีวิธีการเพื่อตัดสินใจว่าจะให้ PIC ทำการติดต่อกับผู้ใช้ก่อน หรือจะให้อ่านค่าจาก Thermal Sensor ก่อน

  7. 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

  8. Interrupt • void main (void) • { • กำหนดคุณสมบัติของ I/O Port, ADC,Timer และ Interrupt • กำหนดค่าเริ่มต้นของ I/O Port • while (1) • { • คำสั่งที่ 1; • คำสั่งที่ 2; • : • คำสั่งที่ N • } • } • 0018H • Timer Interrupt (Low Priority Interrupt) • อ่านค่าจาก Thermal Sensor • { • คำสั่งที่ 1; • คำสั่งที่ 2; • คำสั่งที่ 3; • : • คำสั่งที่ N • } • 0008H • INT0 Interrupt (High Priority Interrupt) • ติดต่อกับผู้ใช้ • { • คำสั่งที่ 1; • คำสั่งที่ 2; • : • คำสั่งที่ N • }

  9. 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

  10. Interrupt Bit • Priority Bit (TMR0IP, TMR1IP, TMR2IP, TMR3IP, TMR4IP, RBIP, INT0IP, INT1IP, INT2IP, INT3IP) ถ้าเป็น 1 คือตั้งให้เป็น High Priority ถ้าเป็น 0 ตั้งให้เป็น Low Priority

  11. Interrupt Bit • นอกจาก Flag, Enable, และ Priority ที่สัญญาณ Interrupt แต่ละตัวต้องมีแล้ว ยังมีบิทที่ใช้ควบคุมการทำงานทั้งหมดของสัญญาณ Interrupt คือ • IPEN (Interrupt Priority Enable) ถ้าเป็น 1 เป็นการ Enable การทำงานแบบ Priority ถ้าเป็น 0 คือไม่มีการทำงานแบบ Priority

  12. 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

  13. IPEN=1 • ถ้า Flag Bit ของสัญญาณ Interrupt แบบ High Priority เท่ากับ 1 PIC จะไปเรียกโปรแกรมที่ Address 0008H • ถ้าFlag Bit ของสัญญาณ Interrupt แบบ Low Priority เท่ากับ 1 PIC จะไปเรียกโปรแกรมที่ Address 0018H

  14. 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

  15. 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

  16. Interrupt Respond • เนื่องจาก PIC มีสัญญาณ Interrupt อยู่หลายสัญญาณ ดังนั้นเมื่อ ISR ถูกเรียกใช้แล้ว โปรแกรมจะต้องทำการตรวจสอบว่า เป็นสัญญาณ Interrupt ชนิดใด โดยการตรวจสอบว่า Flag Bit ของ Interrupt ตัวใดเป็น 1 • เพื่อป้องกันไม่ให้ PIC รับสัญญาณ Interrupt อื่นอีก • เมื่อออกจาก ISR แล้ว GIE = 1 (หรือ GIEH=1, GIEL=1) โดยอัตโนมัติเพื่อให้ PIC สามารถรับสัญญาณ Interrupt ตัวใหม่ได้

More Related