◀ Previous Next ▶ Up ▲


ช่วยดูการใช้งาน Interrupt ของ PIC หน่อยครับ

พอดีมีแหล่งอินเตอร์รัปสองแหล่ง คือจาก Timer0 ทุกหนึ่งวินาทีเพื่อให้ Led กระพริบที่ขา RC1 และจาก EXT interrupt ขา RA2 (ผมใช้เบอร์ 16G684) จาก H to L ถ้าต่างโปรแกรมกันก็ทำงานดี แต่เอามารวมกันไม่ได้ มันไม่ทำงาน ไปหาข้อมูลมาได้ดังนี้

Interrupt Flag 

In our INTCON register, bit 1 is the interrupt flag, called INTF.  Now, when any interrupt occurs, this flag will be set to 1.  While there isn’t an interrupt, the flag is set to 0.  And that is all it does.  Now you are probably thinking ‘what is the point?’  Well, while this flag is set to 1, the PIC cannot, and will not, respond to any other interrupt.  So, let’s say that we cause an interrupt.  The flag will be set to 1, and the PIC will go to our routine for processing the interrupt.  If this flag wasn’t set to 1, and the PIC was allowed to keep responding to the interrupt, then continually pulsing the pin will keep the PIC going back to the start of our interrupt routine, and never finishing it.  Going back to my  example of the telephone, it’s like picking up the telephone, and just as soon as you start to speak it starts ringing again because someone else want to talk to you.  It is far better to finish one conversation, then pick up the phone again to talk to the second person. 

There is a slight drawback to this flag.  Although the PIC automatically sets this flag to 1, it doesn’t set it back to 0!  That task has to be done by the programmer – i.e. you.  This is easily done, as We are sure you can guess, and has to be done after the PIC has executed the interrupt routine.

ก็พอเข้าใจนิดหน่อยว่า เมื่อเกินอินเตอร์รัปแล้วต้องเคลียร์ INTF ไม่งั้นมันจะค้าง ไปทำอย่างอื่นไม่ได้

ที่ไม่เข้าใจคือภาษาซีเคลียร์ INTF อย่างไร แล้วต้องไปเคลียร์ในส่วนไหนของโปรแกรม


จากคุณ : ekkom -[ 27 ส.ค. 51 - 14:20:32 ]