串口通信(发1,电脑接收显示81,发2电脑接收显示82)

[复制链接]
 楼主| 阿飞507 发表于 2015-5-14 15:16 | 显示全部楼层 |阅读模式
这道地是什么情况,(用8M的晶振)
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint i,flag;
void delay(void)   
{
   unsigned char m,n;
         for(m=0;m<200;m++)
          for(n=0;n<250;n++)          
           ;
}
void init_uart(void)
{
        TMOD=0X20;
        TH1=0Xfe;
        TL1=0Xfe;
        TR1=1;
        SCON=0X50;
        EA=1;
        ES=1;
}

void main(void)
{
        init_uart();
        while(1)
        {
       
                if(flag==1)
                {
                        ES=0;
                        flag=0;
                        SBUF=i;
                        while(!TI);
                        TI=0;
                        ES=1;
                }

        }
}

void serial() interrupt 4
{
        RI=0;
        i=SBUF;
        flag=1;
}
chen499103 发表于 2015-5-14 15:52 | 显示全部楼层
波特率是不是不对或者波特率不精确

 楼主| 阿飞507 发表于 2015-5-14 16:31 | 显示全部楼层
波特率我已经算过了,算出来虽然不是整数,但是12M晶振的计算结果也不是整数
 楼主| 阿飞507 发表于 2015-5-14 16:35 | 显示全部楼层
256-2,oxfe   波特率为9600
zjsltc844139730 发表于 2015-5-14 17:02 | 显示全部楼层
9600波特率按照你的初值装入应该用的是11.0592M的晶振
 楼主| 阿飞507 发表于 2015-5-14 17:11 | 显示全部楼层
zjsltc844139730 发表于 2015-5-14 17:02
9600波特率按照你的初值装入应该用的是11.0592M的晶振

11.0592M装入的初值是0xfd吧?
ningling_21 发表于 2015-5-14 17:39 | 显示全部楼层
为何要用8M的晶振?
zjsltc844139730 发表于 2015-5-14 17:40 | 显示全部楼层
阿飞507 发表于 2015-5-14 17:11
11.0592M装入的初值是0xfd吧?

不好意思看错了

不好意思看错了

你的程序有点问题
你的 flag 没有赋初值, 是一个随机数, 是0的几率很小, 导致你第一次while的时候就进入了if语句  然后发送了一个随机的 i 给电脑了

波特率没帮你算  但是看你的结果 波特率应该是正确的

应该是程序的问题
 楼主| 阿飞507 发表于 2015-5-15 08:52 | 显示全部楼层
ningling_21 发表于 2015-5-14 17:39
为何要用8M的晶振?

串口通信最好是用12M的吗?我身边只有8M的,就用了
 楼主| 阿飞507 发表于 2015-5-15 09:01 | 显示全部楼层
zjsltc844139730 发表于 2015-5-14 17:40
不好意思看错了

不好意思看错了

我是发一个数给单片机,单片机在返回给电脑,在我发送的时候就被赋值成1了。
ningling_21 发表于 2015-5-15 09:42 | 显示全部楼层
阿飞507 发表于 2015-5-15 08:52
串口通信最好是用12M的吗?我身边只有8M的,就用了

用这样的晶振,数据错误很正常
949155525 发表于 2015-5-15 12:20 来自手机 | 显示全部楼层
查推荐波特率表51的
oldda 发表于 2015-5-15 12:21 | 显示全部楼层
可以将波特率降低来尝试
 楼主| 阿飞507 发表于 2015-5-15 12:28 | 显示全部楼层
ningling_21 发表于 2015-5-15 09:42
用这样的晶振,数据错误很正常

以后做串口通信的时候就用11.0592的
 楼主| 阿飞507 发表于 2015-5-15 12:29 | 显示全部楼层
oldda 发表于 2015-5-15 12:21
可以将波特率降低来尝试

我降低到2400也是不行,还是换成11.0592M的晶振吧,可能是误差太大了
liuxing4585 发表于 2015-5-15 14:33 | 显示全部楼层
波特率问题吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

222

帖子

7

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

36

主题

222

帖子

7

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