AVR i C operatory



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
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ł



Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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




Poprzedni Następny
Wiadomość
Spis treści
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.



Poprzedni Następny
Wiadomość
Spis treści
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





Poprzedni Następny
Wiadomość
Spis treści
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



Poprzedni Następny
Wiadomość
Spis treści
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


Poprzedni Następny
Wiadomość
Spis treści
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


Poprzedni Następny
Wiadomość
Spis treści
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.


Poprzedni Następny
Wiadomość
Spis treści
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

Poprzedni Następny
Wiadomość
Spis treści
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.



Poprzedni Następny
Wiadomość
Spis treści
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/