Hi, habe einen Philips PCF8583 Echtzeituhrbaustein. Die Zeit ist mittlerweile funktionsfähig, allerdings habe ich Probleme mit dem Datum. Mein Compiler (Keil µVision) kann damit nichts wirklich anfangen. Kann mir jemand weiterhelfen: struct date // Struct für das Datum { uchar tag; uchar monat; int jahr; }; uchar DectoHex(uchar value); uchar HextoDec(uchar value); void get_datum(struct date *t); void set_datum(struct date *t); void get_datum(struct date *t) { volatile uchar temp; volatile uchar temp1; volatile uchar temp2; volatile uchar temp3; volatile uchar jahrtemp; volatile int t_jahr; i2c_start(); i2c_schreiben(0xa0); i2c_schreiben(0x05); i2c_start(); i2c_schreiben(0xa1); temp=i2c_lesen(1); i2c_stop(); temp1=temp&0x0f; temp2=temp&0x30; temp3=temp&0xc0; temp3=temp3>>6; temp2=temp2>>4; temp=temp1 + ( 10*temp2); t->tag=temp; jahrtemp=temp3; i2c_start(); i2c_schreiben(0xa0); i2c_schreiben(0x06); i2c_start(); i2c_schreiben(0xa1); temp=i2c_lesen(1); i2c_stop(); temp1=temp&0x0f; temp2=temp&0x10; temp2=temp2>>4; temp=temp1 + ( 10*temp2); t->monat=temp; i2c_start(); i2c_schreiben(0xa0); i2c_schreiben(0x2f); i2c_start(); i2c_schreiben(0xa1); temp=i2c_lesen(1); i2c_stop(); temp1=temp; i2c_start(); i2c_schreiben(0xa0); i2c_schreiben(0x3f); i2c_start(); i2c_schreiben(0xa1); temp=i2c_lesen(1); i2c_stop(); temp2=temp; i2c_start(); i2c_schreiben(0xa0); i2c_schreiben(0x4f); i2c_start(); i2c_schreiben(0xa1); temp=i2c_lesen(1); i2c_stop(); temp3=temp; t_jahr=(temp1*100)+temp2; if (temp3==jahrtemp) t->jahr=t_jahr; else { t_jahr++; t->jahr=t_jahr; temp2=t_jahr%100; temp1=t_jahr/100; i2c_start(); i2c_schreiben(0xa0); i2c_schreiben(0x2f); i2c_schreiben(temp1); i2c_schreiben(temp2); i2c_schreiben(jahrtemp); i2c_stop(); }; } void set_datum(struct date *t) { volatile uchar temp; volatile uchar temp1; volatile uchar temp2; volatile uchar temp3; volatile uchar speicher1; volatile uchar speicher2; volatile uchar jahrt; temp=t->tag; temp1=temp/10; temp2=temp%10; temp3=(temp1<<4)|temp2; temp=t->jahr; temp2=temp%4; jahrt=temp2; temp2=<6; speicher1=temp2|temp3; temp3=get_wochentag(); temp3=<5; temp=t->monat; temp1=temp/10; temp2=temp%10; temp1=<4; speicher2=temp1|temp2|temp3; i2c_start(); i2c_schreiben(0xa0); i2c_schreiben(0x05); i2c_schreiben(speicher1); i2c_schreiben(speicher2); i2c_stop(); temp=t->jahr; temp1=temp/100; temp2=jahr%100; i2c_start(); i2c_schreiben(0xa0); i2c_schreiben(0x2f); i2c_schreiben(temp1); i2c_schreiben(temp2); i2c_schreiben(jahrt); i2c_stop(); } Weitere Informationen finden sich unter http://www.semiconductors.philips.com/pip/PCF8583.html
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.