打印
[国产单片机]

一个STC12C5A60S和STC89C52实现串口通讯

[复制链接]
2065|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
GSM模块用的是 STC12C5A60S 温度采集模块用的是STC89C52
两个模块实现串口通讯

遇到问题:STC89C52用的是12M的晶振,STC12用的是11.0592M 波特率如何设置?
(STC89C52测试了用倍频4800的波特率,实现与电脑串口通讯
但是STC12设设置4800波特率,始终无**常与STC89单片机通讯)
         

相关帖子

沙发
jrcsh| | 2013-5-22 12:06 | 只看该作者
误差过大了

使用特权

评论回复
板凳
jrcsh| | 2013-5-22 12:11 | 只看该作者
本帖最后由 jrcsh 于 2013-5-22 12:13 编辑

试试把温度传感器移到12C上   比如 LM35 使用 12C 的AD 功能进行采集 (加一路电压基准 TL431 2.5V)

12C xxxxxS  是双串口的


要不使用试试 独立波特发生器,  厂家的工具显示误差是 0.16%  这个方法

void UartInit(void)                //4800bps@12.000MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
        BRT = 0xB2;                //设定独立波特率发生器重装值
        AUXR |= 0x01;                //串口1选择独立波特率发生器为波特率发生器
        AUXR |= 0x10;                //启动独立波特率发生器
}


你原来代码产生的哪个 估计是误差 7% 的哪个

使用特权

评论回复
地板
狂奔的小蜗牛|  楼主 | 2013-5-22 22:45 | 只看该作者
jrcsh 发表于 2013-5-22 12:11
试试把温度传感器移到12C上   比如 LM35 使用 12C 的AD 功能进行采集 (加一路电压基准 TL431 2.5V)

12C x ...

嗯,确实是误差太大了额,我换成了 11.0592晶振,然后 9600波特率,0%误差无压力。简单的双机通讯可以实现,但是加入GSM模块就不行了,估计是串口优先级有问题

我来明确下:GSM模块内涵STC12,串口1 用于与温湿度系统通讯 串口2 与GSM模块通讯。
如下是我的,串口优先级:(对吗?)
        //设置串口1中断优先级
        if (UART1_PRIO & 0x02)
        {
                IPH |= PSH;
        }
        else
        {
                IPH &= ~PSH;
        }
        if (UART1_PRIO & 0x01)
        {
                PS = 1;                       
        }
        else
        {
                PS = 0;
        }                                                                       
       

使用特权

评论回复
5
狂奔的小蜗牛|  楼主 | 2013-5-22 22:47 | 只看该作者
我的语言可能有点啰嗦了,我会重新组织一下,麻烦各位路过的提提建议,帮我攻破51单片机的最后一个堡垒。。。。。串口通讯

使用特权

评论回复
6
wh6ic| | 2013-5-28 14:05 | 只看该作者
4800是标准波特率,你这个应用,有必要非用标准波特率不可吗??设置为双方很小误差的非常用的波特率不行吗?
再说12MHz的STC89C52,倍速得到4800BPS的误差不到0.2%,与11.0592MHz的4800BPS 的 0% 误差完全可以保证正常通信,USART 的双方波特率误差允许2%以上,估计是你的软件有问题。

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝