Brauch mal Hilfe bei I2C-bus

Gast #395017
Lesenswert?

Hallo! ich hoffe jemand kann helfen.
Ich verwende einen AT89C51ED2.

Nun!  ich hab mir ne Platine gebastelt wo der Controller und ne Uhr
drauf ist, ein PCF 8583.
Hab mir zum Ein-und Auslesen einen Treiber geschrieben.
Funktioniert auch soweit aber irgendwas Tickt da nicht richtig.

Hier mal der ein paar Codezeilen.


void main(void)
{
   int z;
   double b;
   unsigned char w = 0;
   P2=255;
   P0=255;
   NOTAUS = 0;
   Uhrschreiben(0x00,0x8B);   // Uhr Initialisieren und Stoppen
   Uhrschreiben(0x01,0x00);   // Millisekunden
   Uhrschreiben(0x02,0x00);   // Sekunden
   Uhrschreiben(0x03,0x50);   // Minuten : Byte soll an Port0 zur
Kontrolle ausgegeben werden
   Uhrschreiben(0x04,0x00);   // Stunden
   Uhrschreiben(0x05,0x00);   // Jahr / Tage
   Uhrschreiben(0x06,0x00);   // Wochentag/Monat


   //Uhrschreiben(0x00,0x03);
   error = 0;

   Uhrlesen(0x00);
   while(1)
   {
     Uhrlesen(0x00);             //Uhr auslesen
     Uhrlesen(0x00);             //wenn diese Zeile deaktiviert ist,
fängt es an zu blinken
                                 //D.h. die LEDS leuchten im wechsel
und zeigen die Werte
                                 // 11111111 = FFh oder 01010000 = 50h
an.
     P0=~uhrbuffer[3];           //Speicherstelle Minuten an Port 0
ausgeben.
     wait1();
     if(error == 1)
     {
         A3 = 0;
     }

   }

   while(1);



}


Also ich hab folgendes Problem:
Wenn ich permanent die Uhr mit  Uhrlesen(0x00); auslesen möchte
und dieser nur einmal pro durchlauf fangen meine Leds an zu blinken.

Wenn ich den Befehl zweimal hintereinander aufrufe bekomme ich das
gewünschte ergebnis.


Ich mach schon den ganzen Tag rum und komm nicht
hinter das Geheimnis warum es sich so verhält. :(


Vielleicht weiss von euch jemmand rat.

norad

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren