打印
[AVR单片机]

单片机与串口调试助手的通信问题。。搞好几天了

[复制链接]
2237|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
paco_cai|  楼主 | 2015-6-8 21:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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;
                      }
               }
         }
    }
}


相关帖子

沙发
john_lee| | 2015-6-9 01:03 | 只看该作者
程序逻辑没有问题,你检查一下硬件,不行就仿真跟踪。

使用特权

评论回复
板凳
694844985| | 2015-6-13 09:55 | 只看该作者
能进入中断说明串口收到数据了,但是数据收的是不是正确的你需要仿真跟踪 一下,看看接收的数据是什么,这个不复杂,通过仿真跟踪就能知道问题出在哪里了,希望对你有所启发。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

62

帖子

1

粉丝