FM33LC0xx复旦微芯片rtc时间保存格式与处理

作者后面开始配置rtc之后发现误差比较明显,简单测了一下大概每分钟快0.47秒。

在寄存器中个位和十位分开计算

以秒计时为例:

        bit3~0为个位数字,计数范围0~9;

        bit6~4为十位数字,计数范围0~5;

这样如果直接读取寄存器数据的话,得到的数值就不是十进制的时间值,而是十六进制表示的十进制数值,例如当前时间为32秒,寄存器中高位为3,低位为2:

0b 011 0010 == 0x32 == 50 != 32

获取寄存器值之后需要经过处理才是正确的时间值

//0xab ==》ab,输入的十六进制数前后两位均不可大于9
//返回值为十进制
uint8_t BCD2HEX(uint8_t bcd)
{
    if (((bcd & 0x0f) > 0x09) || ((bcd & 0xf0) > 0x90))
    {
        return 0xff;
    }
    return ((bcd >> 4) & 0xf) * 10 + ((bcd >> 0) & 0xf) * 1;
}
//十进制ab==》0xab,十进制数不能大于99
//返回值为十六进制
uint8_t HEX2BCD(uint8_t hex)
{
    if (hex > 99)
    {
        return 0xff;
    }
    return ((hex / 10) << 4) | ((hex % 10) << 0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值