本帖最后由 chenengood 于 2013-2-19 22:37 编辑
DS1302写入数据和读数据 求解
问题一:DS1302写数据写BCD码还是十进制?下面是一段初始化DS1302的程序,这么写对吗?
问题二:DS1302读数据的时候,读出来的是BCD码,以下有段程序这么转化后的结果是不是十进制数值呢?
我疑惑了很久,请假大虾。小弟不胜感激!
以下是一段初始化DS1302数据的,请问这么写对吗?
void init1302()
{ //写入2013-02-27星期三 23:58:51
write1302(0x8e,0x00);
write1302(0x80,0x51); //写入51秒
write1302(0x82,0x58); //写入58分
write1302(0x84,0x23); //写入23时
write1302(0x86,0x27); //写入27日
write1302(0x88,0x02); //写入2月
write1302(0x8c,0x13); //写入13年,2013
write1302(0x8a,0x03); //写入星期三
write1302(0x8e,0x80);
}
以下是一段读取DS1302数据的程序,返回的m值是不是就是十进制数值呢?
uchar read1302(uchar cmd)
{uchar m,k,j,dat;
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;
}
2013-2-20 22:01:10
本帖最后由 yintianye 于 2013-2-20 22:17 编辑
读出时,需要将BCD码转换为16进制;写入时,需要将16进制转换为BCD码。
本帖最后由 yintianye 于 2013-2-20 22:17 编辑
读出时,需要将BCD码转换为16进制;写入时,需要将16进制转换为BCD码。
举报
2013-5-22 23:40:07
引用: yintianye 发表于 2013-2-20 22:01
读出时,需要将BCD码转换为16进制;写入时,需要将16进制转换为BCD码。
我跟LZ有同样的疑问,请教一下,请问上面写入时间的程序对吗,我看过手册,但就是碰到不是按上面那样的我就有疑问,希望能帮忙解答,谢谢。
引用: yintianye 发表于 2013-2-20 22:01
读出时,需要将BCD码转换为16进制;写入时,需要将16进制转换为BCD码。
我跟LZ有同样的疑问,请教一下,请问上面写入时间的程序对吗,我看过手册,但就是碰到不是按上面那样的我就有疑问,希望能帮忙解答,谢谢。
举报