| 使用同样的读写程序和其他硬件进行更换计时芯片做了如下实验 sbit DS1302_CLK = P2^5;    //实时时钟时钟线引脚7
 sbit DS1302_IO = P2^6;    //实时时钟数据线引脚6
 sbit DS1302_RST = P2^7;    //实时时钟复位线引脚5
 //定义累加器A中的各位
 sbit a0 = ACC^0;
 sbit a1 = ACC^1;
 sbit a2 = ACC^2;
 sbit a3 = ACC^3;
 sbit a4 = ACC^4;
 sbit a5 = ACC^5;
 sbit a6 = ACC^6;
 sbit a7 = ACC^7;
 
 unsigned char DS1302_ReadByte(void)//-DS1302写入字节(底层协议)
 {
 DS1302_IO = 1;
 a0 = DS1302_IO;
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 a1 = DS1302_IO;
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 a2 = DS1302_IO;
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 a3 = DS1302_IO;
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 a4 = DS1302_IO;
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 a5 = DS1302_IO;
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 a6 = DS1302_IO;
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 a7 = DS1302_IO;
 return(ACC);
 }
 /****************************************************************************************************************/
 void write_time_byte(unsigned char dd)//向DS1302写1字节数据
 { //-1302驱动程序(底层协议)
 ACC = dd;
 DS1302_IO = a0;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 DS1302_IO = a1;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 DS1302_IO = a2;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 DS1302_IO = a3;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 DS1302_IO = a4;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 DS1302_IO = a5;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 DS1302_IO = a6;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 DS1302_IO = a7;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 DS1302_CLK = 0;
 }
 /****************************************************************************************************************
 函数名:常用时钟数据写
 调 用:write_clock();
 参 数:无
 返回值:无
 结 果:
 备 注:适用于DS1302芯片+32.768KHz6pF晶体
 /****************************************************************************************************************/
 void v_W1302(uchar add,uchar dat) //-DS1302写数据(底层协议)
 {
 DS1302_RST = 0;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 DS1302_RST = 1;
 _nop_();
 write_time_byte(add);
 _nop_();
 write_time_byte(dat);
 _nop_();
 DS1302_RST = 0;
 _nop_();
 DS1302_CLK = 1;
 }
 /****************************************************************************************************************
 函数名:常用时钟数据读取
 调 用:read_clock();
 参 数:无
 返回值:无
 结 果:
 备 注:适用于DS1302芯片+32.768KHz6pF晶体
 /****************************************************************************************************************/
 uchar uc_R1302(uchar add)//-DS1302读数据(底层协议)
 {
 unsigned char dat;
 DS1302_RST = 0;
 _nop_();
 DS1302_CLK = 0;
 _nop_();
 DS1302_RST = 1;
 _nop_();
 write_time_byte(add | 0x01);//地址,命令
 _nop_();
 dat = DS1302_ReadByte();//读1Byte数据
 _nop_();
 DS1302_RST = 0;
 _nop_();
 DS1302_CLK = 1;
 _nop_();
 return(dat);
 }
 
 使用DIP-8封装   X B价¥ 0.45
 正面丝印为:
 DS1302
 1308A4
 .+102BN
 运行1小时后快4秒
 今天 5月29日用DELL台式电脑的USB供电用视波器测下IC的 3脚出现了怪问题
 F0000TEK-DIP8未与MCU通信时
 
 F0000TEK-DIP8未与MCU通信时   
 F0001TEK-DIP8与MCU=4Mhz通信时
 
 F0001TEK-DIP8与MCU=4Mhz通信时   
 F0002TEK-DIP8与MCU=8Mhz通信时
 
 F0002TEK-DIP8与MCU=8Mhz通信时   
 F0003TEK-DIP8与MCU=12Mhz通信时
 
 F0003TEK-DIP8与MCU=12Mhz通信时   
 F0004TEK-DIP8与MCU=22.1184Mhz通信时
 
 F0004TEK-DIP8与MCU=22.1184Mhz通信时   
 MCU=22.1184主程序就一直读DS1302的其中一个寄存器时
 
 MCU=22.1184主程序就一直读DS1302的其中一个寄存器时   
 使用SOP-8封装 非自己购买不知何价,但看上去跟0.73元一片的差不多
 
 正面丝印为:
 DS1032Z
 +1234YR
 628AC
 今天 5月29日用DELL台式电脑的USB供电用视波器测下IC的 3脚出现了怪问题
 幅度明显比上一个低很多!
 
 F0000TEK-SOP8+1234未与MCU通信时
 
 F0000TEK-SOP8+1234未与MCU通信时   
 F0001TEK-SOP8+1234与MCU=4Mhz通信时
 
 F0001TEK-SOP8+1234与MCU=4Mhz通信时   
 F0002TEK-SOP8+1234与MCU=8Mhz通信时
 
 F0002TEK-SOP8+1234与MCU=8Mhz通信时   
 F0003TEK-SOP8+1234与MCU=12Mhz通信时
 
 F0003TEK-SOP8+1234与MCU=12Mhz通信时   
 F0004TEK-SOP8+1234与MCU=22.1184Mhz通信时
 
 F0004TEK-SOP8+1234与MCU=22.1184Mhz通信时   
 
 
 谁知道这是为什么?谢谢!
 
 
 |