DS1302时钟Word格式.docx
- 文档编号:16056439
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:11
- 大小:175.53KB
DS1302时钟Word格式.docx
《DS1302时钟Word格式.docx》由会员分享,可在线阅读,更多相关《DS1302时钟Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
当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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS1302 时钟