实物图
原理图
效果图
程序烧录:
DS3231时序图
【图】写数据
【图】读数据
/*****************************************************************************
*文件名称:main.c
*版 本:Keil uVision4
*控 制 器:STC89C52RC/12M
功能:显示时间到串口
*说 明:
1,DS3231实时时钟模块测试程序
2,1T的单片机用不了
3,晶振12M
4,串口波特率2400
编译结果:
Rebuild target 'Demo_DS3231'
compiling main.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR?_UART_SENDBYTE?MAIN
Program Size: data=61.2 xdata=0 code=2059
creating hex file from "Demo_DS3231"...
"Demo_DS3231" - 0 Error(s), 1 Warning(s).
*****************************************************************************/
#include <reg52.h>
#include <stdio.h>
#include "intrins.h"
//#define Effective 0x01
//#define Ineffectiveness 0x00
#define DS3231WriteAddress 0xd0
#define DS3231ReadAddress 0xd1
//#define DS3231_SecondRegister 0x00
#define DS3231_TimeFirstRegister 0x00
#define DS3231_MinuteRegister 0x01
#define DS3231_HourRegister 0x02
#define DS3231_WeekRegister 0x03
#define DS3231_DayRegister 0x04
#define DS3231_MonthRegister 0x05
#define DS3231_YearRegister 0x06
#define DS3231_InterruptRegister 0x0e
#define DS3231_AlarmRegister 0x0f
#define DS3231_ResetSCL() DS3231_scl = 0
#define DS3231_SetSCL() DS3231_scl = 1
#define DS3231_ResetSDA() DS3231_sda = 0
#define DS3231_SetSDA() DS3231_sda = 1
#define DS3231_ReadPinSDA() DS3231_sda
#define Time0_TH0 0xec //定义计数器0计数寄存器装载的高8位值
#define Time0_TL0 0x78 //定义计数器0计数寄存器装载的低8位值
//--------------------------秒-分-时-星期-日-月-年
unsigned int SetTime[] = {12,12,12,1,1,1,15};
unsigned int CurrentT[7];
bit Flag_Collect = 0; //定义采集扫描标志变量
unsigned char SweepInterval_Collect; //定义采集扫描时间累加变量
sbit DS3231_scl = P2^1; //DS3231 clock
sbit DS3231_sda = P2^0; //DS3231 data
void DS3231_Delay(void) { //DS3231通信速率延时,延时5微秒 12T单片机@12M
unsigned char Number = 8;
while (Number--) {
_nop_();
_nop_();
}
}
void DS3231_DelayForWrite(void){ //DS3231写字节延时,延时5毫秒 12T单片机@12M
unsigned int Number = 2500;
while (Number--){
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void DS3231_Start(void) { //模拟DS3231通信开始信号,SCL=1期间,在SDA上产生一个下降沿
DS3231_SetSDA();
DS3231_SetSCL();DS3231_Delay();
DS3231_ResetSDA();DS3231_Delay();
}