DS1302时钟Word格式.docx

上传人:b****3 文档编号:16056439 上传时间:2022-11-18 格式:DOCX 页数:11 大小:175.53KB
下载 相关 举报
DS1302时钟Word格式.docx_第1页
第1页 / 共11页
DS1302时钟Word格式.docx_第2页
第2页 / 共11页
DS1302时钟Word格式.docx_第3页
第3页 / 共11页
DS1302时钟Word格式.docx_第4页
第4页 / 共11页
DS1302时钟Word格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

DS1302时钟Word格式.docx

《DS1302时钟Word格式.docx》由会员分享,可在线阅读,更多相关《DS1302时钟Word格式.docx(11页珍藏版)》请在冰豆网上搜索。

DS1302时钟Word格式.docx

当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。

上电运行时,在Vcc>

2.0V之前,RST必须保持低电平。

只有在SCLK为低电平时,才能将RST置为高电平。

4)I/O为串行数据输入输出端(双向)。

5)SCLK为时钟输入端。

2、 

DS1302的控制字节

  DS1302的控制字如下图所示。

 

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;

位5至位1指示操作单元的地址;

最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

3、数据输入输出(I/O)

  在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

DS1302的寄存器

  DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见数据手册。

  此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。

时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。

DS1302与RAM相关的寄存器分为两类:

一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;

另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

4、在keilc51中新建工程ex69,编写如下程序代码,编译并生成ex69.hex文件

//基于DS1302的日历时钟演示实例

#include<

reg51.h>

//包含单片机寄存器的头文件

intrins.h>

//包含_nop_()函数定义的头文件

//DS1302相关的变量和引脚定义

unsignedcharcodedigit[10]={"

0123456789"

};

//定义字符数组显示数字

sbitDATA=P3^6;

//位定义1302芯片的接口,数据输出端定义在P1.1引脚

sbitRST=P3^4;

//位定义1302芯片的接口,复位端口定义在P1.1引脚

sbitSCLK=P3^5;

//位定义1302芯片的接口,时钟输出端口定义在P1.1引脚

//液晶引脚定义

sbitRS=P2^0;

//寄存器选择位,将RS位定义为P2.0引脚

sbitRW=P2^1;

//读写选择位,将RW位定义为P2.1引脚

sbitE=P2^2;

//使能信号位,将E位定义为P2.2引脚

sbitBF=P0^7;

//忙碌标志位,,将BF位定义为P0.7引脚

/*****************************************************

函数功能:

延时若干微秒

入口参数:

n

***************************************************/

voiddelaynus(unsignedcharn)

{

unsignedchari;

for(i=0;

i<

n;

i++);

}

向1302写一个字节数据

x

voidWrite1302(unsignedchardat)

unsignedchari;

SCLK=0;

//拉低SCLK,为脉冲上升沿写入数据做好准备

delaynus

(2);

//稍微等待,使硬件做好准备

for(i=0;

8;

i++) 

//连续写8个二进制位数据

{

DATA=dat&

0x01;

//取出dat的第0位数据写入1302

delaynus

(2);

SCLK=1;

//上升沿写入数据

//重新拉低SCLK,形成脉冲

dat>

>

=1;

//将dat的各数据位右移1位,准备写入下一个数据位

}

根据命令字,向1302写一个字节数据

Cmd,储存命令字;

dat,储存待写的数据

voidWriteSet1302(unsignedcharCmd,unsignedchardat)

RST=0;

//禁止数据传递

//确保写数居前SCLK被拉低

RST=1;

//启动数据传输

Write1302(Cmd);

//写入命令字

Write1302(dat);

//写数据

SCLK=1;

//将时钟电平置于已知状态

RST=0;

从1302读一个字节数据

unsignedcharRead1302(void)

unsignedchari,dat;

//连续读8个二进制位数据

//将dat的各数据位右移1位,因为先读出的是字节的最低位

if(DATA==1) 

//如果读出的数据是1

dat|=0x80;

//将1取出,写在dat的最高位

//将SCLK置于高电平,为下降沿读出

//稍微等待

//拉低SCLK,形成脉冲下降沿

returndat;

//将读出的数据返回

}

根据命令字,从1302读取一个字节数据

Cmd

unsignedchar 

ReadSet1302(unsignedcharCmd)

unsignedchardat;

//拉低RST

RST=1;

Write1302(Cmd);

dat=Read1302();

//读出数据

1302进行初始化设置

voidInit_DS1302(void)

WriteSet1302(0x8E,0x00);

//根据写状态寄存器命令字,写入不保护指令

WriteSet1302(0x80,((0/10)<

<

4|(0%10)));

//根据写秒寄存器命令字,写入秒的初始值

WriteSet1302(0x82,((0/10)<

//根据写分寄存器命令字,写入分的初始值

WriteSet1302(0x84,((12/10)<

4|(12%10)));

//根据写小时寄存器命令字,写入小时的初始值

WriteSet1302(0x86,((16/10)<

4|(16%10)));

//根据写日寄存器命令字,写入日的初始值

WriteSet1302(0x88,((11/10)<

4|(11%10)));

//根据写月寄存器命令字,写入月的初始值

WriteSet1302(0x8c,((8/10)<

4|(8%10)));

延时1ms

(3j+2)*i=(3×

33+2)×

10=1010(微秒),可以认为是1毫秒

***************************************************/

voiddelay1ms()

unsignedchari,j;

10;

i++)

for(j=0;

j<

33;

j++)

;

延时若干毫秒

v

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1