void v_RTInputByte(uchar ucDa) //写
{
uchar i;
ACC=ucDa;
for(i=8;i>0;i--)
{
if((ACC&0x01)==1)
//T_IO=ACC0; /* 相当于汇编中的RRC */
T_IO=1;
else T_IO=0;//if((ACC&0x01)==0)
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
}
uchar uc_RTOutputByte(void) //读
{
uchar i,ACC;
ACC=0;
for(i=0;i<8;i++)
{
ACC=ACC>>1; /*相当于汇编中的RRC*/
if(T_IO==1)
ACC=ACC|0x80;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
void v_W1302(uchar ucAddr,uchar ucDa) //指定地址写数据
{
T_RST=0;
T_CLK=0;
T_RST=1;
v_RTInputByte(ucAddr); /*地址,命令*/
v_RTInputByte(ucDa); /*写1Byte数据*/
T_CLK=1;
T_RST=0;
}
uchar uc_R1302(uchar ucAddr) //指定地址读数据
{
unsigned char ucDa,k; //BCD转换成16进制
k=0x00;
T_RST=0;
T_CLK=0;
T_RST=1;
v_RTInputByte(ucAddr); /*地址,命令*/
ucDa=uc_RTOutputByte(); /*读取1Byte数据*/
T_CLK=1;
T_RST=0;
k=ucDa/16;
ucDa=ucDa%16;
ucDa=ucDa+k*10;
return(ucDa);
}
void v_Set1302()//uchar *pSecDa) 设置初始时间值
{
uchar i,j;
uchar ucAddr=0x80; //秒写地址
v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i=0;i<7;i++) //连续写入7个时间
{
j=ucCurtime[i]; //代入初始时间
v_W1302(ucAddr,j); /* 秒 分 时 日 月 星期 年 */
ucAddr +=2; //地址+2
}
v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}
void v_Get1302() //记录时间
{
uchar i;
uchar ucAddr=0x81; //秒读地址
for (i=0;i<7;i++) //连续读数据
{
ucCurtime[i]=uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr +=2;
}
}
void v_RTInputByte(uchar ucDa) //写
{
uchar i;
ACC=ucDa;
for(i=8;i>0;i--)
{
if((ACC&0x01)==1)
//T_IO=ACC0; /* 相当于汇编中的RRC */
T_IO=1;
else T_IO=0;//if((ACC&0x01)==0)
T_CLK=1;
T_CLK=0;
ACC=ACC>>1;
}
}
uchar uc_RTOutputByte(void) //读
{
uchar i,ACC;
ACC=0;
for(i=0;i<8;i++)
{
ACC=ACC>>1; /*相当于汇编中的RRC*/
if(T_IO==1)
ACC=ACC|0x80;
T_CLK=1;
T_CLK=0;
}
return(ACC);
}
void v_W1302(uchar ucAddr,uchar ucDa) //指定地址写数据
{
T_RST=0;
T_CLK=0;
T_RST=1;
v_RTInputByte(ucAddr); /*地址,命令*/
v_RTInputByte(ucDa); /*写1Byte数据*/
T_CLK=1;
T_RST=0;
}
uchar uc_R1302(uchar ucAddr) //指定地址读数据
{
unsigned char ucDa,k; //BCD转换成16进制
k=0x00;
T_RST=0;
T_CLK=0;
T_RST=1;
v_RTInputByte(ucAddr); /*地址,命令*/
ucDa=uc_RTOutputByte(); /*读取1Byte数据*/
T_CLK=1;
T_RST=0;
k=ucDa/16;
ucDa=ucDa%16;
ucDa=ucDa+k*10;
return(ucDa);
}
void v_Set1302()//uchar *pSecDa) 设置初始时间值
{
uchar i,j;
uchar ucAddr=0x80; //秒写地址
v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i=0;i<7;i++) //连续写入7个时间
{
j=ucCurtime[i]; //代入初始时间
v_W1302(ucAddr,j); /* 秒 分 时 日 月 星期 年 */
ucAddr +=2; //地址+2
}
v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}
void v_Get1302() //记录时间
{
uchar i;
uchar ucAddr=0x81; //秒读地址
for (i=0;i<7;i++) //连续读数据
{
ucCurtime[i]=uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr +=2;
}
}
举报