附上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; //禁止写入 }
附上程序,大家抽个空帮我看看!谢谢了 |
|