DS1302时钟芯片读写详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DS1302时钟芯片读写详解

2008-09-26 13:07

/*DS1302读写程序(C51)*/

sbit DS13CLK =P1^5; /*DS1302的SCLK脚脉冲*/ sbit DS13IO =P1^6; /*DS1302的IO脚数据*/ sbit DS13CS =P1^7; /*DS1302的RST脚片选*/ /*向DS1302写一个字节*/

void _wds13byte(uchar _code)

{

uchar i;

DS13CLK =0;

DS13CLK =0;

for(i=0;i<8;i++)

{

if(_code&0x01) DS13IO =1;

else DS13IO =0;

DS13CLK =1;

DS13CLK =1;

DS13CLK =0;

DS13CLK =0;

_code =_code >> 1;

}

}

/*从DS1302读一个字节*/

uchar _rds13byte(void)

{

uchar i,_code;

_code=0;

DS13CLK =0;

DS13CLK =0;

DS13IO =1;

for(i=0;i<8;i++)

{

_code =_code >>1;

if(DS13IO) _code =_code|0x80;

DS13CLK =1;

DS13CLK =1;

DS13CLK =0;

DS13CLK =0;

}

return _code;

}

/*读功能_code读功能命令*/

uchar readds1302(uchar _code)

{

DS13CS =0; /*关闭DS1302*/

DS13CLK =0;

DS13CLK =0;

DS13CS =1; /*使能DS1302*/

_wds13byte(_code); /*读代码*/

_code=_rds13byte(); /*返回读取数字*/

DS13CLK =1;

DS13CS =0; /*关闭DS1302*/

return _code;

}

/*写功能fp写的地址,_code写的内容*/

void writeds1302(uchar fp,uchar _code)

{

DS13CS =0; /*关闭DS1302*/

DS13CLK =0;

DS13CLK =0;

DS13CS =1; /*使能DS1302*/

_wds13byte(fp); /*写控制命令*/

_wds13byte(_code); /*写入数据*/

DS13CLK=1;

DS13CS =0; /*关闭DS1302*/

}

/*******DS1302设置快速充电***************/

void ds13_charg(void)

{

writeds1302(0x8e,0x00); /*解除写保护*/

writeds1302(0x90,0xa5); /*单二极管2K电阻充电*/

writeds1302(0x8e,0x80); /*置位写保护*/

}

;;;DS1302读写程序(汇编);;;

;******************************************************************* **/

T_CLK Bit P1.5 ;实时时钟时钟线引脚

T_IO Bit P1.6 ;实时时钟数据线引脚

T_RST Bit P1.7 ;实时时钟复位线引脚

;**********************************************************

;子程序名:Set1302

;功能:设置DS1302 初始时间,并启动计时。

;说明:

;调用:RTInputByte

;入口参数:初始时间在:Second,Minute,Hour,Day,Month,Week.YearL(地址连续) ;出口参数:无

;影响资源:A B R0 R1 R4 R7

;**********************************************************

Set1302:

CLR T_RST

CLR T_CLK

SETB T_RST

MOV B, #8EH ;控制寄存器

LCALL RTInputByte

MOV B, #00H ;写操作前WP=0

LCALL RTInputByte

SETB T_CLK

CLR T_RST

MOV R0, #Second;

MOV R7, #7 ;秒分时日月星期年

MOV R1, #80H ;秒写地址

S13021: CLR T_RST

CLR T_CLK

SETB T_RST

MOV B, R1 ;写秒分时日月星期年地址

LCALL RTInputByte

MOV A, @R0 ;写秒数据

MOV B, A

LCALL RTInputByte

INC R0

INC R1

INC R1

SETB T_CLK

CLR T_RST

DJNZ R7, S13021

CLR T_RST

CLR T_CLK

SETB T_RST

MOV B, #8EH ;控制寄存器

LCALL RTInputByte

MOV B, #80H ;控制,WP=1,写保护

LCALL RTInputByte

SETB T_CLK

CLR T_RST

RET

;**********************************************************

;子程序名:Get1302

;功能:从DS1302 读时间

;说明:

;调用:RTInputByte,RTOutputByte

;读出: Second,Minute,Hour,Day,Month,Week.YearL

相关文档
最新文档