水水水木木木 发表于 2024-1-6 11:31:42

STC8H单片机的掉电时间不对

我设置的是2秒,为啥测量出来的是2.5秒?我按照手册里面算的值,我哪里算的有问题吗?代码如下:
//Fwt在RAM中的地址



#define        FWT_H        (*(unsigned char volatile data *)0xF8)
#define        FWT_L        (*(unsigned char volatile data *)0xF9)
//2秒
#define        DWON_TIME_MAX        2000000L



        //获得内部RAM区的Fwt频率值
        Fwt = FWT_H * 256;
        Fwt += FWT_L;
       
        //计算定时器的次数
        Fwt_Num = (DWON_TIME_MAX / 1000000L) * Fwt / 16L;
        Fwt_Num -= 1;
       
        //获得定时器次数的高低字节
        Fwt_Num_H = Fwt_Num / 256;
        Fwt_Num_L = Fwt_Num % 256;
       
        //设定掉电唤醒时钟约为2秒钟
        WKTCL = Fwt_Num_L;
        WKTCH = 0x80 | Fwt_Num_H;




主函数和测量的结果如下图:

水水水木木木 发表于 2024-1-6 11:32:42

手册里面的介绍:

水水水木木木 发表于 2024-1-6 11:38:04

延时的0.5秒是正常的,就是掉电定时器设置的时间不对,多了0.5秒。我读出来的Fwt频率是36800,我计算出来定时器重装值,高字节是17,低字节是247。是哪里的数据类型转换有问题吗?

水水水木木木 发表于 2024-1-6 13:25:04

水水水木木木 发表于 2024-1-6 13:48:09

奇怪,我将获取的Fwt频率值,用65536-Fwt得到差值,差值是28736。用这个值设置定制器,掉电时间就正常了,变成了我设置的2秒时间。{:4_167:}

_奶咖君_ 发表于 2024-1-6 15:05:38

感觉像是这个内部32KIRC的误差引起的0.0,这个时钟温漂压飘都是存在的。
页: [1]
查看完整版本: STC8H单片机的掉电时间不对