打印

DS1302时钟电路

[复制链接]
1903|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZYX29|  楼主 | 2010-2-8 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近写了个DS1302的时钟程序,很是郁闷,读出的数据是个固定的值,参考了别人的程序,感觉我理解的没问题,不知各位有什么高见,下面为读写部分,请各位指教

//管脚定义sbit SCLK = P3^5;
// DS1302时钟信号
7脚
sbit DIO= P3^6;
// DS1302数据信号

6脚
sbit CE = P3^7;
// DS1302片选
5脚
//地址、数据发送子程序void Write1302 ( unsigned char addr,dat )
{
unsigned
char i,temp;

CE=
0;
//CE引脚为低,数据传送中止

SCLK=
0;
//清零时钟总线

CE =
1;
//CE引脚为高,逻辑控制有效

//发送地址

for ( i=8; i>0; i-- ) //循环8次移位

{

SCLK =
0;

temp = addr;

DIO = (bit)(temp&
0x01);
//每次传输低字节

addr >>=
1;
//右移一位

SCLK =
1;

}

//发送数据
for ( i=8; i>0; i-- )

{

SCLK =
0;

temp = dat;

DIO = (bit)(temp&
0x01);

dat >>=
1;


SCLK =
1;

}

CE =
0;
} //数据读取子程序unsigned char Read1302 ( unsigned char addr ){
unsigned
char i,temp,dat1,dat2;

CE=
0;

SCLK=
0;

CE =
1;

//发送地址

for ( i=8; i>0; i-- )
//循环8次移位

{

SCLK =
0;

temp = addr;

DIO = (bit)(temp&
0x01);
//每次传输低字节

addr >>=
1;
//右移一位

SCLK =
1;

}

//读取数据

for ( i=8; i>0; i-- )

{

ACC_7=DIO;

SCLK =
0;

ACC>>=
1;

SCLK =
1;

}

CE=
0;

dat1=ACC;

dat2=dat1/
16;
//数据进制转换

dat1=dat1%
16;
//十六进制转十进制

dat1=dat1+dat2*
10;

return (dat1);
}

相关帖子

沙发
computer00| | 2010-2-8 16:30 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

16

帖子

0

粉丝