DS3231最高精度时钟模块,IIC,C51 8051单片机I2C 测试程序 【开源】

这篇博客介绍了如何使用DS3231高精度时钟模块进行IIC通信,详细讲解了与8051单片机的I2C测试过程,包括原理图、效果展示和时序图。还提供了写数据和读数据的图示,并提及了Ver2.0的更新内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实物图

 

 

 

 

原理图

效果图

程序烧录:

 

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(); 
} 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值