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

📄 ds1302.c

📁 ds1302源程序 ds1302源程序
💻 C
字号:
/* DS1302 驱动程序 2005/08/17整理 */
/* DS1302 驱动程序 2006/12/06整理AVR_AFA */

//接口定义 
// PD5: RST 
// PD6: I/O 
// PD7: CLK 

unsigned char AA; 

/********************************************************************  
 函 数 名:RTInputByte() 
 功    能:实时时钟写入一字节 
 说    明:往DS1302写入1Byte数据 (内部函数) 
 入口参数:d 写入的数据  
 返 回 值:无   
 ***********************************************************************/ 
void RTInputByte(unsigned char  x) {

	unsigned char i; 
	for (i = 0; i < 8; i ++) {
		if (x&(1<<i)) {
			PORTD |= (1<<6);
			}
		else {
			PORTD &= ~(1<<6);
			}
		PORTD |= (1<<7);
		PORTD &= ~(1<<7);
		}
}

/********************************************************************  
 函 数 名:RTOutputByte() 
 功    能:实时时钟读取一字节 
 说    明:从DS1302读取1Byte数据 (内部函数) 
 入口参数:无   
 返 回 值:ACC 
 ***********************************************************************/ 
unsigned char RTOutputByte(void) {

	unsigned char i,k;
	DDRD &= ~(1<<6);
	for (i = 0; i < 8; i ++) {
		k = (PIND & (1<<6));    	/*读数据,从低位开始  */
		if (k) {
			AA|=(1<<i);
			}
		else {
			AA&=~(1<<i);
			}
		}
	PORTD |= (1<<7);
	PORTD &= ~(1<<7);
	DDRD |= (1<<6);
	return AA;
}

/********************************************************************  
 函 数 名:W1302() 
 功    能:往DS1302写入数据 
 说    明:先写地址,后写命令/数据 (内部函数) 
 调    用:RTInputByte() , RTOutputByte() 
 入口参数:ucAddr: DS1302地址, ucData: 要写的数据 
 返 回 值:无 
 ***********************************************************************/ 
void W1302(unsigned char ucAddr, unsigned char ucDa) {

	PORTD &= ~(1<<5);			/* RST  to L */
	PORTD &= ~(1<<7);			/* CLK  to L */
	PORTD |= (1<<5);			/* RST  to H */
	
	RTInputByte(ucAddr);		/* 地址,命令 */
	RTInputByte(ucDa);			/* 写1Byte数据*/ 

	PORTD |= (1<<7);			/* CLK  to H */
	PORTD &= ~(1<<5);			/* RST  to L */
} 

/********************************************************************  
 函 数 名:R1302() 
 功    能:读取DS1302某地址的数据 
 说    明:先写地址,后读命令/数据 (内部函数) 
 调    用:RTInputByte() , RTOutputByte() 
 入口参数:ucAddr: DS1302地址 
 返 回 值:ucData :读取的数据 
***********************************************************************/ 
unsigned char R1302(unsigned char ucAddr) {

	unsigned char ucData;
	PORTD &= ~(1<<5);			/* RST  to L */
	PORTD &= ~(1<<7);			/* CLK  to L */
	PORTD |= (1<<5);			/* RST  to H */
	RTInputByte(ucAddr);		/* 地址,命令 */ 
	ucData = RTOutputByte();	/* 读1Byte数据 */ 

	PORTD |= (1<<7);			/* CLK  to H */
	PORTD |= (1<<7);
	PORTD &= ~(1<<5);			/* RST  to L */
	return ucData;
} 

⌨️ 快捷键说明

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