单片机/MCUwilliam hill官网
直播中

母猪会上树

9年用户 812经验值
擅长:电源/新能源
私信 关注
[问答]

DS1302写数据写BCD码还是十进制吗?

DS1302写入数据和读数据  求解

问题一:DS1302写数据写BCD码还是十进制?下面是一段初始化DS1302的程序,这么写对吗?
问题二:DS1302读数据的时候,读出来的是BCD码,以下有段程序这么转化后的结果是不是十进制数值呢?

我疑惑了很久,请假大虾。小弟不胜感激!

以下是一段初始化DS1302数据的,请问这么写对吗?
void init1302()
{  //写入2013-02-27星期三 23:58:51
write1302(0x8e0x00);
write1302(0x800x51); //写入51秒
write1302(0x820x58); //写入58分
write1302(0x840x23); //写入23时

write1302(0x860x27); //写入27日
write1302(0x880x02); //写入2月
write1302(0x8c0x13); //写入13年,2013
write1302(0x8a0x03); //写入星期三
write1302(0x8e0x80);
}

以下是一段读取DS1302数据的程序,返回的m值是不是就是十进制数值呢?
uchar read1302(uchar cmd)
{uchar mkjdat;
ds1302_rst=0;
_nop_();
_nop_();
ds1302_rst=1;
_nop_();
_nop_();
write1302byte(cmd);
dat=read1302byte();
ds1302_sclk=1;
ds1302_rst=0;

j=dat>>4; //右移4位,将高4位取出得到十位数
k=dat 0x0f; //舍去高位保留低4位得到个位数
m=j*10+k;

// m=dat/16*10+dat%16; //这个是网上看到的,对吗?
return m;

}


回帖(1)

温洁

2023-10-26 09:54:43
上面的全部正确,
一开始 ds1302 写入的是 bcd 码接下来读出来的也是 bcd 码,然后通过右移转换成10进制数网上看到的那个方法也对,自己用个数据带入算一下,右移4位 = 除以16
举报

更多回帖

发帖
×
20
完善资料,
赚取积分