DS1302时钟芯片读写详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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