《匠人手记》推荐网上购书渠道:
  互动出版网(china-pub)   >>>
  当当网(dangdang)   >>>
  卓越亚马逊网    >>>
  淘宝网(taobao)   >>>
  更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

串行实时时钟芯片DS1302程序设计中的问题与对策
程序匠人 发表于 2006-8-14 15:30:00  阅读全文 | 回复(0) | 引用通告 | 编辑

美国Dallas公司推出的串行接口实时时钟芯片DSl302可对时钟芯片备份电池进行涓流充电。由于该芯片具有体积小、功耗低、接口容易、占用CPUI/O口线少等主要特点,故该芯片可作为实时时钟广泛应用于智能化仪器仪表中。

  笔者在调试中发现在对DSl302编程中有几个问题易被疏忽而导致错误,现提供给读者参考。

  1读操作出现的错误


  按照参考文献[2]的读操作程序框图和参考文献[1]、[2]所叙述的可知:单字节读操作每次需16个时钟,地址字节在前8个时钟周期的上升沿输入,而数据字节在后8个时钟周期的下降沿输出。据此结合图1的硬件连接图编制出了如下的单字节读程序:

DS_READSETBP1.2;令=0。

CLRP1.1;令SCLK=0。

CLRP1.2;令=1,启动芯片。

LCALLDS_WSUB;写8位地址。

LCALLDS_RSUB;读出8位数据。

RET

DS_WSUBMOVR7,#08H

WL00PRRCA;A为地址字节。

MOVP1.0,C

SETBP1.1;在时钟上升沿

NOP;输入地址字节。

CLRP1.1

DJNZR7WL00P

RET

DS_RSUBSETBP1.0;为读数据作准备。

MOVR7#08H

RL00P:SETBP1.1

NOP

CLRP1.1;在第9个正脉冲的下

MOVC,P1.0;降沿开始输出数据。

RRCA;A中为读出的数据。

DJNZR7,RL00P

RET

  若使用如下程序对DSl302的RAM1其内容为5AH进行读操作

READ:MOVA#11000101B;RAM1单元的读地址。

LCAllDS_READ;调用读子程序。

  则程序执行后A中的数据为2DH,显然读出的数据不正确。若再使用一条RLA指令调整后,则A中为5AH,结果才正确。由此说明:使用上述程序读出的RAM1单元中的第0位数据实为第1位数据,读出的第7位数据实为第0位数据。

  经笔者仔细研究时序图和多次试验得知,问题的原因在于:对于读操作时序,在SCLK出现第8个正脉冲时,上升沿输入地址字节的最后一位数据,而在此正脉冲的下降沿就要输出数据字节的第0位数据。然而笔者的程序中是在第9个正脉冲的下降沿才误认为输出了数据字节的第0位数据,此位数据事实上是第二个下降沿输出的,故实为数据字节的第1位数据。经笔者实验:只要RST保持为高电平,如果超过8个下降沿,它们将重新从第0位输出数据位,因程序中输出的最后一位数据位,是9个下降沿输出的数据位,故实为数据字节的第0位数据位。

  由此可见,单字节读操作的时序图如改为图2所示时序图,则读者较容易理解可避免发生上述编程错误。


  只要将上述的DS_RSUB子程序改为如下的子程序即可解决上述问题:

DS_RSUBl:SETBP1.0;为读数据作准备

MOVR7,#08H

RL00P:CLRP1.1;SCLK第8个正脉冲的

MOVC,P1.0;下降沿开始输出数据。

RAC

SETBP1.1

DJNZR7,RL00P

RET

  2禁止涓流充电出现的错误

  涓流充电寄存器(TCR)控制着DSl302的涓流充电特性。据参考文献[1]、[2]介绍,寄存器的位(TCS)4~7决定着是否具备充电性能。仅在1010编码的条件下才具备充电性能,其它编码组合不允许充电。位2和3(DS)则在和之间选择是一个还是两个二极管串入其中。如果编码是01,选择一个二极管;如果编码是10,选择两个;其它编码将禁止充电。该寄存器的0和1位(RS)用于选择与二极管相串联的电阻值,其中编码01为2kΩ;10为4kΩ;11为8kΩ;而00将不允许充电。笔者编制了如下的允许涓流充电的控制程序(选择一个二极管,充电限流电阻为4kΩ):

SETBP1.2;令=0

CLRP1.2;令SCLK=0

CLRP1.2;令=1

MOVA#90H;TCR的写地址

LCALLDS_WSUB

MOVA#10100110B;TCR的命令

LCALLDS_WSUB

  用万用表串入与可充电池之间,执行程序后,则有电流流过万用表,表示充电正常。笔者通过将上述程序的第6句改为:MOVA,#10100010B,即置DS为00来禁止涓流充电器工作。执行程序后,在与电池之间串入万用表,则仍有电流流过,表示尚未禁止充电。若将第6语句改为:MOV A,#10101110B,即置DS为11,执行上述程序后情况仍如此。若将第6语句改为:

  MOV A,#01010110B即TCS≠1010

  或:MOV A,#10100100B即RS=00则充电被禁止。

  笔者误认为芯片损坏,换上另一新购置的芯片,结果仍如此。随即笔者取下图1所示电路中的可充电池,换上一标称为10kΩ的电阻对芯片进行了测试,测试结果如表1所示=5V。

  由此可见,当涓流充电控制寄存器中的DS位为00和11时并不能禁止充电,而是选择了一个二极管充电,这说明参考文献中介绍的有误。若要想禁止充电器充电,应将第6句改为:MOVA,#0101XX00B即TCS≠1010,RS=00,这样,就能双保险地禁止充电。


  3受干扰时钟/日历信息出现的错误

  笔者将DSl302应用于某产品中,发现系统受到干扰时,有时其时钟停振不能正常工作,此时的时钟/日历信息也被修改。

  经分析得知:系统受到干扰程序飞跑,在看门狗复位前,CPU正好执行写程序将写保护寄存器的最高位置0为允许写(实际上,在系统校时程序之后已将其置为1禁止写),修改了时钟/日历信息且使秒寄存器的最高位置1,致使时钟停振出现错误。

  为避免此类错误的产生,笔者采用的方法是:在写程序中增加了某一检测条件,此条件为系统中某一口线上的电平,低电平条件满足。只有在实时校时过程中,才通过手动使此口线为低电平,实时校时过程完成后,又通过手动使此口线为高电平。这样只有实时校时过程中,才允许修改时钟/日历信息,因此起到了时钟/日历信息的写保护作用

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    推荐阅读

    往日酷贴

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]

    [AVR猎手的地盘]

    [中国高校自动化网]

    [SunK]