打印

ds12c887经典问题

[复制链接]
6794|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lin34337151|  楼主 | 2010-7-1 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天在调试程序的时候遇到这样一个问题:开始的时候DS12C887的每一个寄存器的实时信息都能读出来,并在1602液晶上显示正确,但后来调试过程中不小心写了这样一条程序:write_ds(0x06);
我原本的意思是想把寄存器B的最高位清零。正确形式应该是write_ds(0x0b,0x06);不小心把0x0b漏写了,结果问题出现了。887的06寄存器就是星期读不回来,把write_ds(0x06);改正过来也读不回来,因为写的程序比较大到了600多行,下午就翻来复去,以为是哪里不小心弄错了,或者中文输入法的时候不小心输入了空格等等。仔细检查没发现这些问题,觉得奇怪了,明明是好好的程序怎么就突然不行了。后来换了一个887,可以读回06寄存器的信息。后来我就想,是不是这个寄存器坏了,读不回来了,想想觉得这很不可能,后来突然想到了,把06寄存器初始化一下,先给它写个数进去,这样对了,读取成功。后总结,一定是这条语句write_ds(0x06);改动了06寄存器里面的数据,写入了一个未知的数(它正常的话数据是1-7循环)。还有在操DS12C887时发现总结了一点点东西在这里也共享一下:
1)新的DS12C887一定要开启内部晶振,write_ds(0x0a,0x20);内部晶振一旦开启了好像不能关闭   了,我尝试了write_ds(0x0a,0x00);但实时时钟信息还会更新;
2)B寄存器最高为1时不能进行更新显示,就是不能读取寄存器里面的实时信息,但内部时钟会继续更新,只是禁止读取,在B最高位为1或0是都可以向寄存器里面写数据的,开始我也误解了,以为数据更新的时候不能往里面写数据,其实也可以的;
3)时钟格式,编码设置按控制寄存器B来就可以了;
4)昨天还遇到了这样一个问题,(我是用P0口连接887的通信并口的)读取到了秒信息,更新也完全正确,但是小时,分钟在几个不确定的数字中循环跳动,但是秒钟到了59之后,分种循环跳动中的有个数字会相应的加1,(开始没发现这个问题,后来仔细看,观察的到了,分钟循环跳动的频率跟秒一样),开始也检查了很多地方没发现问题,后来在P0口上加了个上拉电阻,OK了!
评分
参与人数 1威望 +3 收起 理由
bjjtyl + 3 很给力!
沙发
张文XXX| | 2012-3-26 18:10 | 只看该作者
请问楼主,DS12C887可以用3.3V操作吗?我看资料上写的高电平是2.0V到VCC?

使用特权

评论回复
板凳
bjjtyl| | 2013-6-10 15:38 | 只看该作者
向老师学习,有时间向你学习。

使用特权

评论回复
地板
剡溪渡口| | 2013-10-28 10:55 | 只看该作者
学习了

使用特权

评论回复
5
springvirus| | 2015-4-22 16:20 | 只看该作者
宝贵的经验分享,正在用3.3V的片子驱动,失败中

使用特权

评论回复
6
springvirus| | 2015-4-22 16:23 | 只看该作者
楼主用的什么主控?

使用特权

评论回复
7
lin34337151|  楼主 | 2015-4-27 11:05 | 只看该作者
现在这个片子很老了,价格也贵,采购难,不要用这个片子了。

使用特权

评论回复
8
兔几| | 2016-11-28 23:45 | 只看该作者
鄙人刚学单片机  想请问楼主在仿真中初始化ds1887时间  断电上电后开始时间是初始化的那个时间   但是删了初始化时间的函数后出现乱码  只有秒不会乱码  怎么才能够仿真上电后显示的是现在的时间呢  

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

113

主题

285

帖子

3

粉丝