Arduino没有正确地从串行中断例程返回

时间:2014-03-09 14:16:37

标签: serial-port arduino interrupt

我的程序在循环中什么都不做。我为串口设置了一个中断(USART)。当数据到来时,是的,它可以工作并切换LED。但它只做了一次。一旦进入中断,它就不会回到它停止的地方。

我的代码在这里。

#include <avr/interrupt.h> 
#include <avr/io.h> 
volatile int state_Led = LOW;  

void setup()
{    
   pinMode(8, OUTPUT); 

   UBRR0H = 0; // Load upper 8-bits of the baud rate value into the high byte of the UBRR register 
   UBRR0L = 8; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register 

   UCSR0B |= (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0);   // Turn on the transmission, reception, and Receive interrupt      
   interrupts();   
}

void loop()
{
  digitalWrite(8, state_Led); 
}

ISR(USART_RX_vect)
{  
  state_Led = !state_Led;  
}

任何人都可以帮助我了解我的代码有什么问题以及它发生了什么?  顺便说一下,我不是中断向量或微处理器等架构的专家。所以,如果你保持简单,我一定会很感激。

1 个答案:

答案 0 :(得分:2)

USART接收中断还要求在从ISR返回重新启用中断之前读取接收到的数据寄存器。

尝试以下方法:

ISR(USART_RX_vect)
{  
  unsigned char c = UDR0;  // clear the USART interrupt
  // or UDRn, UDR0, UDR1, etc...
  state_Led = !state_Led;
}