我的程序在循环中什么都不做。我为串口设置了一个中断(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;
}
任何人都可以帮助我了解我的代码有什么问题以及它发生了什么? 顺便说一下,我不是中断向量或微处理器等架构的专家。所以,如果你保持简单,我一定会很感激。
答案 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;
}