﻿<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://www.yfrobot.com.cn/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
		<id>https://www.yfrobot.com.cn/wiki/index.php?action=history&amp;feed=atom&amp;title=Cores%3AWInterrupts.c</id>
		<title>Cores:WInterrupts.c - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="https://www.yfrobot.com.cn/wiki/index.php?action=history&amp;feed=atom&amp;title=Cores%3AWInterrupts.c"/>
		<link rel="alternate" type="text/html" href="https://www.yfrobot.com.cn/wiki/index.php?title=Cores:WInterrupts.c&amp;action=history"/>
		<updated>2026-04-06T06:39:57Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>https://www.yfrobot.com.cn/wiki/index.php?title=Cores:WInterrupts.c&amp;diff=337&amp;oldid=prev</id>
		<title>Admin：以“&lt;font color=&quot;quartz&quot; size =&quot;+2&quot;&gt; '''WInterrupts.c ''' &lt;/font&gt;  &lt;pre style=&quot;color:royalblue&quot;&gt; /* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */  /*   ...”为内容创建页面</title>
		<link rel="alternate" type="text/html" href="https://www.yfrobot.com.cn/wiki/index.php?title=Cores:WInterrupts.c&amp;diff=337&amp;oldid=prev"/>
				<updated>2015-07-10T11:39:33Z</updated>
		
		<summary type="html">&lt;p&gt;以“&amp;lt;font color=&amp;quot;quartz&amp;quot; size =&amp;quot;+2&amp;quot;&amp;gt; &amp;#039;&amp;#039;&amp;#039;WInterrupts.c &amp;#039;&amp;#039;&amp;#039; &amp;lt;/font&amp;gt;  &amp;lt;pre style=&amp;quot;color:royalblue&amp;quot;&amp;gt; ‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;-*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*-：&lt;/span&gt;  /*   ...”为内容创建页面&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;font color=&amp;quot;quartz&amp;quot; size =&amp;quot;+2&amp;quot;&amp;gt; '''WInterrupts.c ''' &amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;color:royalblue&amp;quot;&amp;gt;&lt;br /&gt;
/* -*- mode: jde; c-basic-offset: 2; indent-tabs-mode: nil -*- */&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  Part of the Wiring project - http://wiring.uniandes.edu.co&lt;br /&gt;
&lt;br /&gt;
  Copyright (c) 2004-05 Hernando Barragan&lt;br /&gt;
&lt;br /&gt;
  This library is free software; you can redistribute it and/or&lt;br /&gt;
  modify it under the terms of the GNU Lesser General Public&lt;br /&gt;
  License as published by the Free Software Foundation; either&lt;br /&gt;
  version 2.1 of the License, or (at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
  This library is distributed in the hope that it will be useful,&lt;br /&gt;
  but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU&lt;br /&gt;
  Lesser General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
  You should have received a copy of the GNU Lesser General&lt;br /&gt;
  Public License along with this library; if not, write to the&lt;br /&gt;
  Free Software Foundation, Inc., 59 Temple Place, Suite 330,&lt;br /&gt;
  Boston, MA  02111-1307  USA&lt;br /&gt;
  &lt;br /&gt;
  Modified 24 November 2006 by David A. Mellis&lt;br /&gt;
  Modified 1 August 2010 by Mark Sproul&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;inttypes.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/io.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/interrupt.h&amp;gt;&lt;br /&gt;
#include &amp;lt;avr/pgmspace.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;wiring_private.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
static volatile voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS];&lt;br /&gt;
// volatile static voidFuncPtr twiIntFunc;&lt;br /&gt;
&lt;br /&gt;
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {&lt;br /&gt;
  if(interruptNum &amp;lt; EXTERNAL_NUM_INTERRUPTS) {&lt;br /&gt;
    intFunc[interruptNum] = userFunc;&lt;br /&gt;
    &lt;br /&gt;
    // Configure the interrupt mode (trigger on low input, any change, rising&lt;br /&gt;
    // edge, or falling edge).  The mode constants were chosen to correspond&lt;br /&gt;
    // to the configuration bits in the hardware register, so we simply shift&lt;br /&gt;
    // the mode into place.&lt;br /&gt;
      &lt;br /&gt;
    // Enable the interrupt.&lt;br /&gt;
      &lt;br /&gt;
    switch (interruptNum) {&lt;br /&gt;
#if defined(__AVR_ATmega32U4__)&lt;br /&gt;
	// I hate doing this, but the register assignment differs between the 1280/2560&lt;br /&gt;
	// and the 32U4.  Since avrlib defines registers PCMSK1 and PCMSK2 that aren't &lt;br /&gt;
	// even present on the 32U4 this is the only way to distinguish between them.&lt;br /&gt;
    case 0:&lt;br /&gt;
	EICRA = (EICRA &amp;amp; ~((1&amp;lt;&amp;lt;ISC00) | (1&amp;lt;&amp;lt;ISC01))) | (mode &amp;lt;&amp;lt; ISC00);&lt;br /&gt;
	EIMSK |= (1&amp;lt;&amp;lt;INT0);&lt;br /&gt;
	break;&lt;br /&gt;
    case 1:&lt;br /&gt;
	EICRA = (EICRA &amp;amp; ~((1&amp;lt;&amp;lt;ISC10) | (1&amp;lt;&amp;lt;ISC11))) | (mode &amp;lt;&amp;lt; ISC10);&lt;br /&gt;
	EIMSK |= (1&amp;lt;&amp;lt;INT1);&lt;br /&gt;
	break;	&lt;br /&gt;
    case 2:&lt;br /&gt;
        EICRA = (EICRA &amp;amp; ~((1&amp;lt;&amp;lt;ISC20) | (1&amp;lt;&amp;lt;ISC21))) | (mode &amp;lt;&amp;lt; ISC20);&lt;br /&gt;
        EIMSK |= (1&amp;lt;&amp;lt;INT2);&lt;br /&gt;
        break;&lt;br /&gt;
    case 3:&lt;br /&gt;
        EICRA = (EICRA &amp;amp; ~((1&amp;lt;&amp;lt;ISC30) | (1&amp;lt;&amp;lt;ISC31))) | (mode &amp;lt;&amp;lt; ISC30);&lt;br /&gt;
        EIMSK |= (1&amp;lt;&amp;lt;INT3);&lt;br /&gt;
        break;&lt;br /&gt;
    case 4:&lt;br /&gt;
        EICRB = (EICRB &amp;amp; ~((1&amp;lt;&amp;lt;ISC60) | (1&amp;lt;&amp;lt;ISC61))) | (mode &amp;lt;&amp;lt; ISC60);&lt;br /&gt;
        EIMSK |= (1&amp;lt;&amp;lt;INT6);&lt;br /&gt;
        break;&lt;br /&gt;
#elif defined(EICRA) &amp;amp;&amp;amp; defined(EICRB) &amp;amp;&amp;amp; defined(EIMSK)&lt;br /&gt;
    case 2:&lt;br /&gt;
      EICRA = (EICRA &amp;amp; ~((1 &amp;lt;&amp;lt; ISC00) | (1 &amp;lt;&amp;lt; ISC01))) | (mode &amp;lt;&amp;lt; ISC00);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT0);&lt;br /&gt;
      break;&lt;br /&gt;
    case 3:&lt;br /&gt;
      EICRA = (EICRA &amp;amp; ~((1 &amp;lt;&amp;lt; ISC10) | (1 &amp;lt;&amp;lt; ISC11))) | (mode &amp;lt;&amp;lt; ISC10);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT1);&lt;br /&gt;
      break;&lt;br /&gt;
    case 4:&lt;br /&gt;
      EICRA = (EICRA &amp;amp; ~((1 &amp;lt;&amp;lt; ISC20) | (1 &amp;lt;&amp;lt; ISC21))) | (mode &amp;lt;&amp;lt; ISC20);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT2);&lt;br /&gt;
      break;&lt;br /&gt;
    case 5:&lt;br /&gt;
      EICRA = (EICRA &amp;amp; ~((1 &amp;lt;&amp;lt; ISC30) | (1 &amp;lt;&amp;lt; ISC31))) | (mode &amp;lt;&amp;lt; ISC30);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT3);&lt;br /&gt;
      break;&lt;br /&gt;
    case 0:&lt;br /&gt;
      EICRB = (EICRB &amp;amp; ~((1 &amp;lt;&amp;lt; ISC40) | (1 &amp;lt;&amp;lt; ISC41))) | (mode &amp;lt;&amp;lt; ISC40);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT4);&lt;br /&gt;
      break;&lt;br /&gt;
    case 1:&lt;br /&gt;
      EICRB = (EICRB &amp;amp; ~((1 &amp;lt;&amp;lt; ISC50) | (1 &amp;lt;&amp;lt; ISC51))) | (mode &amp;lt;&amp;lt; ISC50);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT5);&lt;br /&gt;
      break;&lt;br /&gt;
    case 6:&lt;br /&gt;
      EICRB = (EICRB &amp;amp; ~((1 &amp;lt;&amp;lt; ISC60) | (1 &amp;lt;&amp;lt; ISC61))) | (mode &amp;lt;&amp;lt; ISC60);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT6);&lt;br /&gt;
      break;&lt;br /&gt;
    case 7:&lt;br /&gt;
      EICRB = (EICRB &amp;amp; ~((1 &amp;lt;&amp;lt; ISC70) | (1 &amp;lt;&amp;lt; ISC71))) | (mode &amp;lt;&amp;lt; ISC70);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT7);&lt;br /&gt;
      break;&lt;br /&gt;
#else		&lt;br /&gt;
    case 0:&lt;br /&gt;
    #if defined(EICRA) &amp;amp;&amp;amp; defined(ISC00) &amp;amp;&amp;amp; defined(EIMSK)&lt;br /&gt;
      EICRA = (EICRA &amp;amp; ~((1 &amp;lt;&amp;lt; ISC00) | (1 &amp;lt;&amp;lt; ISC01))) | (mode &amp;lt;&amp;lt; ISC00);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT0);&lt;br /&gt;
    #elif defined(MCUCR) &amp;amp;&amp;amp; defined(ISC00) &amp;amp;&amp;amp; defined(GICR)&lt;br /&gt;
      MCUCR = (MCUCR &amp;amp; ~((1 &amp;lt;&amp;lt; ISC00) | (1 &amp;lt;&amp;lt; ISC01))) | (mode &amp;lt;&amp;lt; ISC00);&lt;br /&gt;
      GICR |= (1 &amp;lt;&amp;lt; INT0);&lt;br /&gt;
    #elif defined(MCUCR) &amp;amp;&amp;amp; defined(ISC00) &amp;amp;&amp;amp; defined(GIMSK)&lt;br /&gt;
      MCUCR = (MCUCR &amp;amp; ~((1 &amp;lt;&amp;lt; ISC00) | (1 &amp;lt;&amp;lt; ISC01))) | (mode &amp;lt;&amp;lt; ISC00);&lt;br /&gt;
      GIMSK |= (1 &amp;lt;&amp;lt; INT0);&lt;br /&gt;
    #else&lt;br /&gt;
      #error attachInterrupt not finished for this CPU (case 0)&lt;br /&gt;
    #endif&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case 1:&lt;br /&gt;
    #if defined(EICRA) &amp;amp;&amp;amp; defined(ISC10) &amp;amp;&amp;amp; defined(ISC11) &amp;amp;&amp;amp; defined(EIMSK)&lt;br /&gt;
      EICRA = (EICRA &amp;amp; ~((1 &amp;lt;&amp;lt; ISC10) | (1 &amp;lt;&amp;lt; ISC11))) | (mode &amp;lt;&amp;lt; ISC10);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT1);&lt;br /&gt;
    #elif defined(MCUCR) &amp;amp;&amp;amp; defined(ISC10) &amp;amp;&amp;amp; defined(ISC11) &amp;amp;&amp;amp; defined(GICR)&lt;br /&gt;
      MCUCR = (MCUCR &amp;amp; ~((1 &amp;lt;&amp;lt; ISC10) | (1 &amp;lt;&amp;lt; ISC11))) | (mode &amp;lt;&amp;lt; ISC10);&lt;br /&gt;
      GICR |= (1 &amp;lt;&amp;lt; INT1);&lt;br /&gt;
    #elif defined(MCUCR) &amp;amp;&amp;amp; defined(ISC10) &amp;amp;&amp;amp; defined(GIMSK) &amp;amp;&amp;amp; defined(GIMSK)&lt;br /&gt;
      MCUCR = (MCUCR &amp;amp; ~((1 &amp;lt;&amp;lt; ISC10) | (1 &amp;lt;&amp;lt; ISC11))) | (mode &amp;lt;&amp;lt; ISC10);&lt;br /&gt;
      GIMSK |= (1 &amp;lt;&amp;lt; INT1);&lt;br /&gt;
    #else&lt;br /&gt;
      #warning attachInterrupt may need some more work for this cpu (case 1)&lt;br /&gt;
    #endif&lt;br /&gt;
      break;&lt;br /&gt;
    &lt;br /&gt;
    case 2:&lt;br /&gt;
    #if defined(EICRA) &amp;amp;&amp;amp; defined(ISC20) &amp;amp;&amp;amp; defined(ISC21) &amp;amp;&amp;amp; defined(EIMSK)&lt;br /&gt;
      EICRA = (EICRA &amp;amp; ~((1 &amp;lt;&amp;lt; ISC20) | (1 &amp;lt;&amp;lt; ISC21))) | (mode &amp;lt;&amp;lt; ISC20);&lt;br /&gt;
      EIMSK |= (1 &amp;lt;&amp;lt; INT2);&lt;br /&gt;
    #elif defined(MCUCR) &amp;amp;&amp;amp; defined(ISC20) &amp;amp;&amp;amp; defined(ISC21) &amp;amp;&amp;amp; defined(GICR)&lt;br /&gt;
      MCUCR = (MCUCR &amp;amp; ~((1 &amp;lt;&amp;lt; ISC20) | (1 &amp;lt;&amp;lt; ISC21))) | (mode &amp;lt;&amp;lt; ISC20);&lt;br /&gt;
      GICR |= (1 &amp;lt;&amp;lt; INT2);&lt;br /&gt;
    #elif defined(MCUCR) &amp;amp;&amp;amp; defined(ISC20) &amp;amp;&amp;amp; defined(GIMSK) &amp;amp;&amp;amp; defined(GIMSK)&lt;br /&gt;
      MCUCR = (MCUCR &amp;amp; ~((1 &amp;lt;&amp;lt; ISC20) | (1 &amp;lt;&amp;lt; ISC21))) | (mode &amp;lt;&amp;lt; ISC20);&lt;br /&gt;
      GIMSK |= (1 &amp;lt;&amp;lt; INT2);&lt;br /&gt;
    #endif&lt;br /&gt;
      break;&lt;br /&gt;
#endif&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void detachInterrupt(uint8_t interruptNum) {&lt;br /&gt;
  if(interruptNum &amp;lt; EXTERNAL_NUM_INTERRUPTS) {&lt;br /&gt;
    // Disable the interrupt.  (We can't assume that interruptNum is equal&lt;br /&gt;
    // to the number of the EIMSK bit to clear, as this isn't true on the &lt;br /&gt;
    // ATmega8.  There, INT0 is 6 and INT1 is 7.)&lt;br /&gt;
    switch (interruptNum) {&lt;br /&gt;
#if defined(__AVR_ATmega32U4__)&lt;br /&gt;
    case 0:&lt;br /&gt;
        EIMSK &amp;amp;= ~(1&amp;lt;&amp;lt;INT0);&lt;br /&gt;
        break;&lt;br /&gt;
    case 1:&lt;br /&gt;
        EIMSK &amp;amp;= ~(1&amp;lt;&amp;lt;INT1);&lt;br /&gt;
        break;&lt;br /&gt;
    case 2:&lt;br /&gt;
        EIMSK &amp;amp;= ~(1&amp;lt;&amp;lt;INT2);&lt;br /&gt;
        break;&lt;br /&gt;
    case 3:&lt;br /&gt;
        EIMSK &amp;amp;= ~(1&amp;lt;&amp;lt;INT3);&lt;br /&gt;
        break;	&lt;br /&gt;
    case 4:&lt;br /&gt;
        EIMSK &amp;amp;= ~(1&amp;lt;&amp;lt;INT6);&lt;br /&gt;
        break;	&lt;br /&gt;
#elif defined(EICRA) &amp;amp;&amp;amp; defined(EICRB) &amp;amp;&amp;amp; defined(EIMSK)&lt;br /&gt;
    case 2:&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT0);&lt;br /&gt;
      break;&lt;br /&gt;
    case 3:&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT1);&lt;br /&gt;
      break;&lt;br /&gt;
    case 4:&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT2);&lt;br /&gt;
      break;&lt;br /&gt;
    case 5:&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT3);&lt;br /&gt;
      break;&lt;br /&gt;
    case 0:&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT4);&lt;br /&gt;
      break;&lt;br /&gt;
    case 1:&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT5);&lt;br /&gt;
      break;&lt;br /&gt;
    case 6:&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT6);&lt;br /&gt;
      break;&lt;br /&gt;
    case 7:&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT7);&lt;br /&gt;
      break;&lt;br /&gt;
#else&lt;br /&gt;
    case 0:&lt;br /&gt;
    #if defined(EIMSK) &amp;amp;&amp;amp; defined(INT0)&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT0);&lt;br /&gt;
    #elif defined(GICR) &amp;amp;&amp;amp; defined(ISC00)&lt;br /&gt;
      GICR &amp;amp;= ~(1 &amp;lt;&amp;lt; INT0); // atmega32&lt;br /&gt;
    #elif defined(GIMSK) &amp;amp;&amp;amp; defined(INT0)&lt;br /&gt;
      GIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT0);&lt;br /&gt;
    #else&lt;br /&gt;
      #error detachInterrupt not finished for this cpu&lt;br /&gt;
    #endif&lt;br /&gt;
      break;&lt;br /&gt;
&lt;br /&gt;
    case 1:&lt;br /&gt;
    #if defined(EIMSK) &amp;amp;&amp;amp; defined(INT1)&lt;br /&gt;
      EIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT1);&lt;br /&gt;
    #elif defined(GICR) &amp;amp;&amp;amp; defined(INT1)&lt;br /&gt;
      GICR &amp;amp;= ~(1 &amp;lt;&amp;lt; INT1); // atmega32&lt;br /&gt;
    #elif defined(GIMSK) &amp;amp;&amp;amp; defined(INT1)&lt;br /&gt;
      GIMSK &amp;amp;= ~(1 &amp;lt;&amp;lt; INT1);&lt;br /&gt;
    #else&lt;br /&gt;
      #warning detachInterrupt may need some more work for this cpu (case 1)&lt;br /&gt;
    #endif&lt;br /&gt;
      break;&lt;br /&gt;
#endif&lt;br /&gt;
    }&lt;br /&gt;
      &lt;br /&gt;
    intFunc[interruptNum] = 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
void attachInterruptTwi(void (*userFunc)(void) ) {&lt;br /&gt;
  twiIntFunc = userFunc;&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#if defined(__AVR_ATmega32U4__)&lt;br /&gt;
ISR(INT0_vect) {&lt;br /&gt;
	if(intFunc[EXTERNAL_INT_0])&lt;br /&gt;
		intFunc[EXTERNAL_INT_0]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT1_vect) {&lt;br /&gt;
	if(intFunc[EXTERNAL_INT_1])&lt;br /&gt;
		intFunc[EXTERNAL_INT_1]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT2_vect) {&lt;br /&gt;
    if(intFunc[EXTERNAL_INT_2])&lt;br /&gt;
		intFunc[EXTERNAL_INT_2]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT3_vect) {&lt;br /&gt;
    if(intFunc[EXTERNAL_INT_3])&lt;br /&gt;
		intFunc[EXTERNAL_INT_3]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT6_vect) {&lt;br /&gt;
    if(intFunc[EXTERNAL_INT_4])&lt;br /&gt;
		intFunc[EXTERNAL_INT_4]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#elif defined(EICRA) &amp;amp;&amp;amp; defined(EICRB)&lt;br /&gt;
&lt;br /&gt;
ISR(INT0_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_2])&lt;br /&gt;
    intFunc[EXTERNAL_INT_2]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT1_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_3])&lt;br /&gt;
    intFunc[EXTERNAL_INT_3]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT2_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_4])&lt;br /&gt;
    intFunc[EXTERNAL_INT_4]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT3_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_5])&lt;br /&gt;
    intFunc[EXTERNAL_INT_5]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT4_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_0])&lt;br /&gt;
    intFunc[EXTERNAL_INT_0]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT5_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_1])&lt;br /&gt;
    intFunc[EXTERNAL_INT_1]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT6_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_6])&lt;br /&gt;
    intFunc[EXTERNAL_INT_6]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT7_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_7])&lt;br /&gt;
    intFunc[EXTERNAL_INT_7]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#else&lt;br /&gt;
&lt;br /&gt;
ISR(INT0_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_0])&lt;br /&gt;
    intFunc[EXTERNAL_INT_0]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ISR(INT1_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_1])&lt;br /&gt;
    intFunc[EXTERNAL_INT_1]();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#if defined(EICRA) &amp;amp;&amp;amp; defined(ISC20)&lt;br /&gt;
ISR(INT2_vect) {&lt;br /&gt;
  if(intFunc[EXTERNAL_INT_2])&lt;br /&gt;
    intFunc[EXTERNAL_INT_2]();&lt;br /&gt;
}&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
ISR(TWI_vect) {&lt;br /&gt;
  if(twiIntFunc)&lt;br /&gt;
    twiIntFunc();&lt;br /&gt;
}&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Arduino核心代码|返回核心代码首页]]&lt;br /&gt;
&lt;br /&gt;
更多建议和问题欢迎反馈至 [http://www.yfrobot.com YFRobot论坛]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>