AVR中断后总是重新启动
大家帮忙看一下,为什么USART中断发生后,程序又从main函数开始执行呢?
比如串口调试助手发送1,返回的结果是1a,返回结果应该是1
发送123456789,返回结果1a23456789a,返回结果应该是123456789
被困扰了很久了,希望高手给解答下,程序如下,谢谢
#include <avr/io.h>
#include <avr/interrupt.h>
#define BAUD 9600
//USART初试化及相关函数
void USART_init(void)
{
SREG |=~(0X80);
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE); //使能RX、TX接受、发送使能
UCSRC=(1<<UCSZ1)|(1<<UCSZ0)|(1<<URSEL); //8位、无校验码、1位停止位
UBRRL = (F_CPU / BAUD / 16 - 1) % 256; //波特率设置
UBRRH = (F_CPU / BAUD / 16 - 1) / 256; //波特率9600
SREG |=0X80;
}
void USART_Transmit(unsigned char data) //--------USART发送一个字节----
{
while ( !( UCSRA & (1<<UDRE)) )
;
UDR = data;
}
ISR(USART_RXC_vect) //接收命令
{ unsigned char g_data;
g_data=UDR;
USART_Transmit(g_data);
}
int main(void)
{
USART_init();
USART_Transmit('a');
while(1)
{
;
}
}