本帖最后由 john_lee 于 2015-6-9 00:41 编辑
在PC端的串口调试助手中,通过USB转TTL模块发送数据到单片机ATMEGA48,编译环境GCCAVR。关键程序如下,在串口调试助手中发送数据,发现可以进入串行接收中断,但一直无法进入主函数的case那里。照此程序意思,不就是发送0X55作为帧头后,分别再发送0X51、0X52、0X53就可以进入相应的case里了吗?求大神解答!
volatile uchar Re_buf[2],counter;
volatile uchar sign;
void uart_init(void)
{
UCSR0A = 0b01000000;
UCSR0B = 0b10011000;//发送使能,接收使能,接收中断使能
UCSR0C = 0b00000110;//异步、无奇偶校验、8字符、1停止位
UBRR0 = 5; //11.059200M晶振,波特率115200
}
ISR(USART_RX_vect)//USART串行接收中断
{
Re_buf[counter]=UDR0;
if(counter==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头
counter++;
if(counter==2) //接收到2个数据
{
counter=0; //重新赋值,准备下一帧数据的接收
sign=1;
}
}
main()
{
......
while(1)
{
if(sign==1)
{
sign=0;
if(Re_buf[0]==0x55) //检查帧头
{
switch(Re_buf[1])
{
case 0x51: ...break;
case 0x52: ...break;
case 0x53: ...break;
}
}
}
}
}
|