unsigned short le(unsigned short address) { unsigned short dado; I2C1_Start(); I2C1_Wr(0xA0); //endereco disp + escrever I2C1_Wr(address); //aponta p/ endereco dado I2C1_Repeated_Start(); I2C1_Wr(0xA1); //endereco disp + ler dado = I2C1_Rd(0u);//no acknowledge ? I2C1_Stop(); return (dado); }
//Address reference //https://electrosome.com/wp-content/uploads/2012/05/Time-Keeper-Registers.png //https://electrosome.com/wp-content/uploads/2012/05/Reading-Data-from-DS1307.jpg unsigned short read_ds1307(unsigned short address) { unsigned short temp; I2C1_Start(); I2C1_Wr(0xD0); I2C1_Wr(address); I2C1_Repeated_Start(); I2C1_Wr(0xD1); temp = I2C1_Rd(0); I2C1_Stop(); return(temp); }
//*********************************************************** unsigned char MemRd(unsigned int address) { unsigned char data_m,Add_H,Add_L; Add_H=((address&0xff00)>>8); Add_L=(address&0x00FF); I2C1_Init(100000); I2C1_Start(); I2C1_Wr(0xA0); I2C1_Wr(Add_H); I2C1_Wr(Add_L); I2C1_Repeated_Start(); I2C1_Wr(0xA1); data_m = I2C1_Rd(0u); I2C1_Stop(); return data_m; }//MemRd
void Read_Time(unsigned char *sec, unsigned char *min, unsigned char *hr, unsigned char *week_day, unsigned char *day, unsigned char *mn, unsigned char *year) { I2C1_Start(); I2C1_Wr(DEVICEID_DS1307); I2C1_Wr(0); I2C1_Repeated_Start(); I2C1_Wr(0xD1); *sec =I2C1_Rd(1); *min =I2C1_Rd(1); *hr =I2C1_Rd(1); *week_day =I2C1_Rd(1); *day =I2C1_Rd(1); *mn =I2C1_Rd(1); *year =I2C1_Rd(0); I2C1_Stop(); }