您当前的位置:五五电子网电子知识元器件介绍元器件特点及应用时钟芯片DS2417的工作原理与应用 正文
时钟芯片DS2417的工作原理与应用

时钟芯片DS2417的工作原理与应用

点击数:7610 次   录入时间:03-04 12:03:00   整理:http://www.55dianzi.com   元器件特点及应用

  1 DS2417的引脚排列和内部结构

  DS2417采用6引脚TSOC封装,其引脚描述如表1所列。

  表1 DS2417的引脚功能

19.jpg


DS2417的内部结构如图1所示。光刻ROM中的64位序列号是出厂前被刻好的,它可以看作是该DS2417的地址序列码;6位光刻ROM的排列是:开始8位(27H)为产品类型标号,接着的48位是该DS2417自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+);光刻ROM的作用是使每一个一线式器件的址都各不相同,这样就可以实现一根总线上挂接多个一线式芯片的操作。

19.gif

  对于一线端口,在ROM功能建立之间,时钟的读写和控制功能是无法实现的。总线控制器必须首先提供下列4个ROM功能控制命令(8位)中的一个:

  (1)读ROM,命令字[33H];

  (2)匹配ROM,命令字[55H];

  (3)搜索ROM,命令字[F0H];

  (4)跳过ROM,命令字[CCH]。

  如果多个器件连接在一线上,这些命令将对每个器件的64位ROM部分进行操作,并选出一个特定器件以进行下一步读时钟[66H]和写时钟[99H]操作的时钟功能控制。而所有命令或数据的读/写均从最低位开始。

  DS2417的5、6脚外接32.768MHz晶振,片内振荡器和分频器可产生1Hz的时间基准脉冲,可接入32位二进制实时时钟计数器以完成对时间的计量。时间计数值采用双缓冲结构,时钟功能控制命令仅对读/写缓冲器进行操作,这样可以防止实时时钟计数器更新时发生读写错误。

  由于DS2417芯片采用32位二进制秒计数器来记录时间(溢出的记时时间长达136年),因此必须根据实际需要规定一个基准(例如将32位全0规定为2000年1月1日午夜0时0分0秒),在此基础上通过编程算依次读出32位数值以获得相应的秒、分、时以及日、月、年等信息。如果老大哥忍气吞声时间信息较多,从编程的复杂程序看,不宜选用DS2417,而应选择其他带日历的时钟芯片。

  系统继电后,DS2417芯片将停止工作,如果在VDD端接入备用电流,则DS2417可看和是非易失性、独立连续工作的器件。



www.55dianzi.com

其中D1、D0为无效位,读出时始终为0;D3、D2用于控制或报告振荡器的状态,如果振荡器处于工作状态,读出该字节时两个OSC的值全为1,否则全为0,同样对OSC写入全1时振荡器开启,在OSC写入全0时可关闭振荡器;D7位IE是中断使能控制位,当IE=1时中断允许,IE=0时中断关闭;D6、D5、D4是中断申请脉冲(负脉冲,持续122μs)时间间隔控制位,时间间隔与IS2、IS1、IS0的关系如表2所列。

表2 DS2417的中断脉冲时间间隔控制
22.jpg

  3 DS2417与单片机的典型接口设计

  图2以MCS-51系列单片机为例,画出了DS2417与微处理器的典型连接电路。其中1-Wire端接AT89C51的P1.0,INT端接AT89C51的INT0,VDD采用5V电源供电。

  假设单片机系统所用的晶振频率为12MHz,笔者根据DS2417的初始化时序、定悍序和读时序分别编写了三个子程序:INIT为初始化子程序、WRITE为写(命令或数据)子程序、READ为读数据子程序,所有的数据读写均由最低位开始。具体程序如下:



www.55dianzi.com

  SETB DAT ;主机释放总线,口线改为输入

  MOV R2,#30

  INI12:DJNZ R2,INI12

  ;DS2417;等待2μs×30=60μs

  CLR C

  ORL C,DAT

  ;DS2417;数据线变低(有存在脉冲)吗?

  JC INI10 ;DS2417未准备好,重新初始化

  MOV R6,#80

  INT13:ORL C,DAT

  JC INI14;DS2417;数据线变高,初始化成功

  DJNZ R6, INI13

  ;数据线低电平可持续3μs×80=240μs

  SJMP INI10 ;初始化失败,重来

  INI14:MOV R2,#240

  INI15:DJNZ R2,INI15

  ;DS2417;应答最少2μs×240=480μs

  RET

  ;---------------

  WRITE:CLR EA ;写入的命令/数据字节在A中

  MOV R3,#8 ;循环8次,写一个字节

  WR11:SETB DAT

  MOV R4,#8

  RRC A ;写入位从A中移到CY

  CLR DAT

  WR12:DJNZ R4,WR12 ;等待16μs

  MOV DAT,C;命令字按位依次送给DS2417

  MOV R4, #20

  WR13:DJNZ R4, WR13 ;保证写过程持续60μs

  DJNZ R3, WR11 ;未送完一个字节继续

  SETB DAT

  RET

  ;----------------

  READ:CLR EA

  MOV R6,#8 ;循环8次,读一个字节

  RD11:CLR DAT

  MOV R4,#4

  NOP ;低电平持续2μs

  SETB DAT ;口线设为输入

  RD12:DJNZ R4,RD12 ;等待8μs

  MOV C,DAT ;主机按位依次读入DS2417的数据

  RRC A ;读取的数据移入A

  MOV R5,#30

  RD13:DJNZ R5,RD13 ;保证读过程持续60μs

  DJNZ R6,RD11 ;读完一个字节的数据,存入A中

  SETB DAT

  RET

  ;----------------



www.55dianzi.com

  GETSJ:LCALL INIT

  MOV A,#0CCH

  LCALL WRITE ;发跳过ROM命令

  LCALL INIT

  MOV A,#66H ;发读时钟命令

  LCALL WRITE

  MOV R0,#30H

  MOV R7,#5

  RDNEXT:LCALL READ

  MOV @R0,A

  INC R0

  DJNZ R7,RDNEXT

  RET

  .......

23.gif

  如果子程序GETSJ读取的时间值放于34H~31H中,根据选择的时间基准,经过编程变换即可得到日历时间信息。如果一线上挂接多个DS2417或其它一线式接口芯片,则子程序GETSJ的编写将会复杂一些,限于篇幅,本文不再,读者可参阅相关文献。




本文关键字:工作原理  元器件特点及应用元器件介绍 - 元器件特点及应用