DS1302和DS13B02明明引脚不一样为什么一起用就全部显示0?

代码DS13B02


#include <REGX52.H>

sbit DQ = P3^7;  


 
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
unsigned char i;
	while(t--)
        {
		for(i=0;i<1;i++);
	}
}

//µ¥×ÜÏßд²Ù×÷
void Write_DS18B20(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		DQ = 0;
		DQ = dat&0x01;
		Delay_OneWire(5);
		DQ = 1;
		dat >>= 1;
	}
	Delay_OneWire(5);
}

//µ¥×ÜÏ߶Á²Ù×÷
unsigned char Read_DS18B20(void)
{
	unsigned char i;
	unsigned char dat;
  
	for(i=0;i<8;i++)
	{
		DQ = 0;
		dat >>= 1;
		DQ = 1;
		if(DQ)
		{
			dat |= 0x80;
		}	    
		Delay_OneWire(5);
	}
	return dat;
}

//DS18B20³õʼ»¯
bit init_ds18b20(void)
{

  	bit initflag = 0;
  	
  	DQ = 1;
  	Delay_OneWire(12);
  	DQ = 0;
  	Delay_OneWire(80);
  	DQ = 1;
  	Delay_OneWire(10); 
    initflag = DQ;     
  	Delay_OneWire(5);
  
  	return initflag;
}



代码DS1302

#include <reg52.h>
#include <intrins.h>

sbit SCK=P3^6;		
sbit SDA=P3^4;		
sbit RST = P3^5;  											

void ds1302init()
{
    SCK=0;
    RST=0;
}
void Write_Ds1302(unsigned  char temp) 
{
	unsigned char i;
	for (i=0;i<8;i++)     	
	{ 
		SCK=0;
		SDA=temp&0x01;
		temp>>=1; 
		SCK=1;
	}
}   

void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1; 	_nop_();  
 	Write_Ds1302(address);	
 	Write_Ds1302(dat);		
 	RST=0; 
}

unsigned char Read_Ds1302_Byte ( unsigned char address )
{
 	unsigned char i,temp=0x00;
 	RST=0;	
 	SCK=0;	
 	RST=1;	
 	Write_Ds1302(address);
 	for (i=0;i<8;i++) 	
 	{		
		SCK=0;
		temp>>=1;	
 		if(SDA)
 		temp|=0x80;	
 		SCK=1;
	} 
// 	RST=0;	//ΪʲôҪעÊ͵ô²ÅÄܺÍDS13B02¹²Óã¿
	SCK=0;	
	SDA=0;	
	return (temp);			
}

已知解决方法为:将发送和接收的程序中的RST=1;修改为RST=0,但不知道为什么

猜你喜欢

转载自blog.csdn.net/wcl501375/article/details/128879920