最近在做一個(gè)pcf8563的時(shí)鐘電路,i2c總線讀寫(xiě),同時(shí)i2c總線上還掛了一片AT24c02,同樣的i2c總線讀寫(xiě)程序,在讀寫(xiě)AT24c02沒(méi)有任何問(wèn)題,但是讀寫(xiě)pcf8563時(shí)卻讀出來(lái)是亂碼
以下是8563的讀寫(xiě)程序
void Write8563(unsigned char address,unsigned char mdata) //在8563的口地址為address的寄存器中寫(xiě)mdata { I2C_Start(); I2C_Write(0xa2); /*寫(xiě)命令*/ I2C_Write(address); /*寫(xiě)地址*/ I2C_Write(mdata); /*寫(xiě)數(shù)據(jù)*/ I2C_Stop(); } unsigned char Read8563(unsigned char address) //在8563的口地址為address的寄存器中讀一個(gè)8bit數(shù)據(jù) { unsigned char rdata; I2C_Start(); I2C_Write(0xa2); /*寫(xiě)命令101000A(1)W(0)*/ I2C_Write(address); /*寫(xiě)地址*/ I2C_Start(); I2C_Write(0xa3); /*讀命令101000A(1)R(1)*/ rdata=I2C_Read(); I2C_PutAck(1); I2C_Stop(); return(rdata); }
/************************************* 以下程序?yàn)锳T24C02的讀寫(xiě)函數(shù) *************************************/ void Write24C02(unsigned char romaddress,unsigned char mdata) //在24C02的地址為romaddress的寄存器中寫(xiě)mdata { I2C_Start(); I2C_Write(0xa0); /*寫(xiě)命令*/ I2C_Write(romaddress); /*寫(xiě)地址*/ I2C_Write(mdata); /*寫(xiě)數(shù)據(jù)*/ I2C_Stop(); } unsigned char Read24C02(unsigned char romaddress) //在24C02的口地址為romaddress的寄存器中讀一個(gè)8bit數(shù)據(jù) { unsigned char rdata; I2C_Start(); I2C_Write(0xa0); /*寫(xiě)命令101000A(0)W(0)*/ I2C_Write(romaddress); /*寫(xiě)地址*/ I2C_Start(); I2C_Write(0xa1); /*讀命令101000A(0)R(1)*/ rdata=I2C_Read(); I2C_PutAck(1); I2C_Stop(); return(rdata); }
主程序中:讀寫(xiě)24C02沒(méi)有任何問(wèn)題
Write24C02(0x01,0x05); SoftDelay(10);//延時(shí)10ms TAB=Read24C02(0x01);
但是讀寫(xiě)PCF8563卻無(wú)法正常讀寫(xiě)
Write8563(0x03,TAB_T); SoftDelay(10);//延時(shí)10ms
TAB_T=Read8563(0x03);
TAB_T&=0x7f;
不知道pcf8563的讀寫(xiě)到底和AT24C02有什么區(qū)別,請(qǐng)各位大俠不吝賜教! |