Writex(0xA0);
AutoACK();
Writex(Addresshigh);
AutoACK();
Writex(Addresslow);
AutoACK();
Writex(Write_date);
AutoACK();
I2CStop();
Delay_1ms(10);
}
/*对某个地址读操作,函数值为读出的数据*/
Uchar X24_Read(Uchar Addresshigh,Uchar Addresslow)
{
Uchar i;
I2CStart();
Writex(0xA0);
AutoACK();
Writex(Addresshigh);
AutoACK();
Writex(Addresslow);
AutoACK();
I2CStart();
Writex(0xA1);
AutoACK();
i =Readx();
//ACK(); //注意:这里不能有ACK应答信号//
I2CStop();
Delay_1ms(0);
return(i);
}
/*对内存中的数据块写入,入口为写EEPROM的地址,内存缓冲中的数据的起始地址(是IDATA的数据)*/
void X24_WritePage(Uchar Addresshigh,Uchar Addresslow,Uchar idata *Writeip)
{
Uchar i;
I2CStart();
Writex(0xA0);
AutoACK();
Writex(Addresshigh);
AutoACK();
Writex(Addresslow);
AutoACK();
for(i=0;i<64;i++)
{
Writex(*Writeip++);
AutoACK();
}
I2CStop();
}
/*把EEPROM中的数据读出来存放在内存缓冲中,起始地址为(是IDATA的数据)*/
void X24_ReadPage(Uchar Addresshigh,Uchar Addresslow,Uchar idata *Readip)
{
Uchar i;
I2CStart();
Writex(0xA0);
AutoACK();
Writex(Addresshigh);
AutoACK();
Writex(Addresslow);
AutoACK();
I2CStart();
Writex(0xA1);
AutoACK();
for(i=0;i<63;i++) //PAGE读的时候最后一个BYTE不要ACK信号//
{
*Readip = Readx();
Readip = Readip++;
ACK();
}
*Readip = Readx();
NACK();
I2CStop();
Delay_1ms(0);
}
//*******************以下为对PCF8383/PCF8563的读写子程序********************//
//**********时钟片device address的写地址为0A2H,读地址为0A3H******************//
/*对PCF8563的时钟读到内存中,以IDATA指针开始的连续7个BYTE*/
//****读出的内容依次为“秒,分钟,小时,日,星期,月/世纪,年********************//
//PCF8585依次为“秒,分钟,小时,日,星期月
void GetPCF8563(Uchar idata *Getip)
{
Uchar i;
I2CStart();
Writex(0xA2);
AutoACK();
Writex(0x02); //从秒地址开始读//
AutoACK();
I2CStart();
Writex(0xA3);
AutoACK();
for(i=0;i<6;i++)
{
*Getip = Readx();
Getip = Getip++;
ACK();
}
*Getip = Readx();
NACK();
I2CStop();
Delay_1ms(0);
}
/*设定8563/8583的时间内容依次为“秒,分钟,小时,日,星期,月/世纪,年*/
//PCF8585依次为“秒,分钟,小时,日,星期月
void SetPCF8563(Uchar idata *Setip)
{
Uchar i;
I2CStart();
Writex(0xA2);
AutoACK();
Writex(0x02);
AutoACK();
for(i=0;i<7;i++)
{
Writex(*Setip++);
AutoACK();
}
I2CStop();
}
Uchar ReadPCF8563(Uchar AddrePCF)
{
Uchar i;
I2CStart();
Writex(0xA2);
AutoACK();
Writex(AddrePCF);
AutoACK();
I2CStart();
Writex(0xA3);
AutoACK();
i =Readx();
//ACK(); //注意:这里不能有ACK应答信号//
I2CStop();
Delay_1ms(0);
return(i);
}
void WritePCF8563(Uchar AddrePCF,Uchar PCFdata)
{
I2CStart();
Writex(0xA2);
AutoACK();
Writex(AddrePCF);
AutoACK();
Writex(PCFdata);
AutoACK();
I2CStop();
Delay_1ms(10);
}
void SetWaring (Uchar Wyear,Uchar Wmonth,Uchar Wday)
{
X24_Write(0x07,0xf0,Wyear);
X24_Write(0x07,0xf1,Wmonth);
X24_Write(0x07,0xf2,Wday);
}
/*返回值为1和0,1为已溢出,0为没有溢出*/
bit CheckTime(void)
{
Uchar j,k;
j = X24_Read(0x07,0xcb);
k = ReadPCF8563(0x08 ); /*读年的时间*/
if(k<j)
{
return(0);
}
else
{
if(k>j)
{
return(1);
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页
本文关键字:程序 51单片机,单片机-工控设备 - 51单片机