📄 ds1302.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 + -