当前位置:首页 > 单片机 > 单片机
[导读]void wr1302(unsigned char dat) //向1302写1个字节 { unsigned char i; for(i=0;i>1; //数据右移 ; } } unsigned char rd1302(void) //从1302读1个字节 { unsigned char i; for(i=0;i>1; DATA130

void wr1302(unsigned char dat) //向1302写1个字节
{
unsigned char i;
for(i=0;i<8;i++) //从最低位开始发送
{
ACC=dat;
DATA1302=BIT0;//位传送至数据总线
;
SCLK1302=0; //清时钟总线
;
SCLK1302=1; //时钟上升沿,发送数据有效
dat=dat>>1; //数据右移
;
}
}
unsigned char rd1302(void) //从1302读1个字节
{
unsigned char i;
for(i=0;i<8;i++) //从最低位开始接收
{
ACC=ACC>>1;
DATA1302=1; //读数据之前,P1口输出1
SCLK1302=1;//时钟置高电平
;
SCLK1302=0;//时钟下降沿,接收数据有效
;
BIT7=DATA1302;//接收1位数据
;
}
return ACC;
}
void v_wr1302(unsigned char add,unsigned char dat)//先写地址,后写1字节数据
{ // 地址或命令 数据
RST1302=0;//复位引脚低电平,所有数据传送终止
;
SCLK1302=0;//清时钟总线
;
RST1302=1;//复位引脚高电平,控制逻辑有效
;
wr1302(add); //写地址或命令
;
wr1302(dat); //写1个数据
;
SCLK1302=1;
RST1302=0;
}
unsigned char v_rd1302(unsigned char add) //先写地址,后读1字节命令或数据
{ // 地址
unsigned char i;
RST1302=0;//复位引脚低电平,所有数据传送终止
;
SCLK1302=0;//清时钟总线
;
RST1302=1;//复位引脚高电平,控制逻辑有效
;
wr1302(add); //写地址或命令
;
i=rd1302();
SCLK1302=1;
RST1302=0;
return i; //返回读取的数据
}
/********************************************************************
* 名称: send_byte1302
* 说明: 先写地址,后写数据(时钟多字节方式)
* 功能: 往DS1302写入时钟数据(多字节方式)
* 调用: wr1302();v_wr1302();
* 输入: *p: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
* 8Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B 1B
* 返回值: 无
***********************************************************************/
void send_byte1302(unsigned char *p)
{
unsigned char i;
v_wr1302(0x8e,0x00); // 控制命令,WP=0,写操作
RST1302=0;//复位引脚低电平,所有数据传送终止
;
SCLK1302=0;//清时钟总线
;
RST1302=1;//复位引脚高电平,控制逻辑有效
;
wr1302(0xbe); //0xbe:时钟多字节写命令
for(i=0;i<8;i++)//发送数据8字节
{
wr1302(*p);
p++;
}
SCLK1302=1;
RST1302=0;
}
/********************************************************************
* 名称: rcv_byte1302
* 说明: 先写地址,后读命令/数据(时钟多字节方式)
* 功能: 读取DS1302时钟数据
* 调用: wr1302() , rd1302()
* 输入: *p1: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
* 返回值: ucDa :读取的数据
***********************************************************************/
unsigned char rcv_byte1302(unsigned char *p1)
{
unsigned char i;
RST1302=0;//复位引脚低电平,所有数据传送终止
;
SCLK1302=0;//清时钟总线
;
RST1302=1;//复位引脚高电平,控制逻辑有效
;
wr1302(0xbf);// 0xbf:时钟多字节读命令
for(i=0;i<8;i++)//接收数据8字节
{
*p1=rd1302();
p1++;
}
SCLK1302=1;
RST1302=0;
}
/********************************************************************
* 名称: v_set1302
* 说明:
* 功能: 设置初始时间
* 调用: v_wr1302()
* 输入: *p2: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 无
***********************************************************************/
void v_set1302(unsigned char *p2)
{
unsigned char i;
unsigned char addr=0x80;
v_wr1302(0x8e,0x00); //控制命令,WP=0,允许写
for(i=0;i<7;i++)
{
v_wr1302(addr,*p2); /* 秒 分 时 日 月 星期 年 */
p2++;
addr=addr+2;
}
v_wr1302(0x8e,0x80); // 控制命令,WP=1,写保护
}
/********************************************************************
* 名称: v_get1302
* 说明:
* 功能: 读取DS1302当前时间
* 调用: v_rd1302()
* 输入: time: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
* 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
* 返回值: 无
***********************************************************************/
void v_get1302(void)
{
unsigned char i;
unsigned char addr=0x81;
for(i=0;i<7;i++)
{
time[i]=v_rd1302(addr); //格式为: 秒 分 时 日 月 星期 年
addr=addr+2;
}
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

51单片机学习笔记———13.1DS1302实时时钟原理部分

关键字: ds1302 时钟

由于昨天照着手册写了一下DS1302的驱动程序,发现耗时挺多的,并且在考场上不可能一步步去自己写驱动,所以今天看了一下蓝桥杯提供的DS1302官方驱动程序,发现直接引用还是不行的,程序当中有些小问题需要去修改。下面就对那...

关键字: ds1302 时钟

DS1302时钟模块通信原理(SPI总线)

关键字: ds1302 时钟

现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用

关键字: ds1307 ds1302

现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。

关键字: ds1302 时钟芯片 电路

DS1302 我们前边也有提起过,是三根线,分别是 CE、I/O 和 SCLK,其中 CE 是使能线,SCLK 是时钟线,I/O 是数据线。前边我们介绍过了 SPI 通信,同学们发现没发现,这个 DS1302 的通信线定...

关键字: ds1302 通信时序

//引入文件***********************************************************#include "delay.h" #include "...

关键字: ds1302 pic16f84a 读取时钟芯片

参考DS1302数据手册,尽管数据手册是英文,但是很有帮助,再结合网上众多的代码写出了下面这个例子,除了涓流充电(trickle charger)功能没使用外,内部的RAM和寄存器功能都使用到了,包括多字节方式(burs...

关键字: ds1302 演示代码

1、DS1302时钟芯片的讲解待完成!!!2、自己写的DS1302芯片的配置文件//DS1302_SPIdriver.h//DS1302_SPIdriver.h#ifndef__SPIDRIVER_H__#define_...

关键字: ds1302 单片机 时钟芯片

发现网上一些程序在16M晶振下不能工作,自己写了个,按照2V的时序写的,但只在5V和3.3V下测试过.以下是两个主要的文件DS1302.h:/************ AVR DS1302程序 *************...

关键字: AVR ds1302 程序源代码
关闭