打印
[STC单片机]

STC12C2052AD串口通讯返回数据错误

[复制链接]
1532|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bossrowe|  楼主 | 2018-8-31 12:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,请教大家一个问题,特别着急,我用STC12C2052AD写了段串口通讯程序如下,然后用STC-ISP与其通讯,发送一个数据给单片机,并把数据加1,然后单片机返回给STC-ISP,但是目前遇到两个问题:
1)波特率在单片机程序中只有设置成9600,并且STC-ISP上设置成4800才能获取到有几个正确的数据,大部分还是不对。
2)测试了几个数据如下:
发送 接收
00 01
01 02
02 03
03 0C
04 0D
05 0E
06 0F
07 10
08 11

程序如下:

#include "reg51.h"
#include "intrins.h"

void ConfigUART(unsigned int baud);

void main()
{
EA = 1;
ConfigUART(9600);
while(1);
}

void ConfigUART(unsigned int baud)
{
SCON = 0x50;
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = 256 - (11059200 / 12 / 32) / baud;
ET1 = 0;
ES = 1;
TR1 = 1;
}

void InterruptUART() interrupt 4
{
if(RI)
{
RI = 0;
SBUF = SBUF + 1;
}
if(TI)
TI = 0;
}

已经核对过单片机用的晶振是11.0592MHZ,搜索了一些网上的案例,说是波特率设置的问题,但是我也没能看出什么问题来,请大家帮忙看看,谢谢~~

相关帖子

沙发
ningling_21| | 2018-8-31 13:04 | 只看该作者
波特率有问题

使用特权

评论回复
板凳
bossrowe|  楼主 | 2018-8-31 14:15 | 只看该作者

你好,请问一下波特率是哪里的问题,怎么样修改呢,非常感谢!

使用特权

评论回复
评论
ningling_21 2018-8-31 15:35 回复TA
系统时钟有没分频或倍频? 
地板
ningling_21| | 2018-8-31 15:34 | 只看该作者
bossrowe 发表于 2018-8-31 14:15
你好,请问一下波特率是哪里的问题,怎么样修改呢,非常感谢!

主要把TH,TL1的值和波特率之间的关系搞清楚

使用特权

评论回复
评论
bossrowe 2018-8-31 18:33 回复TA
用ISP软件的波特率计算机对比过,关系应该是没有问题的 
5
kissdb| | 2018-8-31 16:59 | 只看该作者
bossrowe 发表于 2018-8-31 14:15
你好,请问一下波特率是哪里的问题,怎么样修改呢,非常感谢!

根据官方的历程写,或者isp软件有个波特率计算器,你根据它生成的试试

使用特权

评论回复
6
bossrowe|  楼主 | 2018-8-31 18:31 | 只看该作者
kissdb 发表于 2018-8-31 16:59
根据官方的历程写,或者isp软件有个波特率计算器,你根据它生成的试试

用官方的案例写了下,还有用ISP软件的波特率计算器也算过,还是老样子,反馈回来的数据还是有问题。

使用特权

评论回复
7
coody| | 2018-8-31 20:51 | 只看该作者
下载时选择了外部时钟吗?觉得你这是使用内部6MHZ(实际4~8MHZ之间)造成的。

使用特权

评论回复
评论
bossrowe 2018-9-3 13:53 回复TA
非常抱歉这两天都没来看这个问题,太感谢你了,确实是在STC-ISP软件里面没有再硬件选项里面勾掉选择内部IRC时钟造成的,再次感谢! 
8
caijie001| | 2018-9-3 00:00 | 只看该作者
肯定是波特率问题,不然这么点数据不可能出现这种现象的

使用特权

评论回复
9
jackhwang| | 2018-9-3 08:47 | 只看该作者
SBUF = SBUF + 1;
改为:
Temp = SBUF;
SBUF = Temp  + 1;

使用特权

评论回复
10
ningling_21| | 2018-9-3 12:46 | 只看该作者
bossrowe 发表于 2018-8-31 18:31
用官方的案例写了下,还有用ISP软件的波特率计算器也算过,还是老样子,反馈回来的数据还是有问题。 ...

MCU的主时钟是11.0592的话,试试TH=TL=0XFD

使用特权

评论回复
11
bossrowe|  楼主 | 2018-9-3 13:54 | 只看该作者
ningling_21 发表于 2018-9-3 12:46
MCU的主时钟是11.0592的话,试试TH=TL=0XFD

谢谢你的持续帮助,非常感谢,在coody的帮忙下找到原因是使用了内部IRC时钟造成的。

使用特权

评论回复
评论
ningling_21 2018-9-3 14:03 回复TA
解决就好 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

10

帖子

0

粉丝