打印
[51单片机]

90C51串口发送数据到串口调试助手有问题

[复制链接]
993|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RACHELANDDAISY|  楼主 | 2017-5-11 14:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
**************************************************************************/
设置的波特率是9600,方式1。
#include<reg51.h>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define uint unsigned int
#define uchar unsigned char
void UsartConfiguration();
void Delay10ms(unsigned int c);   


*******************************************************************************/

int i;
        int j[5]={0};
void main()
{
        UsartConfiguration();
        while(1)
        {

                j[0]=1;
                j[1]=2;
                j[2]=3;
                j[3]=4;
                j[4]=5;
   for(i=0;i<5;i++)
        {        SBUF=j;
                while(!TI);                  //µÈ´ý·¢ËÍÊý¾ÝÍê³É
                TI=1;       
}
                Delay10ms(200);                  //ÑÓʱһÏÂÔÙ·¢
       
}}
/*******************************************************************************

void UsartConfiguration()
{
        SCON=0X50;                       
        TMOD=0X20;                       
        PCON=0X00;                       
        TH1=0XFD;                  
        TL1=0XFD;
        ES=1;                                               
        EA=1;                                               
        TR1=1;                                          
}


void Delay10ms(unsigned int c)   
{
    unsigned char a, b;

    for (;c>0;c--)
        {
                for (b=38;b>0;b--)
                {
                        for (a=130;a>0;a--);
                }         
        }      
}

我是一位一位数发的,应该输出的是01,02,03,04,05。但是输出的并不是这样。
设置数据位为7位则输出下图:
C:\Users\me\Desktop\MM1
设置为8位输出下图:
C:\Users\me\Desktop\MM2
但是在51上我设置的是8位数据位,1位停止位。我一直不知道问题在哪里。

相关帖子

沙发
RACHELANDDAISY|  楼主 | 2017-5-11 14:38 | 只看该作者
就是设置7位的输出的是05 05 04 03 02 01 05 05 04 03 02 01 05 05。。。
8位数据位输出的是 85 85 84 83 82 81 85 85 84 83 82 81 85 85。。。

使用特权

评论回复
板凳
ningling_21| | 2017-5-11 16:09 | 只看该作者
RACHELANDDAISY 发表于 2017-5-11 14:38
就是设置7位的输出的是05 05 04 03 02 01 05 05 04 03 02 01 05 05。。。
8位数据位输出的是 85 85 84 83 8 ...

发送数据需要关闭串口中断,发送完再打开

使用特权

评论回复
地板
RACHELANDDAISY|  楼主 | 2017-5-11 16:12 | 只看该作者
ningling_21 发表于 2017-5-11 16:09
发送数据需要关闭串口中断,发送完再打开

可是我是直接在WHILE(1)里面发的数据,并没有用到中断

使用特权

评论回复
5
ningling_21| | 2017-5-11 17:46 | 只看该作者
RACHELANDDAISY 发表于 2017-5-11 16:12
可是我是直接在WHILE(1)里面发的数据,并没有用到中断

前面初始化已经打开了中断,不用的话不要开启

使用特权

评论回复
6
RACHELANDDAISY|  楼主 | 2017-5-11 22:25 | 只看该作者
ningling_21 发表于 2017-5-11 17:46
前面初始化已经打开了中断,不用的话不要开启

试了,但是问题依旧没有解决。我一直在想是不是波特率设置的问题

使用特权

评论回复
7
ningling_21| | 2017-5-12 08:27 | 只看该作者
RACHELANDDAISY 发表于 2017-5-11 22:25
试了,但是问题依旧没有解决。我一直在想是不是波特率设置的问题

晶振多少,系统时钟多少

使用特权

评论回复
8
woshizhengjie89| | 2017-5-12 08:38 | 只看该作者
你的代码有问题,buf = j[i]  , 这也能错!

使用特权

评论回复
9
xuyaqi| | 2017-5-12 09:17 | 只看该作者
仔细检查波特率

使用特权

评论回复
10
RACHELANDDAISY|  楼主 | 2017-5-12 09:49 | 只看该作者
woshizhengjie89 发表于 2017-5-12 08:38
你的代码有问题,buf = j  , 这也能错!

这个是粘贴上来的时候没粘好,实际是SBUF=j;

使用特权

评论回复
11
RACHELANDDAISY|  楼主 | 2017-5-12 10:50 | 只看该作者
我的问题已经解决了,并不是波特率设置的问题。我把方式1换成了方式3就行了。虽然是成功了,但是有大神指导为什么吗???

使用特权

评论回复
12
xuyaqi| | 2017-5-12 13:49 | 只看该作者
RACHELANDDAISY 发表于 2017-5-12 10:50
我的问题已经解决了,并不是波特率设置的问题。我把方式1换成了方式3就行了。虽然是成功了,但是有大神指导 ...

方式1   8位异步通信方式;方式3   9位异步通信方式。

使用特权

评论回复
13
RACHELANDDAISY|  楼主 | 2017-5-15 13:28 | 只看该作者
xuyaqi 发表于 2017-5-12 13:49
方式1   8位异步通信方式;方式3   9位异步通信方式。

我知道啊,但是串口调试助手那里设置的是8位数据位和一位停止位,但是单片机这边设置的是9位数据和一位停止位,单片机一旦设置成8位数据位加一位停止位就会出错

使用特权

评论回复
14
xuyaqi| | 2017-5-15 13:46 | 只看该作者
RACHELANDDAISY 发表于 2017-5-15 13:28
我知道啊,但是串口调试助手那里设置的是8位数据位和一位停止位,但是单片机这边设置的是9位数据和一位停 ...

在“方式1   8位异步通信方式”,本来数据就要占8位,你将一位做了停止位,数据只有7位,传送就不正常了。

使用特权

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

本版积分规则

1

主题

7

帖子

0

粉丝