英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

 找回密码
 立即注册
搜索
电子烟方案单片机单片机开发深圳单片机开发
单片机方案国产单片机8位单片机电子烟方案开发
查看: 3434|回复: 0
打印 上一主题 下一主题

DS1302的BCD转换C代码

[复制链接]
跳转到指定楼层
1#
发表于 2009-3-27 14:15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DS1302的C51代码比较多,但都没提供BCD转换。
本人针对DS1302的硬件特点写了这2个BCD转换函数:
unsigned char bcdtodec(unsigned char bcd){//注意,BCD低4位不能大于9,最高位是控制位。
unsigned char data;
data=bcd&0x0f;        //取BCD低4位
bcd=bcd&0x70;       //剔除BCD的最高位和低4位。
data+=bcd>>1;
data+=bcd>>3;         //用位移代替乘法运算
return data;
}
unsigned char dectobcd(unsigned char dec){//注意DEC数值,比如日大于了相应月的最大日期,DS1302将会错乱。
unsigned char bcd;
bcd=0;
while(dec>=10){              
  dec-=10;                        
  bcd++;
}
bcd<<=4;
bcd|=dec;
return bcd;
}
2个函数总共才53字节,非常爽。
本人的门禁系统就用了它,事实证明是没有任何问题的。

使用DS1302一点经验:
每次单字节操作,一定要事先把RST和CLK拉低,再把RST抬高(也就是对DS1302复位)一次,不然有可能操作无效。
注意:CCS的DS1302库文件就没有此步骤,实际使用有可能会出问题的,也算CCS的一个BUG吧。
对DS1302的年,月,日,分,秒寄存器做了写操作后,要立即读取一下(随便读某个寄存其),不然DS1302时钟将暂停。
对DS1302的寄存器做多字节写,建议在最后要对WP做写0操作,而不是写完7个寄存器后就停止。
DS1302的RST脚要对地接10K电阻,当整机断电时候,此电阻可以把RST强行拉低,使DS1302的IO脚悬空,避免IO脚有可能处于输出状态而空耗后备电池。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|公司首页|Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 ( 粤ICP备09008620号 )

GMT+8, 2024-7-3 17:30 , Processed in 0.050894 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表