单片机时钟ds1302_单片机时钟电路「建议收藏」

单片机时钟ds1302_单片机时钟电路「建议收藏」SD3077时钟芯片驱动编写及初始时间读写、用户RAM数据读写功能测试_sd3077

一、前言       

        前面辛辛苦苦找了一堆资料关于SD3077时钟(给我找麻了,资料很多但几乎都是是要币的),肝胆了一晚上找到了一个免费的资料获取方式SD3077、SD3078时钟芯片数据手册、例程单片机驱动SD3077时钟芯片,既然资料找到了那就动手看看实际效果。

二、硬件部分

         我这里控制端用的是南京沁恒微电子的CH579主控,芯片资料和例程他们官网有可以直接下载我这里就不再解释了。至于硬件电路很简单就CH579最小主控 + SD3077参考电路(数据手册15页中部),显示部分手上没东西就用串口调试把数据打印出来。

三、驱动部分(参照芯片数据手册)       

1、SD3077时钟芯片驱动——开始、停止信号时序分析

单片机时钟ds1302_单片机时钟电路「建议收藏」

        开始,停止时序如上图,这里就不解释(有点太基础了)代码如下:

开始信号:

/*********************************************
 * 函数名:IIC_Start_SD3077
 * 描  述:开启IIC总线
 * 输  入:无
 * 输  出:无
 ********************************************/
static UINT8 IIC_Start_SD3077(void)
{
	SDA_OUT_SD3077();     //sda线输出
	IIC_SDA_H_SD3077;	  	  
	IIC_SCL_H_SD3077;
	mDelayuS(4);
	if(!READ_SDA_SD3077)    return FALSE;	//SDA线为低电平则总线忙,退出
 	IIC_SDA_L_SD3077;    //START:when CLK is high,DATA change form high to low 
	mDelayuS(4);
	while(READ_SDA_SD3077)    return FALSE; 
	IIC_SCL_L_SD3077;    //钳住IIC总线,准备发送或接收数据
	mDelayuS(4);
	return TRUE;	
}

停止信号: 

/*********************************************
 * 函数名:IIC_Stop_SD3077
 * 描  述:释放IIC总线
 * 输  入:无
 * 输  出:无
 ********************************************/
static void IIC_Stop_SD3077(void)
{
    SDA_OUT_SD3077();    //sda线输出
	IIC_SCL_L_SD3077;
	IIC_SDA_L_SD3077;    //STOP:when CLK is high DATA change form low to high
	mDelayuS(4);
	IIC_SCL_H_SD3077; 
	IIC_SDA_H_SD3077;    //发送IIC总线结束信号
	mDelayuS(4);
}

2、SD3077时钟芯片驱动——数据传输准备(应答信号)

         IIC是按字节来传输的,当每传输完一个字节的数据,后面必须紧跟一个校验位,这个校验位是接收端通过控制SDA(数据线)来实现的,以提醒发送端数据我这边已经接收完成。(SDA=0为ACK 接收完成 ;SDA=1为NACK 繁忙中;)
        主机应答: 传输完一个字节数据以后(数据传输方向:从机——>主机),主机控制(此时是接收端)SDA来提醒从机(发送端)我这边接受完成;
        从机应答: 传输完一个字节数据以后(数据传输方向:主机——>从机),从机控制(此时是接收端)SDA来提醒主机(发送端)我这边接受完成

单片机时钟ds1302_单片机时钟电路「建议收藏」

/*********************************************
 * 函数名:IIC_Ack_SD3077
 * 描  述:发送ASK
 * 输  入:无
 * 输  出:无
 ********************************************/
static void IIC_Ack_SD3077(void)
{
	IIC_SCL_L_SD3077;
	SDA_OUT_SD3077();
	IIC_SDA_L_SD3077;
	mDelayuS(4);
	IIC_SCL_H_SD3077;
	mDelayuS(4);
	IIC_SCL_L_SD3077;
}
/*********************************************
 * 函数名:IIC_NAck_SD3077
 * 描  述:发送NOASK
 * 输  入:无
 * 输  出:无
 ********************************************/
static void IIC_NoAck_SD3077(void)
{
	IIC_SCL_L_SD3077;
	SDA_OUT_SD3077();
	IIC_SDA_H_SD3077;
	mDelayuS(2);
	IIC_SCL_H_SD3077;
	mDelayuS(2);
	IIC_SCL_L_SD3077;
}
/

今天的文章单片机时钟ds1302_单片机时钟电路「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/67560.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注