Algmeine Funktion

Gast #3650293
Lesenswert?

Hallo,
ich versuche gerade mit einer Funktion mein Programm zu verschönern.
Das Gesamte Programm liest eine I2C RTC(PCF8583P) aus, deshalb verwende 
ich die Bibliothek von Peter Fleury.

Die zwei ausgelesnen Bytes werden in diesen Variabeln gespeichert:
buff_sekunde
buff_minute

Nun hab ich mir gedach ich schreib mir eine Funktion
1
uint8_t getsm (uint8_t  ) {
2
  uint8_t zehn = 0 ;
3
  
4
  
5
  
6
  ergebnis = buff & 0b00001111; // maskieren der 1er Stelle 
7
  zehn = buff & 0b01110000; // hier die 10er Stelle
8
  zehn = zehn >> 4 ; //um 4 Stellen zurückschieben für richtige Wertichkeit 
9
  ergebnis = (ergebnis >> 4) * 10 + (ergebnis & 0x0F); // umwandeln von BDC in Binär
10
  ergebnis = ergebnis + zehn *10 ; //Gesamt Ergebnis
11
  
12
  
13
  
14
  
15
  
16
  
17
  return (); // In der Klammer sollte die Rückgabevariable stehen
18
  
19
};

Im "main" frage ich einefach das Ergbniss ab
1
sekunde= getsm(buff_sekunde) ;
2
minute= getsm(buff_minute);

Zu erwähnen ist noch, dass ich die Funktion in eine *.c Datei 
ausgelagert habe. Aber ich weiß nicht wie die Variablen Übergabe 
aussehen soll? Was soll ich in return() schreiben?

Vielen Danke wenn jemand so nett wäre und mich einwenig unterstützen 
kann.
Ich lerne grade µC programmieren in C nur durch Tutorials. I2C und LCD 
laufen schon mal die Uhr läuft auch schon =) Die komplette Uhr ist so zu 
sagen mein Lehrnprojekt.
Gast #3650536
Lesenswert?

1
ergebnis = buff & 0b00001111; // maskieren der 1er Stelle 
2
ergebnis = (ergebnis >> 4) * 10 + (ergebnis & 0x0F); // umwandeln von BDC

die 2. Zeile ist vollkommen überflüssig.
(ergebnis >> 4) * 10
ist in deinem Fall immer null


im Grunde läuft es auf das hier hinaus:
1
uint8_t getsm (uint8_t value_bcd) {
2
  uint8_t value_dec;
3
  value_dec = 10 * (value_bcd >> 4) + (value_bcd & 0x0f);
4
  return (value_dec);
5
};

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