最近在做一个pcf8563的时钟电路,i2c总线读写,同时i2c总线上还挂了一片AT24c02,同样的i2c总线读写程序,在读写AT24c02没有任何问题,但是读写pcf8563时却读出来是乱码
以下是8563的读写程序
void Write8563(unsigned char address,unsigned char mdata) //在8563的口地址为address的寄存器中写mdata
{
I2C_Start();
I2C_Write(0xa2); /*写命令*/
I2C_Write(address); /*写地址*/
I2C_Write(mdata); /*写数据*/
I2C_Stop();
}
unsigned char Read8563(unsigned char address) //在8563的口地址为address的寄存器中读一个8bit数据
{
unsigned char rdata;
I2C_Start();
I2C_Write(0xa2); /*写命令101000A(1)W(0)*/
I2C_Write(address); /*写地址*/
I2C_Start();
I2C_Write(0xa3); /*读命令101000A(1)R(1)*/
rdata=I2C_Read();
I2C_PutAck(1);
I2C_Stop();
return(rdata);
}
/*************************************
以下程序为AT24C02的读写函数
*************************************/
void Write24C02(unsigned char romaddress,unsigned char mdata) //在24C02的地址为romaddress的寄存器中写mdata
{
I2C_Start();
I2C_Write(0xa0); /*写命令*/
I2C_Write(romaddress); /*写地址*/
I2C_Write(mdata); /*写数据*/
I2C_Stop();
}
unsigned char Read24C02(unsigned char romaddress) //在24C02的口地址为romaddress的寄存器中读一个8bit数据
{
unsigned char rdata;
I2C_Start();
I2C_Write(0xa0); /*写命令101000A(0)W(0)*/
I2C_Write(romaddress); /*写地址*/
I2C_Start();
I2C_Write(0xa1); /*读命令101000A(0)R(1)*/
rdata=I2C_Read();
I2C_PutAck(1);
I2C_Stop();
return(rdata);
}
主程序中:读写24C02没有任何问题
Write24C02(0x01,0x05);
SoftDelay(10);//延时10ms
TAB=Read24C02(0x01);
但是读写PCF8563却无法正常读写
Write8563(0x03,TAB_T);
SoftDelay(10);//延时10ms
TAB_T=Read8563(0x03);
TAB_T&=0x7f;
不知道pcf8563的读写到底和AT24C02有什么区别,请各位大侠不吝赐教!