这是我毕业后接触到的第一个时钟芯片,编写这个时间模块程序,可是费了不少周折,刚开始阅读厂家的数据手册,都弄不懂怎么回事,后来居然发现一个重大问题,原厂家的英文数据手册居然和国内厂家中文版手册有出入,是在读数据时的时序不一样,原厂家的是下降沿读数据,而中文版的是上升沿读数据,最后经过测试验证中文版的对,看来我用的这个芯片一定是中国产的喽,一提made in china心里就发毛呀,当然并不是贬低中国,但是不得不承认外国的产品质量就是好呀,就是因为质量问题快头疼死人了,当我的整个时间模块要完工时出了一个问题:时间运行时会偶尔蹦出个错误的,我就一遍一遍的找程序的错误,扒了好几遍也没找到什么毛病,最后狠心重编部分程序,搞了好几天呀,几乎把整个程序重写了,还是不行,都快绝望了,后来上网找资料,也没什么收获,不过越来越发现网友对芯片质量的怀疑,哎,干脆我也换个试试,插上芯片,接通电源,一切正常,靠,可害死我了,好几天的宝贵时间呀!
还一个极为重要的是:芯片的时钟数据是BCD码,之前我一直以为BCD码就是十六进制,正好单片机内部也是十六进制,正好呀。后来调试时发现,秒走到59,后面是60秒、61秒、62秒、、、、、、有时还会跳跃,赶紧手动调节分、小时、月、日、年,都不会自动进制,我还纳闷是芯片傻了还是控制字没写对呀,难道要我自己换算不成,呵呵,不大可能!于是研究BCD码,哦,原来BCD码最大到9呀,
再加就进1啦,赶紧在通信时加上BCD码和十六进制的互相转换,呵呵,对了。
关于DS1302的初始化也是有技巧的,这是一个可以带备用电池的芯片,放上电池,即使把电源关了,它的时间还是在走的,呵呵,和电脑一样呀!这样的话,如果它的备用电池不断电,就不用再对它初始化啦,也就是说一辈子不断电,这一辈子它只要初始化一次就行了,但是单片机如果断电再通电,程序又会从头开始执行,又会执行它的初始化程序,我开始以为只要不破坏它的时钟数据就行,单片机开机时先读一次时钟数据,然后把控制字叠加进去,再写回去就好了,可试验了好几次都不行,每次都是小时的数据不对了。于是在DS1302暂存RAM中设立一个标志位,只要备用电池不断电,标志就不会消失,每次通电开机时,单片机检测到这个标志就不再对其初始化,呵呵,一切正常。继续下一个模块的调试喽!
呵呵,现在时间模块已经调试通过,只是精确度还没验证,这个可以最后完成,到时换一下DS1302晶振的谐振电容就好了。调试是通过啦,不过呢,还是有一个不明白的问题,多字节读,能读出时钟数据,但是多字节写却写不进去数据,头疼呀!难道时钟芯片又坏啦?没时间了,单字节写吧,浪费点软件资源吧,以后有时间一定要弄明白!切记!切记!
2007年10月22日晚上八点于大学科技园
备注:
DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。
DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:1 RES 复位;2 I/O 数据线;3 SCLK串行时钟。
时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。
DS1302 工作时功耗很低。保持数据和时钟信息时功率小于1mW
下面将主要的性能指标作一综合:
实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力
31* 8 位暂存数据存储RAM
串行I/O 口方式使得管脚数量最少
宽范围工作电压2.0 ~5.5V
工作电流2.0V 时,小于300nA
读/写时钟或RAM 数据时有两种传送方式:单字节传送和多字节传送字符组方式
8 脚DIP 封装或可选的8 脚SOIC 封装根据表面装配
简单3 线接口
与TTL 兼容Vcc=5V
可选工业级温度范围-40 +85
与DS1202 兼容
在DS1202 基础上增加的特性
对Vcc1 有可选的涓流充电能力
双电源管用于主电源和备份电源供应
备份电源管脚可由电池或大容量电容输入
附加的7 字节暂存存储器