首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

请教关于DS1302时钟程序设计的问题

请教关于DS1302时钟程序设计的问题

我正在参加一个从实践中学会单片机的活动,要求用51单片机设计一个DS1302时钟程序。

这是活动的地址和详细的要求 http://bbs.cepark.com/thread-5032-1-1.html

我在设计过程中遇到无法读出DS1302内部数据问题,读出来的数据是错误的.

下面我把读写程序发出来,大家帮我看看是哪地方出了问题...是不是时序或别的什么方面...

希望高手进行指导。呵呵,只有从实践中才能学会单片机,这也是我第一次认真做这类开发,对回帖的人先谢过!

void Write_DS_Byte(uint8 Command,uint8 Write_Data)
{
uint8 i=0;
DS_CE=0;
DS_IO=0;
DS_SCK=0; //初始化各端口;
for(i=0;i<8;i++) //写入8位命令;
{
DS_CE=1;
DS_IO=Command&0x01; //并行数据转为串行;
DS_SCK=0;
_nop_();
DS_SCK=1;
Command>>=1; //送下一位串行数据;
}
for(i=0;i<8;i++) //写入8位数据;
{
DS_CE=1;
DS_IO=Write_Data&0x01; //并行数据转为串行;
DS_SCK=0;
_nop_();
DS_SCK=1;
Write_Data>>=1; //送下一位串行数据;
}
DS_CE=0; //禁止传输;
}

uint8 Read_DS_Byte(uint8 Command)
{
uint8 Value=0;
uint8 i=0;
DS_CE=0;
DS_IO=0;
DS_SCK=0;
for(i=0;i<8;i++) //写命令进DS1302内部;
{
DS_CE=1;
DS_IO=Command&0x01; //送8位数据;
DS_SCK=0;
_nop_();
DS_SCK=1;
Command>>=1; //数据移位;
}
for(i=0;i<8;i++) //读取DS1302返回的数据;
{
DS_SCK=1;
DS_SCK=0;
if(DS_IO!=0) //把串行数据转为并行;
{
Value|=0x01<<i; //移位 ;
}
//Value>>=1;
}
DS_CE=0;
return (Value); //返回读取数据;
}


请严格按照datasheet里面的时序来操作

支持楼上的说法

返回列表