打印

求救????DS1302读不到数据...

[复制链接]
3607|5
手机看帖
扫描二维码
随时随地手机跟帖
沙发
sanoboy|  楼主 | 2008-4-18 15:43 | 只看该作者

附上DS1302读写程序,总是读出0xff


#define  MSB       0x80
#define  LSB       0x01
#define  DS1302_WP    0x8E
#define  DSWP_ENABLE  TimeSpiWrite(DS1302_WP,0X00)
#define  DSWP_DISENABLE  TimeSpiWrite(DS1302_WP,0x80)

sbit TIMECLK=P1^0;/*时钟线引脚 */
sbit TIMEIO=P1^1; /*数据线引脚 */
sbit TIMERST=P1^2;/*复位线引脚 */

uchar set_rtc_code[7]={0x00,0x30,0x18,0x04,0x16,0x06,0x05};
uchar write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; 
uchar read_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};
uchar read_rtc_code[7]={0};

//打开DS1302
void TimeSpiOpen(void)
{
  TIMECLK = 0;
  TIMERST = 0;//禁止DS1302
  TIMEIO  = 1;//释放数据总线
  TIMERST = 1;//使能DS1302
}

//关闭DS1302
void TimeSpiClose(void)
{
  TIMERST = 0;//禁止DS1302
  TIMEIO  = 1;//释放数据总线
  TIMECLK = 1;
}

//写DS1302
void TimeSpiWriteByte(uchar temp)
{
 uchar i;
 for (i=0;i<8;i++)      //循环8次 写入数据
  { 
     TIMECLK = 0;
     TIMEIO  =temp&LSB;      //每次传输低字节      
     temp>>=1;    //右移一位
     TIMECLK =1;
   }


//写DS1302(确定地址,确定数据)
/****************************************************************************/
void TimeSpiWrite(uchar address,uchar dat )     
{
  TimeSpiOpen(); //启动
  TimeSpiWriteByte(address); //发送地址
  TimeSpiWriteByte(dat);  //发送数据
  TimeSpiClose();    //恢复
}

//读DS1302
/****************************************************************************/
uchar TimeSpiRead(uchar address)
{
 uchar i,temp=0x00;
 TimeSpiOpen();
 TimeSpiWriteByte(address);
 for (i=0;i<8;i++)   //循环8次 读取数据
 {
  ACC = ACC >>1; 
ACC7 = TIMEIO;
_nop_();_nop_();
TIMECLK = 1;
TIMECLK = 0;
 } 
 TimeSpiClose();
 return (ACC);
}


//读取 日历
/****************************************************************************/
void ReadRTC()  
{
 unsigned char i,*p;
 p=read_rtc_address;  //地址传递
 for(i=0;i<7;i++)  //分7次读取 年月日时分秒星期
 {
  read_rtc_code=TimeSpiRead(*p);
  p++;
 }


//设定 日历
/***********************************************************************/
void SetRTC()  
{
 unsigned char i,*p;
 p=write_rtc_address; //传地址 
 for(i=0;i<7;i++)  //7次写入 年月日时分秒星期
 {
  TimeSpiWrite(*p,set_rtc_code);
  p++;  
 }
}  

//初始化
/****************************************************************************/
void InitDs1302(void)      

 
 DSWP_ENABLE;  //开禁止 写入数据
 SetRTC();   //设定
 DSWP_DISENABLE;   //禁止写入
}

附上程序,大家抽个空帮我看看!谢谢了

使用特权

评论回复
板凳
dai_weis| | 2008-4-19 13:30 | 只看该作者

又是一大堆程序要看

你因该确认一下DS1302是否正常工作,是否在休眠状态,DS1302的晶体是否正常震荡,是否对1302作了初始化以使其进入工作状态

使用特权

评论回复
地板
与时俱进| | 2010-3-18 21:35 | 只看该作者
我也遇到这个问题,奇怪。

使用特权

评论回复
5
wdyang| | 2010-7-19 20:46 | 只看该作者
3# dai_weis
请问一下 前辈 :如果1302时钟程序能在软件上仿真通过,证明程序应该没有问题。但是输入到硬件电路中就 根本没有反应,这应该是什么原因啊。是不是晶振没有起振,如果是,有什么解决方法啊? 万望前辈 指教一二.......
(硬件电路1602连接没有问题,就怕晶振哪里连接不正确,除了rst,clk,io,正电源,地线连接好外,就连接了晶振。外加个电容也没有显示)
谢谢.....

使用特权

评论回复
6
wulitou| | 2013-8-2 18:03 | 只看该作者
看到这个帖子虽然时间已经很久。但本人菜鸟一枚最近在调试这个芯片!!也有这个问题!!希望大神指点一二

使用特权

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

本版积分规则

3

主题

4

帖子

0

粉丝