我正在参加一个从实践中学会单片机的活动,要求用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); //返回读取数据; }
|