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

📄 ds1302.c

📁 spi协议
💻 C
字号:
/********************** ds1302-spi基本操作函数******************************
[文件名] ds1302.c+ds1302.H+spi.c+spi.h+ASMselect.h
[版本] TV.1
[创建] 阿春x
[修正] 阿春x
[最后修改时间] 	2006.04.24 16:00
[验 正 时  间]		2006.04.24 16:00
[功能说明]指定地址1 byte 数据正确读写.和day and timer data read
参数:片选io口,8 bit 地址,8 bit 数据
***************************************************************************/

#include "ASMselect.h "
#if ASMds1302
#include "reg51x.h"
#include "tab.h"
#include "ds1302.h"
#include "spi.h"
#include "ioprot.h"
#include <stdio.h>
//sbit CS_ds1302=P1^4;	
//all write =addr,read reg=addr+1;
//=======================================
ds1302init(){//disable write protect and seconds star
	uchar ucclockstop;
	DS1302_write_1byte(W_PROTECT_addr,00);	//disable write protect
	DS1302_write_1byte(Charger_addr,00);		//not charger ,
		//DS1302_write_1byte(Charger_addr,0xa7);//R=8k  (5-0.7v)/8k=0.5mA(charger),0xA5 =2.2mA
	ucclockstop=DS1302_read_1byte(seconds_addr);
	printf("ch=%bx\n",ucclockstop);
	if((ucclockstop&0x80)!=0){		//if seconds stop(seconds_addr^7 bit=1) ,star second ret  
		DS1302_write_1byte(seconds_addr, 00);		//set seond star	
		ucclockstop=DS1302_read_1byte(seconds_addr);
		printf("ch=%bx\n",ucclockstop);
	}
}
//=========================================
bit DS1302_write_1byte(uchar addr,uchar datax){
uchar rxdata1, i;
CS_ds1302=0;
for(i=0;i<4;i++){
	CS_ds1302=1;			//tx 8 bit addr and 8 bit data
	SPI_write_8bit(addr);		
	SPI_write_8bit(datax);
	CS_ds1302=0;
	CS_ds1302=1;
	SPI_write_8bit(addr+1);	//rx data
	rxdata1=SPI_read_8bit();
	CS_ds1302=0;
	if(rxdata1==datax){		//write to ship right?
		#if debug
		printf("write ok\n");
		#endif
		return(1);
		}
}
#if debug
printf("write error\n");
#endif
return(0);
}
//=======================================
uchar DS1302_read_1byte(uchar addr){
uchar rxdata1,rxdata2,i;
CS_ds1302=0;
for(i=0;i<4;i++){
	CS_ds1302=1;			//read first data
	SPI_write_8bit(addr+1);
	rxdata1=SPI_read_8bit();
	CS_ds1302=0;
	CS_ds1302=1;			//read second data
	SPI_write_8bit(addr+1);
	rxdata1=SPI_read_8bit();
	CS_ds1302=0;
	if(rxdata1==rxdata2)return(rxdata1);//read data right?
}
}
//==========================================
bit DS1302_rxtime(uchar *rxdata){//read data :year,month,date,week,hour,minutes and second.
	*rxdata=(DS1302_read_1byte(hour_addr))&0x3f;//hour
	rxdata++;		
	*rxdata=DS1302_read_1byte(minutes_addr);//minute
	rxdata++;
	*rxdata=(DS1302_read_1byte(seconds_addr))&0x7f;//second
	rxdata++;
	*rxdata=DS1302_read_1byte(year_addr);//year		
	rxdata++;
	*rxdata=DS1302_read_1byte(month_addr);//month
	rxdata++;
	*rxdata=DS1302_read_1byte(date_addr);//day
	rxdata++;rxdata++;rxdata++;
	*rxdata=DS1302_read_1byte(week_addr);//week
	return 1;
	}
//==========================================
#endif

⌨️ 快捷键说明

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