51串口问题求助

2020-01-25 15:38发布

程序大部分已经ok了。单片机发送abcd,pc接收到abcd。没问题。
一句话发送没问题,但是接收好像有点问题。
接收一个字符ok,多个字符就不对了,有时候只接收到第一个字符,有时候是其他字符,有时候是乱码。
--------------------------------------------------------------------------------------------------------
说下我的思路,pc发送字符给单片机,然后单片机直接回传值给pc。比方说pc发送a给单片机,那么此时单片机就把收到的a发给pc。
如果发送一个字符,ok。
此时pc发送abcd,就出错了。pc接收到的不是abcd,有可能是a,有可能是其他东西,但是可以肯定pc接收到的也是4个字符,这种问题原因是什么?
以下是中断函数
void usarthandle() interrupt 4
{
              if(RI)
              {   
                            RI =0;
           P1 =SBUF;
            SendOneByte(P1);//接收到什么,直接发送回去

                     }
            if(TI)
            {
                        TI =0;
                        ucBusy =0;
            }

}
个人觉得应该是51单片机接收程式这边写的有问题,否则只可以接收到pc发过来的第一个字符,后面几个字符却乱码了。而且51单片机发送一串字符给pc,pc也接收正确,所以应该是单片机接收pc时出现了错误,求大神点拨点拨。到底51串口接收程式应该怎么写,需要考虑些什么东东。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
25条回答
ypm
1楼-- · 2020-01-28 00:53
zh3251241 发表于 2013-11-19 09:34
在上位机用串口调试助手发送一个字符X,单片机收到字符后返回给上位机“I get X”,波特率9600 8 n 1

回来用51烧录了验证下,结果貌似还是有问题,和仿真的结果是一样的。pc发送x ,只能接收到I get  ;然后没有了,然后pc再次发送s,然后pc回传就不会变,不知怎么回事。
lusson
2楼-- · 2020-01-28 03:47
zh3251241 发表于 2013-11-19 22:00
//内核特殊功能寄存器        // 复位值   描述
sfr ACC         =   0xE0;   //0000,0000 累加器Accumul ...

你列的这些全部别使用。
因为ACC之类的在C的运算中会使用到,如果你在C里面使用的话可能造成破坏。
积偶校验之类的请用C来实现 。
zh3251241
3楼-- · 2020-01-28 04:17
 精彩回答 2  元偷偷看……
WM_CH
4楼-- · 2020-01-28 08:28
哎。。。早知道我也整个萌一点的头像。
weng645008699
5楼-- · 2020-01-28 12:58
  1. void Uartx(void) interrupt 4
  2. {
  3.         unsigned char ReData,SenData;
  4.        
  5.         if(RI == 1)       //RI½ÓÊÜÖжϱêÖ¾
  6.         {
  7.                 RI = 0;                      //Çå³ýRI½ÓÊÜÖжϱêÖ¾
  8.                 ReData = SBUF;  //SUBF½ÓÊÜ/·¢ËÍ»º³åÆ÷
  9.                 SenData=ReData;
  10.                 SBUF=SenData;          //SUBF½ÓÊÜ/·¢ËÍ»º³åÆ÷
  11.                 while(TI==0);
  12.                 TI=0;
  13.         }
  14. }
复制代码
ypm
6楼-- · 2020-01-28 16:12
zh3251241 发表于 2013-11-20 10:48

截图01.jpg (341.4 KB, 下载次数: 0)

下载附件

运行仿真效果图

2013-11-20 17:10 上传


如果pc发送字符给单片机,此时效果是只能接收到I Get一次,然后再发送就不会响应了。
等今天晚上研究下数组缓冲方式,调好后上程序给你验证下。
用的芯片STC89次2rc。仿真和硬件烧录结果一样,都不行。

一周热门 更多>