DS1302读写
来源:互联网 发布:25岁学编程 编辑:程序博客网 时间:2024/05/18 18:47
#define __DS1302_H__
sbit SCK = P1^4; //时钟线
sbit SDA = P1^5; //数据线
sbit CE = P1^6; //片选控制线
#define CE_CLR CE=0//片选控制信号置低
#define CE_SET CE=1//片选控制信号置高
#define IO_CLR SDA=0//数据信号置低
#define IO_SET SDA=1//数据信号置高
#define IO_R SDA //数据信号的状态
#define SCK_CLR SCK=0//时钟信号置低
#define SCK_SET SCK=1//时钟信号线置高
//读寄存器在写寄存器的基础上加1
#define DS1302_SEC_REG_W 0X80 //秒写寄存器(0~59)
#define DS1302_MIN_REG_W 0X82//分写寄存器(0~59)
#define DS1302_HOU_REG_W 0X84//时写寄存器(1~12/0~23)
#define DS1302_DAT_REG_W 0X86//日写寄存器(1~31)
#define DS1302_MON_REG_W 0X88//月写寄存器(1~12)
#define DS1302_DAY_REG_W 0X8A//周日写寄存器(1~7)
#define DS1302_YEA_REG_W 0X8C//年写寄存器(00~99)
#define DS1302_CON_REG_W 0X8E//控制使能寄存器
void Write_Ds1302(unsigned char addr, unsigned char val);
unsigned char Read_Ds1302(unsigned char addr);
#endif
#include "ds1302.h"
/*
*********************************************************************************************************
* 地址数据发送函数
*********************************************************************************************************
*/
void Write_Ds1302(unsigned char addr, unsigned char val)
{
unsigned char i, temp;
//拉低片选数据传送终止
CE_CLR;
//拉低时钟线清零设置
SCK_CLR;
//拉高片选逻辑控制有效
CE_SET;
//地址时序操作
for (i = 0; i < 8; i++)
{
//时钟线 开始下一个数据存储
SCK_CLR;
temp = addr;
IO_R = (bit)(temp&0x1);
addr >>= 1;
//时钟线拉高 这个数据存储完毕
SCK_SET;
}
//数据时序操作
for (i = 0; i < 8; i++)
{
//时钟线拉低开始下一个数据存储
SCK_CLR;
temp = val;
IO_R = (bit)(temp&0x1);
addr >>= 1;
//时钟线拉高这个数据存储完毕
SCK_SET;
}
//拉低片选操作完成
CE_CLR;
}
/*
*********************************************************************************************************
* 地址数据读取函数
*********************************************************************************************************
*/
unsigned char Read_Ds1302(unsigned char addr)
{
unsigned char i, temp;
//拉低片选数据传送终止
CE_CLR;
//拉低时钟线清零设置
SCK_CLR;
//拉高片选逻辑控制有效
CE_SET;
addr |= 0x1;
//地址时序操作
for (i = 0; i < 8; i++)
{
//时钟线拉低开始下一个数据存取
SCK_CLR;
temp = addr;
IO_R = (bit)(temp&0x1);
addr >>= 1;
//时钟线拉高这个数据存储完毕
SCK_SET;
}
//读取数据时序操作
for (i = 0; i < 8; i++)
{
SCK_CLR;
temp = temp >> 1;
if (IO_R)
{
temp |= 0x80;
}
else
{
temp &= 0x7F;
}
SCK_SET;
}
//拉低片选 数据传送终止
CE_CLR;
return temp;
}
相当详细的注释
- DS1302读写
- DS1302基本的读写
- DS1302读写操作
- ds1302
- DS1302
- DS1302
- Ds1302
- DS1302
- ds1302
- DS1302
- DS1302
- 51单片机对DS1302突发模式的读写
- DS1302程序
- DS1302 万年历
- DS1302组件
- 单片机--ds1302
- 【单片机】DS1302
- ds1302通信
- 关于telnet协议的研究及应用
- 《SAS应用统计》学习笔记[T检验与方差分析]
- 项目视频讲解_动力节点DRP
- 启联微型GPS平台,用户测试效果
- 《实用OpenCV》<六> 图像中的形状(1)
- DS1302读写
- Android开发必备库
- Activiti Identify同步或者重构用户数据的多种方案比较
- C# 判断datagridview中内容是否为空
- STL Vector remove()和erase()的使用
- Android源代码下载
- Java实现记事本功能:JNotePad
- 设计模式之 装饰模式(Decorator)
- github版本库使用详细教程(命令行及图形界面版)