1HT1380串行时钟芯片的原理与应用摘要本文概括介绍了HT1380时钟芯片的特点和基本组成通过实例详细说明了有关功能的应用软件关于HT1380各寄存器的详细位控功能请参考HOLTEK合泰公司的相应产品资料一概述HT1380是HOLTEK公司推出的一款带秒分时日星期月年的串行时钟保持芯片每个月多少天以及闰年能自动调节HT1380具有低功耗工作方式并用若干寄存器存储对应信息一个32.768KHz的晶振校准时钟为了使用最小引脚HT1380使用一个I/O口与微信息处理机相连仅使用三根引线1RST复位2SCLK串行时钟3I/O口数据就可以传送1字节或8字节的字符组因而HT1380是一种性价比极高的时钟芯片它广泛应用于电话传真便携式仪器以及电池供电的仪器仪表等产品领域下面将主要的性能指标作一综合1工作电压2.0V5.5V表面贴装(尺寸见下)2最大输入串行时钟:2.0V时500KHz5.0V时2MHz3工作电流:2.0V时至少300nA5.0V时至少1A4与TTL兼容5串行I/O口传送6两种数据传送方式单字节传送多字节传送字符组方式7所有寄存器都以BCD码格式存储单位微米PadNO.XYPadNO.XY1-1060.5100051050.654.152-1060.5683.1361050.8472.163-1060.5-236.1471050.4770.2141050.62-710二HT1380的基本组成和工作原理1.HT1380的管脚排列及描述如下图及表所示符号管脚号描述NC1空脚X12振荡器输入X23振荡器输出VSS4地/RST5复位引脚I/O6数据输入/输出引脚SCLK7串行时钟VDD8正电源1234567(0.0)X1X2VSSVDDSCLKIORSTChipSize:2480x2390(um)212345678NCX1X2VssI/OSCLKVDDRST22.HT1380内部寄存器寄存器定义寄存器地址A0A2特征命令地址读写控制数据(BCD)7654321080写0秒81读0059CH10秒秒82写1分83读0059010分分12小时84写01120APHR224小时85读002312/24010HR时86写3日期87读01310010日期日期88写4月89读011200010月月8A写5日8B读01070000星期8C写6年8D读009910年年8E写7写保护8F读0080WP通常0CH:时钟停止位寄存器2的第7位12/24小时标志CH=0振荡器工作允许bit7=1,12小时模式CH=1振荡器停止bit7=0,24小时模式WP:写保护位寄存器2的第5位:AM/PM定义WP=0寄存器数据能够写入AP=1下午模式WP=1寄存器数据不能写入AP=0上午模式三HT1380与微控制器的接口软件及功能应用举例下面首先给出基本的接口软件然后举例说明各种功能的应用1写保护寄存器操作当写保护寄存器的最高位为0时允许数据写入寄存器写保护寄存器可以通过命令字节8E8F来规定禁止写入/读出写保护位不能在多字节传送模式下写入Write_Enable:MOVCommand,#8Eh;命令字节为8EMOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#00h数据内容为0写入允许ACALLSend_Byte调用写入数据子程序RET当写保护寄存器的最高位为1时禁止数据写入寄存器Write_Disable:MOVCommand,#8Eh;命令字节为8EMOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#80h数据内容为80h禁止写入ACALLSend_Byte调用写入数据子程序RET以上程序调用了基本数据发送(Send_Byte)模块及一些内存单元定义,其源程序清单在附录中给出下面的程序亦使用了3这个模块2时钟停止位操作当把秒寄存器的第7位时钟停止位设置为0时起动时钟开始Osc_Enable:MOVCommand,#80h命令字节为80MOVByteCnt,#1单字节传送模式MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#00h数据内容为0振荡器工作允许ACALLSend_Byte调用写入数据子程序RET当把秒寄存器的第7位时钟停止位设置为1时时钟振荡器停止HT1380进入低功耗方式Osc_Disable:MOVCommand,#80h命令字节为80MOVByteCnt,#1单字节传送模式MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#80h数据内容为80h振荡器停止ACALLSend_Byte调用写入数据子程序RET3.多字节传送方式当命令字节为BE或BF时HT1380工作在多字传送模式8个时钟/日历寄存器从寄存器0地址开始连续读写从0位开始的数据例如写入00年6月21日星期三13时59分59秒程序设置如下Write_Multiplebyte:MOVCommand,#0BEh命令字节为BEhMOVByteCnt,#8多字节写入模式此模块为8个MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#59h秒单元内容为59hMOVXmtDat+1,#59h分单元内容为59hMOVXmtDat+2,#13h时单元内容为13hMOVXmtDat+3,#21h日期单元内容为21hMOVXmtDat+4,#06h月单元内容为06hMOVXmtDat+5,#03h星期单元内容为03hMOVXmtDat+6,#0年单元内容为00hMOVXmtDat+7,#0写保护单元内容为00hACALLSend_Byte调用写入数据子程序RET读出寄存器0-7的内容程序设置如下Read_Multiplebyte:MOVCommand,#0BFh命令字节为BFhMOVByteCnt,#8多字节读出模式此模块为8个MOVR1,#RcvDat数据地址覆给R1ACALLReceive_Byte调用读出数据子程序RET4以上程序调用了基本数据接收(Receive_Byte)模块及一些内存单元定义,其源程序清单在附录中给出下面的程序亦使用了这个模块4.单字节传送方式例如写入8时12小时模式程序设置如下Write_Singlebyte:MOVCommand,#84h;命令字节为84hMOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat数据地址覆给R0MOVXmtDat,#88h数据内容为88hACALLSend_Byte调用写入数据子程序RET上面所列出的程序模块Write_EnableWrite_DisableOsc_EnableOsc_Disable与单字节写入模块Write_Singlebyte的程序架构完全相同仅只是几个入口参数不同本文是为了强调功能使用的不同才将其分为不同模块用户在使用中可灵活简略下面模块举例说明如何单字节读出小时单元的内容.Read_Singlebyte:MOVCommand,#85h命令字节为85hMOVByteCnt,#1单字节传送模式MOVR1,#RcvDat数据地址覆给R1ACALLReceive_Byte调用读出数据子程序RETHT1380应用电路原理图P87LPC764单片机选取内部振荡及内部复位电路附录数据发送与接收模块源程序清单;CPU工作频率最大不超过20MHz;********************************************************************************************;P87LPC762/4主控器发送接受数据程序;说明本程序是利用Philips公司的P87LPC764单片机任何具有51内核或其它合适的单片机都可在此作为主控器的普通I/O口(如P1.2/P1.3/P1.4)实现总线的功能对总线上的器件本程序采用HT1380进行读写操作命令字节在Command传送字节数在ByteCnt中所发送的数据在XmtDat中所接收的数据在RcvDat中;********************************************************************************************;P87LPC762/4主控器总线发送接受数据程序头文件;内存数据定义BitCntDATA30h;数据位计数器ByteCntDATA31h;数据字节计数器CommandDATA32h;命令字节地址5RcvDatDATA40H;接收数据缓冲区XmtDatDATA50H;发送数据缓冲区;端口位定义IO_DATABitP1.3;数据传送总线SCLKBitP1.4;时钟控制总线RSTBitP1.2;复位总线;********************************************************************************;发送数据程序;名称:Send_Byte;描述:发送ByteCnt个字节给被控器HT1380;命令字节地址在Command中;所发送数据的字节数在ByteCnt中发送的数据在XmtDat缓冲区中;********************************************************************************Send_Byte:CLRRST复位引脚为低电平所有数据传送终止NOPCLRSCLK清时钟总线NOPSETBRST复位引脚为高电平逻辑控制有效NOPMOVA,Command准备发送命令字节MOVBitCnt,#08h传送位数为8S_Byte0:RRCA将最低位传送给进位位CMOVIO_DATA,C位传送至数据总线NOPSETBSCLK时钟上升沿发送数据有效NOPCLRSCLK清时钟总线DJNZBitCnt,S_Byte0位传送未完毕则继续NOPS_Byte1:准备发送数据MOVA,@R0传送数据过程与传送命令相同MOVBitCnt,#08hS_Byte2:RRCAMOVIO_DATA,CNOPSETBSCLKNOPCLRSCLKDJNZBitCnt,S_Byte2INCR0发送数据的内存地址加1DJNZByteCnt,S_Byte1字节传送未完毕则继续6NOPCLRRST逻辑操作完毕清RSTRET;********************************************************************;接收数据程序;;名称:Receive_Byte;描述:从被控器HT1380接收ByteCnt个字节数据;命令字节地址在Command中;所接收数据的字节数在ByteCnt中接收的数据在RcvDat缓冲区中;********************************************************************Receive_Byte:CLRRST复位引脚为低电平所有数据传送终止NOPCLRSCLK清时钟总线NOPSETBRST复位引脚为高电平逻辑控制有效MOVA,Command准备发送命令字节MOVBitCnt,#08h传送位数为8R_Byte0:RRCA将最低位传送给进位位CMOVIO_DATA,C位传送至数据总线NOPSETBSCLK时钟上升沿发送数据有效NOPCLRSCLK清时钟总线DJNZBitCnt,R_Byte0位传送未完毕则继续NOPR_Byte1:准备接收数据CLRA清类加器CLRC清进位位CMOVBitCnt,#08h接收位数为8R_Byte2:NOPMOVC,IO_DATA数据总线上的数据传送给CRRCA从最低位接收数据SETBSCLK时钟总线置高NOPCLRSCLK时钟下降沿接收数据有效DJNZBitCnt,R_Byte2位接收未完毕则继续MOV@R1,A接收到的完整数据字节放入接收内存缓冲区INCR1接收数据的内存地址加1DJNZByteCnt,R_Byte1字节接收未完毕则继续NOP7CLRRST逻辑