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

[复制链接]
1631|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))
wangyy608 发表于 2013-6-26 16:42 | 显示全部楼层
if(ser_rec[0] = 0x55 && ser_rec[2]== 0xAA)
ser_rec[0] = 0x55 ??????????????
ningling_21 发表于 2013-6-26 19:13 | 显示全部楼层
if((ser_rec[0] = 0x55)

这么低级的错误....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

108

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部