[讨论] PCF8563编程问题,请大侠指点

eeleader   2010-7-6 10:56 楼主

最近在做一个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有什么区别,请各位大侠不吝赐教!

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复