Popatrz co się dzieje:
Zaloguj się, aby zobaczyć kod
Dajmy na to, że tak jak dziś, jest niedziela (6) w sierpniu (8). Daje to zapis w rejestrze: 110 01000 i taką wartość masz w buffer_t[4] i zmiennej mc. Co robisz dalej? Chcesz dostać miesiąc - powinieneś
zamaskować 3 najstarsze bity w zmiennej, czyli
mc_j = buffer_t[4] & 0x1F; //11001000 x 00011111 = 00001000
, później tą wartość z BCD na kod dziesiętny i masz 08.
Chcesz dostać dzień tygodnia - powinieneś
przesunąć i zamaskować zmienną, czyli:
zmienna = (buffer_t[4] >> 5) & 0x07; //rotacja 11001000 -> 01000110, po maskowaniu 00000110
Tego nawet nie trzeba przeliczać z BCD na dziesiętny bo już widać, że jest to wartość 6.
Mogłem się pomylić, że niedziela to 6, ale ogólna zasada chyba została zachowana
Daj znać jak poszło
