📄 ds1307.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 + -