小弟刚刚接触AVR单片机,型号为ATmega16A;
写的程序,串口通讯本来正常,可现在莫名出现了问题,
现象是:一旦向串口发送了数据,串口中断程序就连续进入,即使不再向它发数据了,还像有数据似的进入串口中断程序。
请大虾们看看是什么情况。
相关程序如下:
/*串口初始化函数*/
void uart_init(void)
{
UCSRA = (1 << U2X); /*倍速*/
UCSRB = ((1 << RXEN) | (1 << TXEN) | (1 << RXCIE)); /*允许接收和中断*/
UCSRC |= ((1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0)); //8位无校验
UBRR = 12; /*波特率9600 (@2M clk)*/
// UBRR = 25; /*波特率9600 (@4M clk)*/
// UBRR = 6; /*波特率9600 (@1M clk)*/
}
void UartSendByte(unsigned char i)
{
while (!(UCSRA & (1<<UDRE)));
UDR=i;
}
/*接收结束中断*/
#pragma interrupt_handler uart_rx_isr:12
void uart_rx_isr(void)
{
UCSRB &= ~(1 << RXCIE); //关闭串口中断
while((UCSRA & (1<<RXC)) == 0);
Receive = UDR;
UCSRB |= (1 << RXCIE); //打开串口中断
}
|