Ejemplo n.º 1
0
//是否写入保护
void DS1302_SetProtect(bit Flag)
{
	if(Flag)
		Write1302(0x8E,0x80);  //0x8e控制字节地址,bit7=WP WP=1 禁止数据写入DS1302
	else
		Write1302(0x8E,0x00);  //WP=0 允许数据写入DS1302
}
Ejemplo n.º 2
0
/*
写DS1302中的RAM
addr:地址,从0到30,共31个字节的空间
data:要写的数据
*/
void WriteDS1302Ram(uint8_t addr,uint8_t data)
{
	uint8_t	tmp;

	Write1302(DS1302_WRITE,0x00);		//关闭写保护
	tmp = (addr<<1)|0xc0;
	Write1302(tmp,data);
	Write1302(DS1302_WRITE,0x80);		//打开写保护
}
/*
写DS1302中的RAM
addr:地址,从0到30,共31个字节的空间
data:要写的数据
*/
void WriteDS1302Ram(u8 addr,u8 data)
{
	u8	tmp;

	Write1302(DS1302_WRITE,0x00);		//关闭写保护
	tmp = (addr<<1)|0xc0;
	Write1302(tmp,data);
	Write1302(DS1302_WRITE,0x80);		//打开写保护
}
Ejemplo n.º 4
0
/*****************************************************
函数功能:根据命令字,向1302写一个字节数据
入口参数:Cmd,储存命令字;dat,储存待写的数据
***************************************************/ 
void Ds1302_Write_Byte(UINT8 Cmd,UINT8 dat)
{
    DS1302_RST = 0;
    DS1302_CLK = 0;
    DS1302_RST = 1; 
    Write1302(Cmd);       	// 地址,命令 
    Write1302(dat);       	// 写1Byte数据
    DS1302_CLK = 1;
    DS1302_RST = 0;                  //RST 0->1->0,CLK 0->1
}
Ejemplo n.º 5
0
/*****************************************************
函数功能:根据命令字,向1302写一个字节数据
入口参数:Cmd,储存命令字;dat,储存待写的数据
***************************************************/ 
void WriteSet1302(uchar Cmd,uchar dat)
 {	  
        RST=0;           //禁止数据传递
        SCLK=0;          //确保写数居前SCLK被拉低
	    RST=1;           //启动数据传输
	    Delaynus(5);     //稍微等待,使硬件做好准备
	    Write1302(Cmd);  //写入命令字
	    Write1302(dat);  //写数据
	    SCLK=1;          //将时钟电平置于高电平状态
	    RST=0;           //禁止数据传递
 }
Ejemplo n.º 6
0
//设置时间函数
void DS1302_SetTime(unchar Address, unchar Value)
{
	DS1302_SetProtect(0);
	Write1302(Address,((Value/10)<<4|(Value%10)));
	DS1302_SetProtect(1);
	
}
void InitClock(void)
{
	u8	tmp = 0;

	DS1302_Configuration();
	tmp = ReadDS1302Ram(0);
	
	if(tmp != 0x25)
	{
		WriteDS1302Ram(0,0x25);
		Write1302(DS1302_WRITE,0x00);		//关闭写保护
		Write1302(0x90,0x03);				//禁止涓流充电
		Write1302(DS1302_HOUR,0x00);		//设置成24小时制
		Write1302(DS1302_SECOND,0x00);		//使能时钟运行		
		Write1302(DS1302_WRITE,0x80);		//打开写保护
		WriteDS1302ClockASCII("20160115023500");
	}
		//WriteDS1302ClockASCII("20140116084000");
}
Ejemplo n.º 8
0
/*****************************************************
函数功能:根据命令字,从1302读取一个字节数据
入口参数:Cmd
***************************************************/ 
uchar  ReadSet1302(uchar Cmd)
 {
  uchar dat;
  RST=0;                 //拉低RST
  SCLK=0;                //确保写数居前SCLK被拉低
  RST=1;                 //启动数据传输
  Write1302(Cmd);       //写入命令字
  dat=Read1302();       //读出数据
  SCLK=1;              //将时钟电平置于已知状态
  RST=0;               //禁止数据传递
  return dat;          //将读出的数据返回
}
Ejemplo n.º 9
0
/*****************************************************
函数功能:根据命令字,从1302读取一个字节数据
入口参数:Cmd
***************************************************/ 
UINT8  Ds1302_Read_Byte(UINT8 Cmd)
{
    UINT8 ucData;
    DS1302_RST = 0;
    DS1302_CLK = 0;
    DS1302_RST = 1;                //enable
    Write1302(Cmd|0x01);     // 地址,命令 
    ucData = Read1302();   // 读1Byte数据
    DS1302_CLK = 1;                //RST 0->1->0,CLK 0->1
    DS1302_RST = 0;                    
    return(ucData);
}
Ejemplo n.º 10
0
/*
写时间函数,顺序为:年周月日时分秒
*/
void WriteDS1302Clock(uint8_t *p)
{
	Write1302(DS1302_WRITE,0x00);		//关闭写保护
	DS1302_OUT();
	DS1302_RST_L();
	DS1302_CLK_L();
	DS1302_RST_H();
	delay_nus(4); 
	DS1302SendByte(0xbe);				//突发模式
	DS1302SendByte(p[5]);				//秒
	DS1302SendByte(p[4]);				//分
	DS1302SendByte(p[3]);				//时
	DS1302SendByte(p[2]);				//日
	DS1302SendByte(p[1]);				//月
	DS1302SendByte(0x01);				//周,设置成周一,没有使用
	DS1302SendByte(p[0]);				//年
	DS1302SendByte(0x80);				//保护标志字节
	delay_nus(4); 
	DS1302_RST_L();
}
Ejemplo n.º 11
0
void InitClock(void)
{
	uint8_t	tmp;
	uint8_t flag;

	flag=Read1302(0x81);
	if(flag&0x80)
	{      //判断时钟芯片是否关闭
	  Write1302(0x8E,0x00);                 //根据写状态寄存器命令字,写入不保护指令 
   	Write1302(0x80,((51/10)<<4|(51%10)));   //根据写秒寄存器命令字,写入秒的初始值
	Write1302(0x82,((2/10)<<4|(2%10)));   //根据写分寄存器命令字,写入分的初始值
	Write1302(0x84,((12/10)<<4|(12%10))); //根据写小时寄存器命令字,写入小时的初始值
	Write1302(0x86,((27/10)<<4|(27%10))); //根据写日寄存器命令字,写入日的初始值
	Write1302(0x88,((7/10)<<4|(7%10))); //根据写月寄存器命令字,写入月的初始值
	Write1302(0x8c,((15/10)<<4|(15%10)));  //根据写年寄存器命令字,写入年的初始值
	Write1302(0x8E,0x80);			   //根据写状态寄存器命令字,写入保护指令
  }
	
	
	tmp = ReadDS1302Ram(0);
	if(tmp^0xa5)
	{
		WriteDS1302Ram(0,0xa5);
		Write1302(DS1302_WRITE,0x00);		//关闭写保护
		Write1302(0x90,0x03);				//禁止涓流充电
		Write1302(DS1302_HOUR,0x00);		//设置成24小时制
		Write1302(DS1302_SECOND,0x00);		//使能时钟运行
		
		
		Write1302(DS1302_WRITE,0x80);		//打开写保护
	}
}