Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 23 kwi 2024, o 22:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
Autor Wiadomość
PostNapisane: 30 lis 2015, o 08:05 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27225
Lokalizacja: Szczecin
Pomógł: 1041

Cytuj:
a|= 3 zapis równoważny a = a | 3 czy do zmiennej też dodaję 3?


a |= 3 to przecież a = a | 3

------------------------ [ Dodano po: kilkunastu sekundach ]

Poza tym zaglądałeś w Bluebooku do operacji logicznych ? przesunięć ? ... masz tam to przecież ładnie pokazane nawet graficznie

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2015, o 08:55 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 lip 2013
Posty: 420
Lokalizacja: Kraków
Pomógł: 17

Zobacz jedną rzecz. Jak zrobisz tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To na porcie D będziesz miał same zera i jedną "1" na pinie PD2.

a jak zrobisz tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To będziesz miał "1" na pinie PD1 i PD2

------------------------ [ Dodano po: 6 minutach ]

Albo inaczej. Miałbyś na porcie D ustawione stany 00111100

I teraz gdy użyjesz tego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

To wszystkie poprzednie stany się wyzerują i jedynka zostanie tylko na PD0


A w tym przypadku, nieważne co było ustawione wcześniej na tym porcie, avr ustawi sobie tylko tą jedną 1 na PD0 i nic więcej nie zmieni. (reszta pozostanie bez zmian)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
GreenBook i BlueBook



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2015, o 09:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Może jeszcze ja :) :
1Yokoon napisał(a):
inny zapis.
PORTD = (1<<PD1) na pinie ustawiam stan (1) wysoki.
PORTD |= (1<<PD1) też ustawiam stan (1) więc co robi ten operator sumy logicznej?

W pierwszym przypadku, bez względu na to co wcześniej było na PORTD po takim zapisie pozostanie tylko "jedynka" na PD1; pozostałe PIN'y zostaną wyzerowane.
W drugim przypadku pozostałe PIN'y zachowają swoją wartość, natomiast PD1 "otrzyma jedynkę" bez względu na jego wartość przed zapisem (p. suma logiczna).

Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2015, o 10:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

1Yokoon napisał(a):
a co z takim zapisem a |= 3 ?

Na podstawie zdobytych wcześniej informacji możesz to sobie rozpisać ;)
Podpowiem tylko, że należy 3 (dziesiętnie) rozpisać na zapis binarny a dalej to już "z górki".

Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2015, o 10:31 
Offline
Użytkownik

Dołączył(a): 20 lip 2015
Posty: 83
Pomógł: 6

To nic innego jak a = a | 3

To z kolei napisać można tak
a = a | 00000011

Teraz trochę skrótowe myślenie:
Teraz bierzesz sobie swoją liczbę a, zapisujesz binarnie, kawałek obok po prawej na kartce piszesz liczbę 3 binarnie i lecąc od prawej do lewej wykonujesz cos takiego cyfra po cyfrze:

Jezeli w obydwóch liczbach na tym samym miejscu jest jeden przesuwasz się w lewo o jedną pozycje w liczbach.
Jeżeli w liczbie po prawej stronie jest jedynka a w lewej jest zero, zamień zero na jeden w lewej liczbie i przejdź o jedną pozycję w obydwu liczbach

Jezeli w liczbie po prawej jest zero nic nie robisz, przeskakujesz w obydwóch cyfrach o jedną pozycje w lewo.

I tak aż do końca ;) finalnie powinieneś otrzymać po lewej stronie wynik sumy logicznej. Możesz jeszcze ruszyć temat "tabeli prawdy" działań OR i AND żeby zrozumieć dlaczego tak to się robi a nie inaczej


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2015, o 10:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2015
Posty: 310
Pomógł: 18

1Yokoon napisał(a):
a| = a | 3czy do zmiennej a dodaję 3?

W tym wyrażeniu matematycznym występują dwa operatory sumy logicznej(OR), które zostaną wykonane.
Wynikiem będzie a = a | (a | 3).
Taki przykład w systemie 4- bitowym w kodzie maszynowym.
a = 0b1111
a = 0b1111 | (0b1111 | 0b0011)
a = 0b1111 = 0xF = 15



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2015, o 10:53 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 09 gru 2014
Posty: 1540
Pomógł: 269

Zobacz też tutaj.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2015, o 12:57 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
marmur napisał(a):
Teraz trochę skrótowe myślenie:
Teraz bierzesz sobie swoją liczbę a, zapisujesz binarnie, kawałek obok po prawej na kartce piszesz liczbę 3 binarnie i lecąc od prawej do lewej wykonujesz cos takiego cyfra po cyfrze:

Kwestia podejścia do zagadnienia; jeżeli natomiast napiszemy te dwie liczby jedna nad drugą to wystarczy popatrzeć czy na danym miejscu ( w górnej lub dolnej liczbie binarnej ) chociaż w jednej z nich występuje jedynka to w ich sumie tez będzie jeden. Tylko w sytuacji dwóch zer pozostaje zero.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 lis 2015, o 13:17 
Offline
Użytkownik

Dołączył(a): 20 lip 2015
Posty: 83
Pomógł: 6

1Yokoon napisał(a):
marmur napisał(a):
To nic innego jak a = a | 3

To z kolei napisać można tak
a = a | 00000011

Teraz trochę skrótowe myślenie:
Teraz bierzesz sobie swoją liczbę a, zapisujesz binarnie, kawałek obok po prawej na kartce piszesz liczbę 3 binarnie i lecąc od prawej do lewej wykonujesz cos takiego cyfra po cyfrze:

Jezeli w obydwóch liczbach na tym samym miejscu jest jeden przesuwasz się w lewo o jedną pozycje w liczbach.
Jeżeli w liczbie po prawej stronie jest jedynka a w lewej jest zero, zamień zero na jeden w lewej liczbie i przejdź o jedną pozycję w obydwu liczbach

Jezeli w liczbie po prawej jest zero nic nie robisz, przeskakujesz w obydwóch cyfrach o jedną
pozycje w lewo.


I tak aż do końca ;) finalnie powinieneś otrzymać po lewej stronie wynik sumy logicznej. Możesz jeszcze ruszyć temat "tabeli prawdy" działań OR i AND żeby zrozumieć dlaczego tak to się robi a nie inaczej


Zapis po lewej zapis po prawej
00000011 00000011

wynik - tabela prawdy | (OR)
00000011 czy tak ma być?



Dokładnie tak, nic się nie zmienia w zasadzie :)

Możesz spróbować robić takie działania tak jak kolega wyżej napisał. To już kwestia indywidualna, komu jak lepiej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 5 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO