硬件时钟--DS1307时钟芯片

本文介绍了如何通过模拟I2C通信来控制DS1307时钟芯片进行读写操作,以实现硬件时钟的功能。
摘要由CSDN通过智能技术生成

模拟I2C通讯控制DS1307读写硬件时钟


#include "global.h"
#include "drv_ds1307.h"

#define I2C_CLK_PORT        GPIOB
#define I2C_CLK_PIN         GPIO_PIN_4

#define I2C_SDA_PORT        GPIOB
#define I2C_SDA_PIN         GPIO_PIN_5

#define SCL_High()        GPIO_Init(I2C_CLK_PORT, I2C_CLK_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW) 
#define SCL_Low()         GPIO_Init(I2C_CLK_PORT, I2C_CLK_PIN, GPIO_MODE_OUT_PP_LOW_SLOW)  
#define SDA_High()        GPIO_Init(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW) 
#define SDA_Low()         GPIO_Init(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_MODE_OUT_PP_LOW_SLOW) 
#define SDAM()           (GPIO_ReadInputData(I2C_SDA_PORT) & 0x20) ?1:0
#define SET_SCL_OUT()    GPIO_Init(I2C_CLK_PORT, I2C_CLK_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW)
#define SET_SDA_OUT()    GPIO_Init(I2C_SDA_PORT, I2C_SDA_PIN, GPIO_MODE_OUT_PP_HIGH_SLOW)
#define SET_SDA_IN()     GPIO_Init(GPIOA, GPIO_PIN_0, GPIO_MODE_IN_PU_NO_IT)

extern uint8_t Ds1307_WriteByte(uint8_t WriteAddr,uint8_t WriteData);
extern uint8_t Ds1307_ReadByte(uint8_t ReadAddr);
extern void Ds1307_WriteData();
extern void Ds1307_ReadData();
extern void Init_Timer();
extern void Write_Time();

uint8_t g_u8ReadData[8];

/*******************************************************************************
//  Function:     I2C_Int
//  Description: 模拟I2C 与ds1307端口初始化
//  Param:        
//  Return:       
//  Author: Huangzhigang 2014-0410
*******************************************************************************/
static void I2C_Int(void)
{
   SET_SDA_OUT();  
   SET_SCL_OUT();
}

/*******************************************************************************
//  Function:     Delay_5us
//  Description:  微妙级延时函数   延时时间约为16us
//  Param:        
//  Return:       fcpu 16MHz 时
//  Author: Huangzhigang 2014-0410
*******************************************************************************/
static void Delay_5us(void)
{
   uint8_t i;                 
   for (i=5; i>0; i--);
}

/*******************************************************************************
//  Function:     I2C_Start
//  Description:  I2C 开始传输信号  当SCL 为高时  SDA由高变低
//  Param:        
//  Return:      
//  Author: Huangzhigang 2014-0410
***************
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值