Microcontroller      Mr.Adisak Chinawong

 Adisak chinawong   
         ข้อมูลเมื่อ  8 มกราคม 2543               

     Back to menu    

  อินเตอร์รัพท์ (Interrupt)

การที่เราจะเฝ้าคอยเหตุการณ์อะไรสักอย่างที่อาจจะเกิดขึ้น และถ้าหากเรามีการเตรียมพร้อมที่จะรับกับสถานะการณ์นั้นๆแล้ว ไม่ว่าจะเกิดอะไรขึ้นเราก็พร้อมที่จะรับสถานะการณ์ได้ เราก็คงจะไม่ต้องมาพะว้าพะวงกันเหตุการณ์ที่จะเกิดขึ้น ซึ่งอาจจะเกิดเหตุการณ์ขึ้นจริงหรือไม่? ก็ยังไม่รู้ แต่อาจจะทำให้ต้องเสียเวลาในการที่จะต้องมารอคอยกับเหตุการณ์นั้นๆ และต้องกังวลใจตลอดเวลา ไมโครคอนโทรลเลอร์ก็เช่นเดียวกัน หากมีการเฝ้าติดตามการติดต่อของอุปกรณ์ภายนอก หรือสัญญาณที่ต้องการจะตรวจสอบตลอดเวลา ถึงแม้อุปกรณ์ภายนอก หรือสัญญาณที่ต้องการติดต่อจะยังไม่เกิดขึ้นเลย ไมโครคอนโทรลเลอร์ก็จะต้องคอยตรวจสอบตลอดเวลา และในการตรวจสอบแต่ละครั้ง ก็จะต้องแบ่งเวลาจากการปฏิบัติในโปรแกรมหลักที่ทำงานอยู่ และหากมีหลายๆเหตุการณ์ที่ต้องการตรวจสอบก็จะต้องเสียเวลาในการตรวจสอบมากขึ้น วิธีการในการตรวจสอบของไมโครคอนโทรลเลอร์แบบนี้เราเรียกว่า วิธีการโพลลิ่ง(Polling) จะสังเกตได้จากการการทดลองในใบงานที่ผ่านๆมา เช่นในการเขียนโปรแกรมคีย์เมตริกซ์เราจะต้องคอยตรวจสอบการกดคีย์ตลอดเวลา เพื่อที่จะตรวจสอบการสแกนข้อมูลของส่วนแถวและหลัก ดังนั้นเพื่อที่จะไม่ต้องทำการตรวจสอบตลอดไมโครคอนโทรลเลอร์จึงมีการบริการส่วนของการใช้งานที่เรียกว่า วิธีการอินเตอร์รัพท์ (Interrupt) ซึ่งหมายถึงการขัดจังหวะ โดยในขณะที่ไมโครคอนโทรลเลอร์กำลังทำงานในส่วนของโปรแกรมหลักอยู่นั้น ก็จะไม่ต้องคอยตรวจสอบกับเหตุการณ์ต่างๆที่จะเกิดขึ้น แต่จะใช้วิธีการรับสัญญาณการร้องขอที่ส่งมาจากอุปกรณ์ภายนอกหรือสัญญาณจากภายในของตัวไมโครคอนโทรลเลอร์เอง มาทำการอินเตอร์รัพท์ (Interrupt) และเมื่อไมโครคอนโทรลเลอร์ได้รับสัญญาณจากการอินเตอร์รัพท์ แล้วก็จะทำการตรวจสอบในส่วนของการติดต่อจากเหตุการณ์ในส่วนนั้นๆ ที่เราได้เขียนโปรแกรมคำสั่งกำหนดไว้แล้วในส่วนของโปรแกรมการบริการการอินเตอร์รัพท์ในตัวไมโครคอนโทรลเลอร์มีแหล่งสัญญาณที่เป็นการอินเตอร์รัพท์หลายแหล่งด้วยกันทั้งภายนอกและภายในของตัวไอซีไมโครคอนโทรลเลอร์ แต่ในที่นี้เราจะมาศึกษาการอินเตอร์รัพท์ของไมโครคอนโทรลเลอร์ทีละลำดับ โดยเริ่มจากการอินเตอร์รัพท์ภายนอกก่อน
สัญญาณการอินเตอร์รัพท์จากภายนอก

รูปที่ 1 แสดงตำแหน่งขาต่างๆ และการร้องขอการอินเตอร์รัพท์ของไมโครคอนโทรลเลอร์


การอินเตอร์รัพท์สามารถที่จะเลือกใช้สัญญาณอินเตอร์รัพท์ที่แอคทีฟโดยการเปลี่ยนจากสถานะลอจิก "1" ไปลอจิก "0" (ขอบขาลง) หรือเลือกใช้สัญญาณอินเตอร์รัพท์ที่แอคทีฟโดยลอจิก "0" (Level)

สัญญาณการขออินเตอร์รัพท์
ความหมาย
INT0
สัญญาณการร้องขอการอินเตอร์รัพท์จากภายนอกทางขา P3.2
( ขาที่ 6 ของไอซี 89CX051 และ ขาที่12 ของ89C51)
INT1
สัญญาณการร้องขอการอินเตอร์รัพท์จากภายนอกทางขา P3.3
( ขาที่ 7ของไอซี 89CX051 และ ขาที่ 13 ของ89C51)

สัญญาณการขออินเตอร์รัพท์ ความหมาย
INT0 สัญญาณการร้องขอการอินเตอร์รัพท์จากภายนอกทางขา P3.2
( ขาที่ 6 ของไอซี 89CX051 และ ขาที่12 ของ89C51)
INT1 สัญญาณการร้องขอการอินเตอร์รัพท์จากภายนอกทางขา P3.3
( ขาที่ 7ของไอซี 89CX051 และ ขาที่ 13 ของ89C51)

ตารางที่ 1 แสดงสัญญาณ และความหมายของการอินเตอร์รัพท์


รีจิสเตอร์ที่ใช้งาน
          รีจิสเตอร์ ที่ใช้ในการทดลองในตอนนี้จะขอแนะนำให้รู้จักกับ รีจิสเตอร์ IE (Interrupt Enable Register), รีจิสเตอร์ IP (Interrupt Priority Register) และ รีจิสเตอร์ TCON (Timer Control Register) โดยจะอธิบายเป็นลำดับดังต่อไปนี้

รีจิสเตอร์ IE : Interrupt Enable Register (Bit addressable) เป็นรีจิสเตอร์ฟังก์ชั่นพิเศษ(SFR) ที่อยู่ในตำแหน่งแอดเดรส A8H มีขนาด 8 บิต และสามารถเข้าถึงในระดับบิตได้ ในสภาวะเริ่มต้นของไมโครคอนโทรลเลอร์หลังการรีเซต จะกำหนดให้ค่าของรีจิสเตอร์ IE มีค่า 0XX0000 เป็นค่าเริ่มต้น (AT89CX051)แต่ในส่วนของการเรียนรู้ในตอนนี้เราจะเรียนรู้เพื่อใช้งานเพียงแค่ 3 บิตก่อนคือ EA, EX1 และ EX0



EA หรือ IE.7 (Enable/Disable all interrupt) หากเรากำหนดให้บิตนี้มีค่าเป็นสถานะลอจิก "0" จะไม่มีการตอบรับอินเตอร์รัพท์ทั้งหมด และหากเราต้องการให้มีการตอบรับอินเตอร์รัพท์ เราจะต้องเซตให้บิตที่ EA เป็นสถานะลอจิก "1" และเซตบิตควบคุมแต่ละอินเตอร์รัพท์ที่ต้องการใช้อินเตอร์รัพท์ให้เป็น "1" ด้วย โดยใช้คำสั่ง เซตบิตหรือเคลียร์บิต
EX1 หรือ IE.2 เป็นบิตที่ทำหน้าที่ควบคุมให้ทำการตอบรับการอินเตอร์รัพท์จากภายนอก INT1 หรือไม่ (ถ้ากำหนดให้บิต EX1 เป็นสถานะลอจิก "1" จะเป็นการตอบรับการอินเตอร์รัพท์ที่ INT1 แต่ถ้ากำหนดให้ เป็นสถานะลอจิก "0" จะไม่ตอบรับการอินเตอร์รัพท์ที่ INT1)
EX0 หรือ IE.0 เป็นบิตที่ทำหน้าที่ควบคุมให้ทำการตอบรับการอินเตอร์รัพท์จากภายนอก INT0 หรือไม่ (ถ้ากำหนดให้บิต EX0 เป็นสถานะลอจิก "1" จะเป็นการตอบรับการอินเตอร์รัพท์ที่ INT0แต่ถ้ากำหนดให้ เป็นสถานะลอจิก "0" จะไม่ตอบรับการอินเตอร์รัพท์ที่ IINT0 )

รีจิสเตอร์ IP : Interrupt Priority Register
เป็นรีจิสเตอร์ฟังก์ชั่นพิเศษ(SFR) ที่อยู่ในตำแหน่งแอดเดรสที่ B8H และมีขนาด 8 บิต สามารถเข้าถึงในระดับบิตได้ ในสภาวะเริ่มต้นของไมโครคอนโทรลเลอร์หลังการรีเซต จะกำหนดให้ค่าของรีจิสเตอร์ IP มีค่า XXX0000 เป็นค่าเริ่มต้น (AT89CX051) การจัดลำดับความสำคัญการอินเตอร์รัพท์ของไมโครคอนโทรลเลอร์ จะจัดได้ 2 ระดับแตกต่างกัน โดยทำการเซตค่าในรีจิสเตอร์ควบคุมการจัดลำดับความสำคัญ (IP : Interrupt Priority Register) และในกรณีที่ไม่มีการจัดลำดับความสำคัญของการอินเตอร์รัพท์ หรือจัดให้มีความสำคัญในระดับเดียวกัน ไมโครคอนโทรลเลอร์ก็จะจัดให้มีลำดับความสำคัญของสัญญาณอินเตอร์รัพท์ ตามลำดับความสำคัญจากสูงไปต่ำดังแสดงในตาราง เพื่อแก้ปัญหาการขออินเตอร์รัพท์ในระดับเดียวกันและเกิดขึ้นพร้อมกัน)

การกำหนดลำดับความสำคัญของการอินเตอร์รัพท์กำหนดได้จากบิตต่างๆ ของรีจิสเตอร์ IP โดยบิตที่มีค่าเป็น 1 จะมีลำดับความสำคัญสูงกว่า
         PX1 IP.2 การกำหนดลำดับความสำคัญของสัญญาณ INT1 (External Interrupt 1)
         PX0 IP.0 การกำหนดลำดับความสำคัญของสัญญาณ INT0 (External Interrupt 0)


หากบิตใดมีค่าสถานะลอจิกเป็น "1" จะมีลำดับความสำคัญสูง แต่ถ้าหากไม่มีการจัดลำดับความสำคัญแล้ว การอินเตอร์รัพท์จาก INT0จะมีลำดับสูงกว่าการอินเตอร์รัพท์แบบ INT1 ซึ่งเป็นค่าเริ่มต้น และเมื่อมีการกำหนดลำดับความสำคัญของการอินเตอร์รัพท์แตกต่างกันแล้ว หากมีการร้องขออินเตอร์รัพท์เกิดขึ้นพร้อมกันจากแหล่งกำเนิด 2 แหล่งกำเนิดที่มีระดับความสำคัญแตกต่างกัน ไมโครคอนโทรลเลอร์จะตอบรับการร้องขอการอินเตอร์รัพท์จากแหล่งกำเนิดสัญญาณอินเตอร์รัพท์ที่มีระดับความสำคัญสูงกว่า และสัญญาณการร้องขออินเตอร์รัพท์ที่มีระดับความสำคัญสูงกว่า จะสามารถร้องขอการอินเตอร์รัพท์ซ้อน ในขณะที่ไมโครคอนโทรลเลอร์กำลังทำโปรแกรมตอบสนองการอินเตอร์รัพท์ของสัญญาณ ที่มีความสำคัญต่ำกว่าได้
หมายเหตุ ในขณะที่ไมโครคอนโทรลเลอร์กำลังทำโปรแกรมตอบสนองการอินเตอร์รัพท์อยู่ จะไม่สามารถตอบรับการร้องขออินเตอร์รัพท์จากแหล่งกำเนิดระดับที่ต่ำกว่าหรือระดับเดียวกันได้อีก จนกว่าจะจบโปรแกรมตอบสนองการอินเตอร์รัพท์ก่อน

รีจิสเตอร์ TCON (Timer Control Register)
เป็นรีจิสเตอร์ที่ทำหน้าที่ควบคุมการเลือกลักษณะสัญญาณอินเตอร์รัพท์จากภายนอก และเป็นส่วนของรีจิสเตอร์ฟังก์ชั่นพิเศษ(SFR) ที่อยู่ในตำแหน่งแอดเดรสที่ 88H และมีขนาด 8 บิต สามารถเข้าถึงในระดับบิตได้ ในสภาวะเริ่มต้นของไมโครคอนโทรลเลอร์หลังการรีเซต จะกำหนดให้ค่าของรีจิสเตอร์ TCON มีค่า 0000000 เป็นค่าเริ่มต้น สัญญาณการอินเตอร์รัพท์ของ Timer โดยรีจิสเตอร์นี้จะทำหน้าที่เป็นแฟลกแสดงสถานะการทำงาน 4 บิตที่เซต และเคลียร์ด้วยการทำงานของฮาร์ดแวร์ ส่วนที่เหลืออีก 4 บิตเป็นบิตควบคุมการทำงานของ Timer ซึ่งเราเซตและเคลียร์ด้วยคำสั่งทางซอฟต์แวร์จากการใช้คำสั่งการเซตบิต หรือการโอนย้ายข้อมูลก็ได้ บิตต่าง ๆ ของรีจิสเตอร์ TCON ส่วนของที่เป็น Timer จะกล่าวถึงในตอนต่อไป


IE1:TCON.3 (External interrupt 1 edge flag) เป็นแฟลกการร้องขออินเตอร์รัพท์ภายนอกของสัญญาณ INT1 บิตนี้จะถูกเซตด้วยฮาร์ดแวร์เมื่อมีสัญญาณอินเตอร์รัพท์เข้ามาที่ขา INT1 และบิตนี้จะถูกเคลียร์อัตโนมัติเมื่อไมโครคอนโทรลเลอร์กระโดดไปทำโปรแกรมตอบสนองการอินเตอร์รัพท์ของสัญญาณ INT1 ซึ่งอยู่ในตำแหน่งเริ่มต้นที่แอดเดรส 0013H ของหน่วยความจำโปรแกรม
IT1:TCON.2 (Interrupt 1 type control bit) เป็นบิตควบคุมการเลือกรูปแบบการแอคทีฟของสัญญาณอินเตอร์รัพท์ จากภายนอกที่ขา INT1 ซึ่งเราสามารถเซตหรือเคลียร์ด้วยซอฟต์แวร์ ดังนี้
         1 = เลือกใช้สัญญาณอินเตอร์รัพท์ INT1 แอคทีฟที่การเปลี่ยนจาก "1" ไป "0" (ขอบขาลง)
         0 = เลือกใช้สัญญาณอินเตอร์รัพท์ INT1 แอคทีฟที่ลอจิก "0" (Level)

IE0:TCON.1 (External interrupt 0 edge flag) เป็นแฟลกการร้องขออินเตอร์รัพท์จากสัญญาณ INT1 บิตนี้จะถูกเซตด้วยฮาร์ดแวร์เมื่อมีสัญญาณอินเตอร์รัพท์เข้ามาที่ขา INT0 และบิตนี้จะถูกเคลียร์อัตโนมัติเมื่อไมโครคอนโทรลเลอร์กระโดดไปทำโปรแกรมตอบสนองการอินเตอร์รัพท์ของสัญญาณ INT0 ซึ่งอยู่ในตำแหน่งแอดเดรส 0003H ของหน่วยความจำโปรแกรม
IT0:TCON.0 (Interrupt 0 type control bit) เป็นบิตควบคุมการเลือกรูปแบบการแอคทีฟของสัญญาณอินเตอร์รัพท์จากภายนอกที่ขา INT0 ซึ่งเราสามารถเซตหรือเคลียร์ด้วยซอฟต์แวร์
         1 = เลือกใช้สัญญาณอินเตอร์รัพท์ INT0 แอคทีฟที่การเปลี่ยนจาก "1" ไป "0" (ขอบขาลง)
         0 = เลือกใช้สัญญาณอินเตอร์รัพท์ INT0 แอคทีฟที่ลอจิก "0" (Level)

เราสามารถเลือกลักษณะสัญญาณร้องขอการอินเตอร์รัพท์ได้สองลักษณะโดยเลือกที่รีจีสเตอร์ TCON ได้
         1 เลือกใช้สัญญาณแอคทีฟที่ระดับลอจิก "0" หรือ Low Level Triggered
         2 เลือกใช้ที่ขอบขาลงของสัญญาณที่เปลี่ยนแปลงของสถานะจากลอจิก "1" ไป "0" (falling edge)


รูปที่ 2 แสดงการเลือกใช้สัญญาณแอคทีฟที่ระดับลอจิก "0" หรือที่ขอบขาลงของสัญญาณ

สัญญาณต่าง ๆ ของการร้องขออินเตอร์รัพท์ทั้งหมด เราสามารถเซตหรือเคลียร์ได้ด้วยซอฟต์แวร์เช่นเดียวกับฮาร์ดแวร์ ดังนั้นการร้องขออินเตอร์รัพท์จึงสามารถสร้างหรือยกเลิกได้ด้วยซอฟต์แวร์ แหล่งกำเนิดสัญญาณอินเตอร์รัพท์ทั้งหมด เราสามารถควบคุมให้ทำการร้องขออินเตอร์รัพท์หรือไม่ก็ได้ โดยการเซตหรือเคลียร์บิตต่างๆที่อยู่ใน รีจิสเตอร์ IE (Interrupt Enable) ภายในรีจิสเตอร์ IE มีบิต EA ที่ทำหน้าที่ควบคุมให้ไมโครคอนโทรลเลอร์ตอบรับการร้องขออินเตอร์รัพท์หรือไม่ตอบรับทั้งหมด หากเรากำหนดให้บิต EA ( Enable all ) เป็น "0" ไมโครคอนโทรลเลอร์จะไม่ตอบรับการร้องขออินเตอร์รัพท์ทั้งหมด
โปรแกรมการตอบสนองอินเตอร์รัพท์จะต้องทำคำสั่งเริ่มต้นของโปรแกรม ถ้ามีการใช้อินเตอร์รัพท์หากความยาวของโปรแกรมตอบสนองอินเตอร์รัพท์มีความยาวมากกว่า 8 ไบต์ ต้องนำไปเขียนเป็นโปรแกรมย่อยไว้ภายนอก แล้วใช้วิธีการเรียกโปรแกรมย่อยมาทำงาน เพราะระยะห่างตำแหน่งแอดเดรสของโปรแกรมตอบสนองอินเตอร์รัพท์แต่ละตัว จะมีระยะห่างแค่ 8 ไบต์เท่านั้นเอง


คำสั่งและขั้นตอนการเขียนโปรแกรม

ุ ขั้นตอนที่ 1 ส่วนของโปรแกรม


                           ORG 0000H
                           SJMP MAIN
                           ORG 0003H
                           SJMP INT_0
                           ORG 0013H
                           SJMP INT_1
                 MAIN: SETB EA
                                 .
                                 .
                 INT_0:     .
                                 .
                             RETI
                 INT_1:     .
                                 .
                            RETI
                             END


SJMP MAIN , SJMP INT_0, SJMP INT_1 ด้วยเหตุผลว่าถ้าหากเราเริ่มการเขียนโปรแกรมหลัก ตั้งแต่ตำแหน่งแอดเดรส 0000H ไปต้นไป จนถึงตำแหน่งแอดเดรส 0003 H โปรแกรมหลักก็จะไปทับกับตำแหน่งแอดเดรสของ INT0 และถ้าหากโปรแกรมหลักใช้เนื้อที่ในการเขียนโปรแกรม ยาวไปถึงแอดเดรส ที่0013H ก็จะไปทับกับตำแหน่งของ INT1 ดังนั้นจึงต้องสั่งให้ เริ่มต้นโปรแกรม โดยกระโดดไปเริ่มทำที่ตำแหน่งแอดเดรสของเลเบล MAIN และระยะห่างของตำแหน่งแอดเดรสที่ใช้บริการการอินเตอร์รัพท์แต่ละตัว ห่างกันเพียงแค่ 8 ไบต์เท่านั้น ส่วนคำสั่ง SJMP INT_1 และ SJMP INT_1 ก็มีเหตุผลทำนองเดียวกัน

RETI การกลับออกจากโปรแกรมย่อยของการบริการการอินเตอร์รัพท์ ต้องใช้คำสั่ง RETI ในการคืนค่าใน สแตกพอร์ยเตอร์และกลับสู่โปรแกรมหลัก ซึ่งอักษร I หมายถึง Return Interrupt

ขั้นตอนที่ 2 เริ่มต้นโดยการเซตที่ตำแหน่งบิต EA (Enable/Disable all interrupt) ให้สถานะลอจิกเป็น "1" เพื่อเป็นการอนุญาติให้มีการอินเตอร์รัพท์ทั้งหมดได้ เราจะต้องเขียนคำสั่งนี้ในส่วนของโปรแกรมในตำแหน่งเลเบล MAIN โดยใช้คำสั่ง SETB EA ;เป็นคำสั่งที่ให้ทำการตอบรับการอินเตอร์รัพท์ทั้งหมด หรือจะเขียนได้เป็น SETB IE.7

ขั้นตอนที่ 3 เลือกการอินเตอร์รัพท์โดยการเซตบิตที่รีจีสเตอร์ IE ที่บิต EX0 หรือที่บิต EX1ว่าจะให้อินเตอร์รัพท์ที่ขา INT0 หรือที่ขา INT1อาจจะเซตบิตทั้งสองขาก็ได้ โดยจากในขั้นตอนที่ 1 เราจะเขียนในส่วนของคำสั่งนี้ในส่วนของโปรแกรมในตำแหน่งเลเบล MAIN โดยใช้คำสั่ง
SETB EX0 ; ให้อินเตอร์รัพท์ที่ขา INT0 จะกระโดดไปที่แอดเดรส 0003H หรือจะเขียนได้เป็น SETB IE.0
SETB EX1 ; ให้อินเตอร์รัพท์ที่ขา INT1 จะกระโดดไปที่แอดเดรส 0013H หรือจะเขียนได้เป็น SETB IE.1จากขั้นตอนที่ 2 และขั้นตอนที่ 3 สามารถเขียนรวมได้เป็น

MOV IE,#10000101B ; ทำการเซตบิต EA="1", EX0="1", EX1="1"
SETB P3.2 ; ทำ P3.2 ให้เป็นอิมพีแดนซ์สูง (INPUT)
SETB P3.3 ; ทำ P3.3 ให้เป็นอิมพีแดนซ์สูง (INPUT)

หลังจากการกำหนดค่าในรีจิสเตอร์ต่างๆ แล้ว การใช้งานสัญญาณร้องขอการอินเตอร์รัพท์จากภายนอก INT0 และ INT1 (ขา P3.2 และ P3.3) จะต้องเซตบิต P3.2 และ P3.3 ให้เป็น "1" ในตอนเริ่มต้นก่อนเพื่อทำให้เป็นอิมพีแดนซ์สูง โดยใช้คำสั่ง SETB P3.2 และ SETB P3.3

ขั้นตอนที่ 4 ทำการเลือกลักษณะของสัญญาณการอินเตอร์รัพท์โดยการเซตบิตที่รีจีสเตอร์ TCON ที่ตำแหน่ง
บิต IT0 หรือที่บิต IT1 ว่าจะให้สัญญาณการอินเตอร์รัพท์เป็นลักษณะใด จากขั้นตอนที่ 1 เราจะต้องเขียนคำสั่งนี้ในส่วนของโปรแกรมในตำแหน่งเลเบล MAIN
ในการเปลี่ยนระดับสัญญาณเพื่อให้เป็นระดับสถานะลอจิกต่ำหรือ "0" เราจะต้องทำให้ขาสัญญาณนี้กลับเป็นสถานะลอจิก "1" ก่อนที่การบริการอินเตอร์รัพท์จะเสร็จสิ้น เพื่อป้องกันการเกิดการอินเตอร์รัพท์ซ้ำซ้อน
การเปลี่ยนระดับสัญญาณจาก "1" ไปเป็น "0" โดยทำที่ขอบขาลง จะต้องรักษาสถานะของลอจิก "0" ไม่น้อยกว่า 1 แมชชีนไซเคิล

โดยใช้คำสั่ง
SETB IT0 ;ลักษณะของสัญญาณเป็นการทำงานที่ขอบขาลง
SETB IT1 ;ลักษณะของสัญญาณเป็นการทำงานที่ขอบขาลง

ขั้นตอนที่ 5 ทำการเลือกลำดับความสำคัญของการอินเตอร์รัพท์ โดยทำการกำหนดที่รีจีสเตอร์ IP ที่ตำแหน่งบิต IP0 และ IP2 SETB IP.2 กำหนดลำดับความสำคัญสูงของสัญญาณ INT1 (External Interrupt 1)CLR IP.0 กำหนดลำดับความสำคัญต่ำของสัญญาณ INT0 (External Interrupt 0)หากบิตใดที่มีการกำหนดค่าเป็นสถานะลอจิก "1" จะมีลำดับความสำคัญสูง แต่หากไม่มีการเซตบิตใดๆ ในการจัดความสำคัญ ดังนั้น INT0 จะมีลำดับความสำคัญสูงกว่า INT1อยู่แล้ว ซึ่งเป็นค่าเริ่มต้นของไมโครคอนโทรลเลอร์ และจากการเขียนโปรแกรมในขั้นตอนที่ 1 เราจะเขียนในส่วนของเลเบล MAIN โปรแกรม

Designed by Mr.Adisak chinawong

Main | Menu | Web board | Link | มโนสาเร