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



Teraz jest 3 sty 2025, o 06:42


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 7 lut 2014, o 22:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 sty 2014
Posty: 57
Pomógł: 0

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



jak rozpisać operacje bitowe w definicji :
!(PINC & KEY_PIN)

wydaje mi się że:
DDRC=0b10000000
ale dalej nie wiem jak......

Przepraszam, że tak co chwilę edytuję, ale usunęło mi się przez to wszystko moje pytanie. Chodzi o to że nie wiem jak rozpisać operacje bitowe !(PINC & KEY_PIN)



Ostatnio edytowano 7 lut 2014, o 23:10 przez Uczeń_Mistrza, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:00 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 31 mar 2012
Posty: 177
Pomógł: 9

wklejaj kod w [syntax]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 sty 2014
Posty: 57
Pomógł: 0

jak się wkleja w syntax?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:07 
Offline
Użytkownik

Dołączył(a): 12 paź 2012
Posty: 207
Lokalizacja: Rzeszów
Pomógł: 16

W pełnym edytorze masz listing kodu: wybierasz język (C) i w polu wstawia Ci znaczniki pomiędzy które wklejasz kod.
Oprócz tego napisz poza kodem dwa czy zdania o co Ci chodzi, czego nie rozumiesz. Po prostu zadaj pytanie :)

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

W pełnym edytorze postu wybierasz z listy rozwijanej "syntax" nad oknem edycji
znaczniki "C" i pomiędzy nimi wklejasz kod :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:15 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Uczeń_Mistrza napisał(a):
jak się wkleja w syntax?


Obrazek

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 sty 2014
Posty: 57
Pomógł: 0

dzięki :) teraz jakby ktoś mógł wytłumaczyć te operacje bitowe.
DDRC=0b10000000
a co będzie następne?
PINC=0b0100000 ???
i dalej robię AND a potem NOT?

1000 0000
0100 0000
teraz AND i otrzymuje z tego:
0000 0000
i następnie NOT:
1111 1111 - czyli stan niski dobrze rozumuje????



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

!( PINC & KEY_PIN)

Najpierw rozwiniemy
KEY_PIN (1<<PC6)

czyli KEY_PIN ma wartość przesuniętej w lewo jedynki o PC6 pozycji co jest równe 0b01000000 (0x07)
teraz operacja

(PINC & KEY_PIN) = ("rejestr wejściowy C" AND 0b01000000 )
czyli to co jest na wejściu portu C uC
AND
konkretny pin uC który chcesz sprawdzić
jeśli sprawdzany pin jest w stanie wysokim to wyrażenie w nawiasach przyjmie TRUE
a jeśli stan niski to FALSE

Całe to wyrażenie jest zanegowane ( ! ) dlatego że sprawdzamy czy pin jest w stanie
niskim (nie naciśnięty klawisz jest w stanie wysokim a jak naciśnięty to zwarty do masy czyli stan niski)
czyli wyrażenie jest TRUE jeśli sprawdzany pin (PC6) jest połączony z masą

Myślę że za bardzo nie zakręciłem (późno już) :)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lut 2012
Posty: 598
Lokalizacja: Warszawa
Pomógł: 13

KEY_PIN czyli (1<<PC6) to nic innego jak wartość 0b01000000

PINC to nic innego jak stany pinów na porcie C mikrokontrolera

& - mnożenie a, ! operator przeczenia logicznego
czyli
0b00101001 - przykładowa wartość pinów na porcie
* 0b01000000 - nasze (1<<PC6)
------------------
0b00000000 - wychodzi wartość fałsz ( bo przecież przycisk na tym porcie zwiera do masy więc na pinie będzie 0 ), ale ona oznacza że przycisk został wciśnięty, jednak warunek nie wykona się bo if potrzebuje aby warunek przyjął wartość true. Dlatego stosujemy negację logiczną w postaci wykrzyknika.

A teraz weź kartkę i rozpisz sobie bity oraz wartości logiczne gdy przycisk nie został wciśnięty ;) , pomoże ci to troszkę bardziej tą "pokrętną" logikę :)

Edit: No to masz jeszcze trzecie wytłumaczenie ;)


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

W rejestrze DDRC ustawiasz tylko kierunek pinów uC
czy dany pin jest wejściem czy wyjściem

AND
czyli tylko dwie jedynki dają jedynkę
każda inna kombinacja da zero


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2014, o 23:38 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 25 sty 2014
Posty: 57
Pomógł: 0

Bardzo dziękuję za pomoc. Już biorę się za rozpisywanie tego wszystkiego na kartce :)



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: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO