6791|9

7

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

51单片机串口查询方式收发出现的问题 [复制链接]

代码如下:

#include
#define uchar unsigned char
#define uint unsigned int
void serialportinit()
{
        TMOD=0x20;//定时计数器1,8位自动装载计数器
        SCON=0x70;//串口使用工作模式1,8位UART
        PCON|=0x00;
        TH1=0xfd;//设置串口波特率为9600bps;
        TR1=1;//定时计数器1开启
}

void main()
{
uchar ch,x=1;
serialportinit(); //串口初始化
while(1)
        {
                if(RI)
                {
                        RI=0;
                        ch=SBUF;
            
                        SBUF=ch;
                        while(!TI);
                        TI=0;

                        SBUF=x;
                        while(!TI);
                        TI=0;
                }       
        }       
}


我的问题是:
1,为什么从串口工具给MCU发送abc时,从MCU发送回串口工具的数据是 61 01 62 01  63 01; 但是从串口工具中发送的数据变成abcd,为什么从mcu发送回串口工具中的数据还是不变,依然是 61 01 62 01  63 01?

2, 就以上代码中出现的问题,即接收一个字符后连续发送两个字符问题 描述下 串口接收和发送数据的时间顺序是怎样的?即哪些时候是在同一时间操作,关于时间间隔。。。需不需要延时......等会出错的问题。

PS:操作起串口才发现,串口并不是教程,书本上面说得那么简单,要熟练操作、甚至精通串口,真的不简单啊感觉,所以恳请大侠们帮下忙,因为学习过程中这个问题困扰了一周,都没有人说个明白,感谢了。
此帖出自51单片机论坛

最新回复

学习了太感谢了  详情 回复 发表于 2016-11-26 00:01
点赞 关注
 

回复
举报

1976

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
第一个为什么MCU收到串口发来的数据会发送两字节的数据,是因为你的代码中就是在收到一个字节数据后再将该数据发送出去,并同时发判断0x01这个数据,所以会出现在收到一个字节后会返回两个字节;
第二个是发送abcd却还是只返回六个字节的数据,原因可能是MCU还没有来得及处理c,但是d已经收到了,发生了接收溢出,导致d这个数据被丢弃,所以还是只返回了6个字节
此帖出自51单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
bobde163 发表于 2016-11-2 00:26
第一个为什么MCU收到串口发来的数据会发送两字节的数据,是因为你的代码中就是在收到一个字节数据后再将该 ...

厉害,太感谢太感谢了。这个问题困惑了好久,网上找了好多资料,几乎要没心机了。

那请问您“MCU还没来得及处理c,但是d已经收到,发生 接收溢出,导致d被丢弃”是什么意思?

我的思考:
1 是已经收到了c,然后对它进行处理期间数据d也收到,但是d被丢弃,请问新收到的d不会将数据c替换吗?
2 那请问您,什么原因会造成这种接收数据时产生的溢出和数据丢弃呢? 有人说,接收数据和发送数据的时间是一样长?那是因为发送两个字节用时 比接收一个字节 用时长造成的吗?
3 最后再麻烦请教您,这种问题,或者对串口编程时避免这类问题的良好习惯是什么呢??
此帖出自51单片机论坛

点评

现在只是我的猜测,想要确认是不是这样,可能需要知道一些信息,比如你用的是哪个型号的单片机,运行的时钟是多少MHz,你的口波特率是多少,使用的电脑端的串口助手是什么,你把这些都放上来,这样才能进一步确认是  详情 回复 发表于 2016-11-2 23:39
 
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

4
 
phang 发表于 2016-11-2 21:46
厉害,太感谢太感谢了。这个问题困惑了好久,网上找了好多资料,几乎要没心机了。

那请问您“MCU还没 ...

现在只是我的猜测,想要确认是不是这样,可能需要知道一些信息,比如你用的是哪个型号的单片机,运行的时钟是多少MHz,你的串口波特率是多少,使用的电脑端的串口助手是什么,你把这些都放上来,这样才能进一步确认是不是我们猜测的这样
此帖出自51单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

5
 
bobde163 发表于 2016-11-2 23:39
现在只是我的猜测,想要确认是不是这样,可能需要知道一些信息,比如你用的是哪个型号的单片机,运行的时 ...

嗯嗯,是的,单片机是STC89C52RC   时钟是11.0592MHz   串口波特率是9600bps  ,串口助手是ECOM串口助手V2.8      
此帖出自51单片机论坛

点评

好的,明天再去分析一下  详情 回复 发表于 2016-11-3 00:20
 
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

6
 
phang 发表于 2016-11-2 23:55
嗯嗯,是的,单片机是STC89C52RC   时钟是11.0592MHz   串口波特率是9600bps  ,串口助手是ECOM串口助手V ...

好的,明天再去分析一下
此帖出自51单片机论坛
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

7
 
bobde163 发表于 2016-11-3 00:20
好的,明天再去分析一下

好的,拜托了,这个问题停留了两周,一直没找到答案。谢谢了谢谢了。
此帖出自51单片机论坛

点评

针对这个问题,我今天实际测试了一下,抓出了数据进行分析,分析的详细的内容我另外写了一个帖子,你可以去看一下 https://bbs.eeworld.com.cn/thread-505172-1-1.html  详情 回复 发表于 2016-11-3 23:00
 
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

8
 
phang 发表于 2016-11-3 00:26
好的,拜托了,这个问题停留了两周,一直没找到答案。谢谢了谢谢了。

针对这个问题,我今天实际测试了一下,抓出了数据进行分析,分析的详细的内容我另外写了一个帖子,你可以去看一下
https://bbs.eeworld.com.cn/thread-505172-1-1.html
此帖出自51单片机论坛

点评

............ 天哪,您太用心了,很详细的解答过程,实在很感谢您。。。 不好好学习真对不住您这次的帮助,太感谢了太感谢了。 请问您看的那本书是?我也想看,感觉讲得很细。  详情 回复 发表于 2016-11-4 00:26

赞赏

1

查看全部赞赏

 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

9
 
bobde163 发表于 2016-11-3 23:00
针对这个问题,我今天实际测试了一下,抓出了数据进行分析,分析的详细的内容我另外写了一个帖子,你可以 ...

............
天哪,您太用心了,很详细的解答过程,实在很感谢您。。。
不好好学习真对不住您这次的帮助,太感谢了太感谢了。

请问您看的那本书是?我也想看,感觉讲得很细。
此帖出自51单片机论坛
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

10
 
学习了太感谢了
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表