Witam
To może i ja coś od siebie dodam.
To może wspólnymi siłami jakoś ruszy

bo zauważyłem że kolega grower napisał:
grower napisał(a):
Okej, a generalnie mi chodzi o to czemu akurat "0xFF = 11111111" oznacza wyjście portów, zawsze to będzie 0xFF?
Co oznacza że trzeba zacząć od samego początku.

1, rejestry są ośmio bitowe i mogą przyjąć wartości : "0" lub "1" w każdym bicie.
dla całego rejestru ośmio bitowego "wyzerowanego" trzeba będzie wprowadzić zapis
binarnie " 0b 0000 0000 " . albo heksadecymalnie " 0x 00"
(zauważ że w tym drugim występuje "0x"-to tylko symbol wstawiany przed wartością "00".
dzięki niemu kompilator wie że podajesz wartość w systemie heksadecymalnym bo np. tak wolisz.
Te dwa zera podane w" heksie" mają taką samą wartość jak tamte osiem podane w" binie." umieszczone za "0b"...
lecimy dalej.
utrudniamy i wyjaśniamy.
zapis:
DDRD=0b 0000 0001;
("DDRD" to nazwa rejestru ośmio bitowego którym ustawiamy:czy na nóżce będzie wejście czy wyjście.
rejestr odpowiada za osiem nóżek."0" to wejścia a "1" to wyjścia.
W naszym przykładzie na końcu nazwy rejestru jest literka "D"(czyli port D).oznacza ona że jest to rejestr z nóżkami (PD7,PD6,PD5,PD4,PD3,PD2,PD1,PD0)
zauważ , jest ich osiem każda z nich może być wejściem albo wyjściem.
Ja ustawiłem w przykładzie , tą ostatnią jedynką , nóżkę "PD0" jako wyjście. kolejne pozostały wejściami bo wpisałem "0".
DDRD= 0 0 0 0 0 0 0 1; (wej. wej.wej.wej.wej.wej.wej. WYJ)
porównaj to z kolejnością nazw nóżek .
_ mam nadzieję że nadążasz jeżeli nie to pytaj.
a teraz w heksie nadal to samo.
DDRD=0x01; (DDRD-opisałem,Ox-opisałem,teraz uwaga (dwie ostatnie cyfry " 01" w zapisie szesnastkowym czyli heksadecymalnym.
pierwsza od lewej "0_"to te cztery zera po lewej stronie zapisane w binarnym."0000____"
i analogicznie"_1" to "____0001".
no dobrze .A co z tym ? np.
ten sam port c.d.
PORTD=0b00001111;
(tym rejestrem ustawiamy :
jeżeli w DDRD było "O"-czyli wejście to zapis "1" włącza podciągnięcie nóżki do zasilania rezystorem a "0" wyłącza podciąganie.
jeżeli w DDRD było "1"czyli wyjście to zapis"0" wymusi stan niski na nóżce a "1" stan wysoki.)
w naszym przykładzie pamiętając o wpisie do poprzedniego rejestru.DDRD.
(wejście bez podciągnięcia,wejście bez podciągnięcia,wejście bez podciągnięcia,wejście bez podciągnięcia,
wejście z podciągnięciem,wejście z podciągnięciem,wejście z podciągnięciem,wyjście stan wysoki).
ale nasz wpis można wprowadzić przecież w heksie.
PORTD=0x0F; to samo co PORTD=0b 0000 1111;
a dlaczego?
zero wiadomo- cztery z lewej.
0=0 1=1 2=2 3=3 4=4 5=5 6=6 7=7 8=8 9=9 10=A 11=B 12=C 13=D 14=E 15=F. ( 0b____1111)=15.
dlatego 15 = 0b 0000 1111 = 0x 0F.
ale zapis "10" != "0b10" != "0x10" !!! pierwszy ma wartość 10 drugi 2 a trzeci 16.
ja osobiście po kilku wpisach do rejestrów przerzuciłem się na
DDRD |=(1<<PD0); ( ustawienie jedynki na pierwszym bicie tego rejestru UWAGA LICZĄC OD PRAWEJ)
PORTD |=(1<<PD3)|(1<<PD2)|(1<<PD1)|(1<<PD0); (a tu ustawienie jedynek w czterech młodszych bitach)
mam nadzieję że coś pomogłem w zrozumieniu . też przez to przechodziłem całkiem niedawno .

a pytanie dlaczego 0x a nie 1x ? teraz rozumiesz - to tak jak "dlaczego + to krzyżyk a minus to kreska.
Trzymaj się i powodzenia.

Darek.