[Low-Level] CMOS Zeit-Formatierung

Hallo!
Ich habe mal ein paar low-level Funktionen geschrieben, um die CMOS-Zeit auszulesen. Das klappt auch soweit, aber irgendwie kann ich mit den erhaltenen Zahlen nichts anfangen.
Die Sekundenzahl, die ich erhalte, fängt nicht bei 0 an und geht teilweise nicht in Sekundenschritten weiter. Teilweise werden einfach Werte übersprungen, die Werte gehen jenseits 60 (:rolleyes:) und machen dann 10er Schritte.
Hier mal mein Code:
Code:
unsigned char cmos_read(unsigned char offset) {
  unsigned char tmp = inportb(CMOS_PORT_ADDRESS);
  outportb(CMOS_PORT_ADDRESS, (tmp & 0x80) | (offset & 0x7F));
  return inportb(CMOS_PORT_DATA);
}

void outportb (unsigned short _port, unsigned char _data)
{
    __asm__ __volatile__ ("outb %1, %0" : : "dN" (_port), "a" (_data));
}

unsigned char inportb (unsigned short _port)
{
    unsigned char rv;
    __asm__ __volatile__ ("inb %1, %0" : "=a" (rv) : "dN" (_port));
    return rv;
}
aufgerufen wird das ganze dann mit
unsigned char sec = cmos_read(0);

Währe nett, wenn mir da einer weiterhelfen könnte. :)
 
Achso. Nicht bedacht, dass ich dort ja mit einem Mikrocontroller arbeite.
Die Zehnerschritte kamen, weil ich nicht daran gedacht habe den alten Wert zu überschreiben. Wenn also die 1 angezeigt werden sollte, wurde noch die zweite 9 von 59 angezeigt. Anfängerfehler... >.>
Thx für die Erklärung und Links!
 
Zurück
Oben