找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2329|回复: 4
打印 上一主题 下一主题
收起左侧

STC12C5A60S2单片机的波特率的问题

[复制链接]
跳转到指定楼层
楼主
ID:115923 发表于 2022-1-13 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.  STC12C5A60S2的定时器T1做16位自动重载, 不支持这个功能所以不能使用16位重载模式做波特率发生器,
要使用独立波特率发生器或者T1, 8位自动重载模式。
如果想要产生115200波特率就需要用11.0592的外置晶振了。

2.  那可以用 T2 做波特率吗?
不行, 因为STC12C5A60S2只有16 位定时器T0 和T1, 没有定时器T2

3.  为什么我的晶振是11,0592, 串口通信还是有乱码呢?
你注意,下载的时候, 可以看到 当前的时钟频率: 11.318MHz。
根本就不是 11.0592, 有误差, 重新换好一点的晶振和22p的电容。 并且PCB要短,靠近芯片。

评分

参与人数 1黑币 +40 收起 理由
admin + 40 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:624769 发表于 2022-1-13 22:07 | 只看该作者
第二点, 有点片面了,

STC12C5A60S2, 虽然,在手册上的说法,是没有定时器2的,但是,实际上,有一个专用的波特率发生器, 而这个专用的波特率发生器的设置方式, 和STC15系列的 T2定时器的设置为波特率发生器的方式非常类此,可以把它当作,只能为串口服务的T2。
对于STC12C5A60S2系列,我也更推荐使用专用波特率发生器来服务串口,可以节省下定时器1。
回复

使用道具 举报

板凳
ID:115923 发表于 2022-1-15 11:13 | 只看该作者
4. 那可以同时使用串口1和串口2吗?  
回复

使用道具 举报

地板
ID:115923 发表于 2022-1-15 11:49 | 只看该作者
4.  那可以同时使用串口1和串口2吗?
---可以的
5.  串口1和串口2都使用这一个波特率发生器可以吗?
---只要波特率一样,可以的
6. 为什么按照软件计算的值, 下载后通讯还是不正常 ?
给你一个公式,自己核算一下,就会发现误差太大引起的:
比如 Sysclk = 18 . 432MHZ , Baud = 57600 ( 12T mode )
(1).ReLoad=256-INT ( 18432000 / 57600 / 32 / 12 + 0 . 5)
             =256-INT(0.833+0.5)
             =256-1
             =255=0xff
(2).Baud = 18432000 / ( 256-255 ) / 32 / 12
                  =48000
(3).error = ( 48000-57600 ) 57600 * 100 %
                 =16 . 66%

6.  EPROM的开始地址是多少? 按照软件里的实例是0x0400,发现不行。
当然不行啊, 它的开始地址是0x00, 而且还要改这个,听我的没有错。
#define ENABLE_IAP 0x83           //if SYSCLK<12MHz         11.0592
还有,清除后在写数据前要加 Delay(10);
函数是:
void Delay(unsigned char n)
{
    unsigned int x;

    while (n--)
    {
        x = 0;
        while (++x);
    }
}
回复

使用道具 举报

5#
ID:115923 发表于 2022-1-15 16:56 | 只看该作者
7. 为什么我串口发送的数据,明明是正确的, 做解析处理 ,却不执行?
因为你用了char,  而做比较的时候,你用的是0xYY的方式,
所以把 接收的数据类型改为unsigned char, 就可以正常解析接收的数据了。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表