AVR i C operatory
Masz problem? Zapytaj na forum elektroda.pl
From: "Kacper" <elkacperUSUŃTO_at_nospam_gazeta.pl>
Subject: AVR i C operatory
Date: Wed, 5 Apr 2006 12:06:14 +0200
Witam
Zaiste temat wałkowany często ale sam nie spotkałem dobrze opisanego
wyjaśnienia operatorów.
Szczególnie jesli zacznie się je łączyć.
Chodzi mi o to:
zmienna<<=1
Rozumiem że najpierw przesunięcie zawartości zmiennej w lewo o jedną pozycję
a potem zapisanie do niej wartości 1.
Po co w takim razie przesuwać jak i tak od razu zmienna traci poprzednią
wartość na korzyść jedynki wpisanej zaraz potem?
Wydaje się nielogiczne więc chyba źle rozumiem.
Ponadto zapis taki:
#define A 6
#define B DDRD &=~(1<<A) (w operatorze jest & = ~ )
doprowadza mnie do szału. Kiedyś jak startowałem z atmelami naczytałem się
że lepiej C bo to i tamto.
BASCOM był jasniejszy ale skorzystałem z rady na grupie i wystartowałem w C
ku obecnemu znacznemu wkurzeniu.
Ratujta bo mnie coś trafi.
Rafał
From: =?ISO-8859-2?Q?Krzysztof_Szmur=B3o?=
Subject: Re: AVR i C operatory
Date: Wed, 05 Apr 2006 12:32:03 +0200
Kacper napisał(a):
Witam
Zaiste temat wałkowany często ale sam nie spotkałem dobrze opisanego
wyjaśnienia operatorów.
Szczególnie jesli zacznie się je łączyć.
Chodzi mi o to:
zmienna<<=1
Rozumiem że najpierw przesunięcie zawartości zmiennej w lewo o jedną pozycję
a potem zapisanie do niej wartości 1.
A ja to rozumiem jako zmienna = zmienna <<1;
Czyli zmienna przesunięta o 1 w lewo i potem nadpisana nową wartością
Po co w takim razie przesuwać jak i tak od razu zmienna traci poprzednią
wartość na korzyść jedynki wpisanej zaraz potem?
Wydaje się nielogiczne więc chyba źle rozumiem.
Ponadto zapis taki:
#define A 6
Każda następna spotkana literka "A" będzie zamieniona "6" (jeszcze przed
kompilacją)
#define B DDRD &=~(1<<A) (w operatorze jest & = ~ )
Jeśli gdzieś dalej wstawisz "B" to będzie to to samo jakbyś wstawił
DDR&=~(1<<A) czyli (za A podstawiam 6)
DDR = DDR & (~(1<<6)
czyli:
DDR = DDR & (~0b01000000)
czyli:
DDR = DDR & 0b10111111
czyli kasuje Ci bit 6 w rejestrze DDR
doprowadza mnie do szału. Kiedyś jak startowałem z atmelami naczytałem się
że lepiej C bo to i tamto.
BASCOM był jasniejszy ale skorzystałem z rady na grupie i wystartowałem w C
ku obecnemu znacznemu wkurzeniu.
Ratujta bo mnie coś trafi.
Jeśli chcesz sie związać z C, a bardziej z C++ to polecam symfonię C++
Grębosza. Tom I zawiera podstawy C. To jest bardzo dobra!! książka.
Krzysztof Szmurło
From: "Kacper" <elkacperUSUŃTO_at_nospam_gazeta.pl>
Subject: Re: AVR i C operatory
Date: Wed, 5 Apr 2006 12:56:33 +0200
W takim razie można użyć takiej formuły:
DDR&=0b11011111
To chyba też zeruje bit a pozostałą częśc portu zostawia bez zmian.
Chyba że ktoś wielokrotnie używa wartości 6 więc ją sobie zastąpił nazwą A.
To jedyne wytłumaczenie.
A teraz jeśli mogę prosić o wyjaśnienie jeszcze jednego (analizuję przykłady
przez to się uczę)
takie dwie linie jedna po drugiej w programie:
PORTD=0xFF
PORTD&=~(1<<3)
Po kiego grzyba bawić się w chińszczyznę (linia druga) kiedy wszystkie
wartości są jawne i znane
i nie przypisać od razu wartości do PORTD?
Tu chyba ktoś przegiął z operatorami.
Rafał
PS. Dzięki za radę, książki poszukam.
Użytkownik "Krzysztof Szmurło" <ks123.usunto_at_nospam_interia.kropka.pl> napisał w
wiadomości news:e106ak$b8p$1_at_nospam_atlantis.news.tpi.pl...
Jeśli gdzieś dalej wstawisz "B" to będzie to to samo jakbyś wstawił
DDR&=~(1<<A) czyli (za A podstawiam 6)
DDR = DDR & (~(1<<6)
czyli:
DDR = DDR & (~0b01000000)
czyli:
DDR = DDR & 0b10111111
czyli kasuje Ci bit 6 w rejestrze DDR
From: "Bogdan Gutknecht" <b_gutknecht_at_nospam_interia.pl>
Subject: Re: AVR i C operatory
Date: Wed, 5 Apr 2006 13:10:14 +0200
A teraz jeśli mogę prosić o wyjaśnienie jeszcze jednego (analizuję
przykłady
przez to się uczę)
takie dwie linie jedna po drugiej w programie:
PORTD=0xFF
PORTD&=~(1<<3)
Można, ale po przyzwyczajeniu się widać od razu, że zerujemy 3 bit, a reszta
jest ustawiona. Najprawdopodobniej kompilator i tak wykona to w jednej
instrukcji. Ja używam do zerowania, ustawiania bitów poleceń cbi i sbi. Jest
to kwestia tylko i wyłšcznie przyzwyczajenia.
From: Jado <KILLSPAMjado_at_nospam_chello.pl>
Subject: Re: AVR i C operatory
Date: Wed, 05 Apr 2006 15:38:38 +0200
Bogdan Gutknecht wrote:
A teraz je?li mogę prosić o wyja?nienie jeszcze jednego (analizuję
przykłady
przez to się uczę)
takie dwie linie jedna po drugiej w programie:
PORTD=0xFF
PORTD&=~(1<<3)
Można, ale po przyzwyczajeniu się widać od razu, że zerujemy 3 bit, a
reszta jest ustawiona. Najprawdopodobniej kompilator i tak wykona to w
jednej instrukcji. Ja używam do zerowania, ustawiania bitów poleceń cbi i
sbi. Jest to kwestia tylko i wyłącznie przyzwyczajenia.
To ja sie podepne pod temat...
A co znacza dokladnie nastepujace instrukcje?:
PINSEL0 &= ~(3<<4)
PINSEL0 |= (2<<4)
Tu juz nie jest 1, a 2 i 3 - czy znaczy ze 2 = 10b, a 3 = 11b , umieszczone
od pozycji 4 w gore? (pomijam tu sprawe ~, & i |, bo te sa oczywiste)
--
Pozdrawiam
Jado
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: AVR i C operatory
Date: Wed, 5 Apr 2006 16:17:33 +0200
A co znacza dokladnie nastepujace instrukcje?:
PINSEL0 &= ~(3<<4)
PINSEL0 |= (2<<4)
Tu juz nie jest 1, a 2 i 3 - czy znaczy ze 2 = 10b, a 3 = 11b ,
umieszczone
od pozycji 4 w gore? (pomijam tu sprawe ~, & i |, bo te sa oczywiste)
TAK
M
From: arkadiusz.antoniak_at_nospam_wp.pl
Subject: Re: AVR i C operatory
Date: 5 Apr 2006 16:42:17 -0700
Bogdan Gutknecht wrote:
Jest
to kwestia tylko i wy=B3=B1cznie przyzwyczajenia.
Jest to kwestia czytelnosci
From: arkadiusz.antoniak_at_nospam_wp.pl
Subject: Re: AVR i C operatory
Date: 5 Apr 2006 16:41:20 -0700
Kacper wrote:
PORTD=3D0xFF
PORTD&=3D~(1<<3)
Po kiego grzyba bawi=E6 si=EA w chi=F1szczyzn=EA (linia druga) kiedy wszy=
stkie
warto=B6ci s=B1 jawne i znane
i nie przypisa=E6 od razu warto=B6ci do PORTD?
Tu chyba kto=B6 przegi=B1=B3 z operatorami.
chyba nie
From: "Bielsky" <bielsky_at_nospam_poczta.onet.pl>
Subject: Re: AVR i C operatory
Date: 5 Apr 2006 04:01:43 -0700
Mam nadzieje ze znasz cos takiego:
a+=1;
to znaczy to samo co
a = a+1;
tu bedzie podobnie:
a<<=1;
znaczy tyle co a= a<<1;
samo a << 1 nie zmieni zawartosci a.
From: MariuszC <marcukr_at_nospam_.op.toskasuj.pl>
Subject: Re: AVR i C operatory
Date: Wed, 05 Apr 2006 22:17:45 +0200
Kacper wrote:
Witam
.........
doprowadza mnie do szału. Kiedyś jak startowałem z atmelami naczytałem się
że lepiej C bo to i tamto.
Do poznania i pisania w C na tego typu mikrokontrolery polecam lekturę
książki:
"Język C" - W. Kernighan, M. Ritchie
Bo wydaje mi się że zaczęłeś od razu od pisania w C bazując na jakichś
przykładach nie rozumiejąc konstrukcji języka które się w nich znajdują
Pozdrawiam
Mariusz
From: "MinSu" <spam.minsu_at_nospam_daeyang.cc>
Subject: Re: AVR i C operatory
Date: Thu, 6 Apr 2006 16:01:54 +0200
Użytkownik "MariuszC" <marcukr_at_nospam_.op.toskasuj.pl> napisał w wiadomości
news:e118lf$du6$1_at_nospam_news.onet.pl...
Do poznania i pisania w C na tego typu mikrokontrolery polecam lekturę
książki:
"Język C" - W. Kernighan, M. Ritchie
tzw. legendarna... ale nie wiem dlaczego - slaba!~~
pozdr.
From: gophi.at.chmurka.net_at_nospam_nospam.invalid (Adam Wysocki)
Subject: Re: AVR i C operatory
Date: Thu, 6 Apr 2006 04:53:29 +0000 (UTC)
Spinacz biurowy, Kacper <elkacperUSU?TO_at_nospam_gazeta.pl>!
Szczególnie jesli zacznie się je łączyć.
Chodzi mi o to:
zmienna<<=1
"a operator= b" jest równoważne "a = a operator b". W tym przypadku
zmienna = zmienna << 1.
Rozumiem że najpierw przesunięcie zawartości zmiennej w lewo o jedną pozycję
a potem zapisanie do niej wartości 1.
Najpierw przesunięcie zawartości w lewo o jedną pozycję a potem zapisanie
tej przesuniętej wartości do zmiennej.
#define A 6
#define B DDRD &=~(1<<A) (w operatorze jest & = ~ )
DDRD = DDRD & ~(1 << A), czyli wpisujemy do DDRD wartość DDRD pomnożoną
logicznie (AND) przez zanegowaną wartość wyrażenia 1<<A (które swoją drogą
powinno być zapisane jako _BV(A). 1<<A to liczba, która ma ustawiony bit
na pozycji A.
--
http://www.chmurka.net/ :: FidoNet 2:480/138 :: GG 1234 :: Grono 123
hihihi...bylinek jako twor akcji 'kobiety na grupe!' :) (C) meg 2003
W prezencie dla spamerów: http://polish-202412072603.spampoison.com/