[技术问答] N76E003 串口0时钟

[复制链接]
1375|12
 楼主| 无聊逛1逛 发表于 2019-9-3 09:28 | 显示全部楼层 |阅读模式
本帖最后由 无聊逛1逛 于 2019-9-3 09:52 编辑

定时器1和定时器3都测试过

在16MHZ下,9600波特率,串口0无论接收还是发送很稳定。

换到16.6MHZ,不管什么波特率,串口0接收总是会丢数据。



 楼主| 无聊逛1逛 发表于 2019-9-5 10:23 | 显示全部楼层
本帖最后由 无聊逛1逛 于 2019-9-5 15:48 编辑

问题已解决.
手册:N76E003 有两个字节的SFR,更改这两个字节的数值,可以直接对HIRC频率产生改变,由于每更改一阶HIRC更改的值是恒定的,且由于HIRC已调整至非常准确的16 MHz,所以对这两个寄存器目前的值直接减去15,就可以得到16.6 MHz的结果。

1.keil C51  Define  FOSC_166000
2.调整HIRC
void MODIFY_HIRC_VLAUE(void)
{
       unsigned char hircmap0, hircmap1;
       unsigned int trimvalue16bit;


        set_IAPEN;
        IAPAL = 0x30;
        IAPAH = 0x00;
        IAPCN = READ_UID;
        set_IAPGO;
        hircmap0 = IAPFD;
        IAPAL = 0x31;
        IAPAH = 0x00;
        set_IAPGO;
        hircmap1 = IAPFD;
        clr_IAPEN;
        trimvalue16bit = ((hircmap0 << 1) + (hircmap1 & 0x01));
        trimvalue16bit = trimvalue16bit - 15;
        hircmap1 = trimvalue16bit & 0x01;
        hircmap0 = trimvalue16bit >> 1;
        TA = 0XAA;
        TA = 0X55;
        RCTRIM0 = hircmap0;
        TA = 0XAA;
        TA = 0X55;
        RCTRIM1 = hircmap1;
}




 楼主| 无聊逛1逛 发表于 2019-9-3 10:20 | 显示全部楼层
通过串口调试助手发送:02 01 01 1b e7 03
串口1打印串口0接收到的数据:
02 01 01 1b de
02 40 40 a3 de
02 01 01 1b e7 03
02 01 01 1b e7 03
02 40 40 a3 de
02 40 40 a3 de
02 01 01 1b de
02 01 01 1b de
                                    
jasontu 发表于 2019-9-4 07:48 | 显示全部楼层
可以貼出代碼,看作了什麼處理嗎?
antusheng 发表于 2019-9-4 08:45 | 显示全部楼层
你要看手册啊,不同的始终下配置不同。
antusheng 发表于 2019-9-4 08:45 | 显示全部楼层
有个章节是专门说这个设置16.6怎么搞的。
antusheng 发表于 2019-9-4 08:45 | 显示全部楼层
我试过,没问题的。你再比对比对。
antusheng 发表于 2019-9-4 20:23 | 显示全部楼层
楼主贴个代码看
heisexingqisi 发表于 2019-9-4 23:53 | 显示全部楼层
解决了吗,代码都贴出来看看。
huahuagg 发表于 2019-9-5 15:06 | 显示全部楼层
那就是之前没有调整成功HIRC的频率到16.6
huahuagg 发表于 2019-9-5 15:07 | 显示全部楼层
多谢分享代码,经验宝贵啊。
jiekou001 发表于 2019-9-8 23:25 | 显示全部楼层
先读出来,然后减去5,再写入回去,应该是每个单片机这个值都不同的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

15

帖子

0

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