打印

51单片机串口接收错误--在线求指导

[复制链接]
1176|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shaowei2072009|  楼主 | 2013-6-26 11:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void init()
{
          TMOD = 0X20;
        SM0=0;
        SM1=1;
        TH1=0XFD;
        TL1=0XFD;
        TR1=1;
        REN=1;
        EA=1;
        ES=1;
}

void sendonebyte(u8 dat)
{
        ES = 0;
        SBUF = dat;
        while(!TI);
        TI=0;
        ES = 1;
}
void main()
{       
          init();
        while(1)
        {
                 if(flag == 1)
                {
                        flag=0;
                        sendonebyte(ser_rec[0]);
                }
        }
}
void ser() interrupt 4
{
        RI = 0;
        ser_rec[rec_flag] = SBUF;
        rec_flag ++;
        if(ser_rec[0] = 0x55 && ser_rec[2]== 0xAA)
        {
                rec_flag=0;
                flag=1;
        }               
}我51单片的串口程序,在while大循环里面收到串口数据是对的,但是输出ser_rec【0】不是0x55,如果在中断里面做输出的话是正常的数据。是不是我程序哪设置有问题。找了好久也没发现是哪出错了。。在线大神指导

相关帖子

沙发
airwill| | 2013-6-26 12:23 | 只看该作者
输出数据和设置的数据不符, 基本上都是波特率的问题

使用特权

评论回复
板凳
shaowei2072009|  楼主 | 2013-6-26 12:30 | 只看该作者
airwill 发表于 2013-6-26 12:23
输出数据和设置的数据不符, 基本上都是波特率的问题

波特率没得问题,错误是我的这条if(ser_rec[0] = 0x55 && ser_rec[2]== 0xAA)语句,如果我输入22 00 AA 应该flag不被赋值为1,但是被赋值了。如果我把AA换成BB的话,就不会被赋值。现在可以确定就是这个语句这边出问题的,但是这个用法不会错啊。郁闷

使用特权

评论回复
地板
cjseng| | 2013-6-26 13:38 | 只看该作者
if(ser_rec[0] = 0x55 && ser_rec[2]== 0xAA)
我通常写成:
if((ser_rec[0] = 0x55) && (ser_rec[2]== 0xAA))

使用特权

评论回复
5
wangyy608| | 2013-6-26 16:42 | 只看该作者
if(ser_rec[0] = 0x55 && ser_rec[2]== 0xAA)
ser_rec[0] = 0x55 ??????????????

使用特权

评论回复
6
ningling_21| | 2013-6-26 19:13 | 只看该作者
if((ser_rec[0] = 0x55)

这么低级的错误....

使用特权

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

本版积分规则

23

主题

108

帖子

0

粉丝