⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds1307.c

📁 智能水表程序 来着互联网
💻 C
字号:
//-----------------------------------------------------------------------------
// ds1307.c
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <reg52.h>
#include "cpu/cpu.h"
#include "ext/ds1307.h"
#include "misc/general.h"
//-----------------------------------------------------------------------------
// Function Prototypes
//-----------------------------------------------------------------------------
bit  ds1307_Initial ( void );
bit  ds1307_Write   ( char * t );
void ds1307_Read    ( char * t );
//-----------------------------------------------------------------------------
// ds1307 Initial Routine
//-----------------------------------------------------------------------------
bit ds1307_Initial (void)
{
	char c;	 bit ack;

	i2c_Start ();	
	i2c_Write_Byte ( DS1307_WR );
	i2c_Write_Byte ( DS1307_CalReg );
	i2c_Stop ();

	i2c_Start ();	
	i2c_Write_Byte ( DS1307_RD );
	c =  i2c_Read_Byte ( I2C_NACK );
	i2c_Stop ();

	if ( c & DS1307_CH )
	{
		c &= ~DS1307_CH;	
		i2c_Start ();	
		i2c_Write_Byte ( DS1307_WR );
		i2c_Write_Byte ( DS1307_CalReg );
		i2c_Write_Byte ( c );
	}
	for (c = 100; c > 0; c--);

	i2c_Start ();	
	i2c_Write_Byte ( DS1307_WR );
	i2c_Write_Byte ( DS1307_OutReg );
	ack = i2c_Write_Byte ( DS1307_OUT | DS1307_SQWE );
	i2c_Stop ();
	Delay ( 0x0FFF );
	return ack;
}
//-----------------------------------------------------------------------------
// ds1307 Write Time Routine
//-----------------------------------------------------------------------------
bit ds1307_Write ( char * t )
{
	char i;	 bit ack;

	i2c_Start ();	
	i2c_Write_Byte ( DS1307_WR );
	i2c_Write_Byte ( DS1307_CalReg );
	for ( i = sizeof( STDS1307 ); i > 0; i-- )
		ack = i2c_Write_Byte ( *t++ );
	i2c_Stop ();
	Delay ( DS1307_PROG_TIME );
	return ack;
}
//-----------------------------------------------------------------------------
// ds1307 Read Time Routine
//-----------------------------------------------------------------------------
void ds1307_Read ( char * t )
{
	char i;  bit ack;
    
	i2c_Start ();	
	i2c_Write_Byte ( DS1307_WR );
	i2c_Write_Byte ( DS1307_CalReg );
	i2c_Stop ();

	i2c_Start ();	
	i2c_Write_Byte ( DS1307_RD );
	ack = I2C_ACK;
	for ( i = sizeof( STDS1307 ); i > 0; i-- )
	{
		if ( i == 1 ) ack = I2C_NACK;
		*t++ = i2c_Read_Byte ( ack );
	}
	i2c_Stop ();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -