Page 1 of 1

PostPosted: Mon Jan 14, 2013 12:00 am
by namir
Hallo Freunde,

void rtc_check(void)
{
unsigned char help;

do
{
REGD = (REGD | 0x01); // HOLD Bit auf HIGH setzen!
help = (REGD & 0x02); // BUSY Bit maskieren
if (help) REGD = (REGD & 0x0e); // Wenn BUSY Bit HIGH ist,
} // HOLD Bit wieder auf LOW setzen und
while(help); // Schleife nochmals ausführen!
} // Wenn Busy Bit LOW ist, weiter mit Zugriff auf RTC


Frage: Ist die Zeile # if (help) REGD = (REGD & 0x0e);# korrekt?

Damit soll der Hold Bit auf 0 gesetzt (d.h. REGD = REGD & 0x00!!

Ist mein Verstaendnis nicht richtig?

PostPosted: Mon Jan 21, 2013 12:00 am
by rai
Hi,

Wenn die Variable "help" nicht null ist (d.h. wenn das Busy Bit gesetzt ist) wird das HOLD Bit zurück auf 0 gesetzt.

Dein Code passt also.

Zum Vergleich mal mein Code für die RTC:
while(1)
{
rtc_controlD = rtc_controlD | 0x01; //kurzes Anhalten der Uhr
zw = rtc_controlD & 0x02; //Auslesen Busy Flag
if(zw != 0)
{
rtc_controlD = rtc_controlD & 0xFE; //Uhr weiterlaufen lassen
continue;
}
//Auslesen Zeit
zeit[0] = rtc_hour10;
zeit[1] = rtc_hour1;
zeit[2] = rtc_min10;
zeit[3] = rtc_min1;
zeit[4] = rtc_sec10;
zeit[5] = rtc_sec1;

//Auslesen Datum
....
rtc_controlD = rtc_controlD & 0xFE; //Uhr weiterlaufen lassen
break; //Schleife unterbrechen
}

Rai