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



Teraz jest 7 lut 2025, o 21:02


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 26 paź 2012, o 08:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Witam,
Aż wstyd pytać ale mam pewien problem:)

Załóżmy, że chce ustawić sobie wyjścia portu B w ten sposób:
Obrazek

Można to zrobić na kilka sposobów:
Zapis w jednej linii:
1)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


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


Ale załóżmy, że chcemy sobie zdefiniować numery portów do linii danych (np. nie po kolei:)
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


To teraz znowu, aby ustawić wyjścia portu w taki sposób jak na obrazku, to musimy użyć takiego zapisu:
Zapis w 2 liniach:

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


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


No i teraz moje główne i zasadnicze pytanie:

Czy jeśli mamy sobie zdefiniowane piny, to czy w jakiś magiczny sposób da się ustawić port, tak aby użyć zapisu w jednej linii:

Chodzi mi o coś takiego np. (WIEM, ŻE TEN ZAPIS JEST BŁĘDNY!!!) (bo i tak jeśli port będzie wcześniej np. na 0xff to nie ustawi tych 0.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Da się to jakoś zrobić w jednej linii?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 paź 2012, o 09:02 
Offline
Moderator
Avatar użytkownika

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

Trzeba użyć maskowania, masz przykład tego w pierwszej książce i w kodzie na DVD przy okazji multipleksowania wyświetlacza LED, gdzie omawiam wprawdzie kolejne 4 bity ale co za problem zrobić maskę na dowolne bity, a więc:

Kod:
#define MASK ( (1<<PB2) | (1<<PB3) | (1<<PB5) | (1<<PB6) )


i teraz w kodzie, chcemy np wszystkie bity z tej maski ustawić na 1

Kod:
PORTB = (PORTB & MASK) | ( 0xFF & ~MASK );


zresztą w tym przypadku jest jeszcze lepiej bo można zamiast 0xFF używać jakiejś zmiennej dzięki której możesz jeszcze niektóre z tych 4 bitów ustawiać wg życzenia na 0 a niektóre na 1, np:

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



ale jeśli chcesz skasować naraz szybko wszystkie bity maski:

Kod:
PORTB &= ~MASK;


Autor postu otrzymał pochwałę

_________________
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: 26 paź 2012, o 09:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 13 paź 2011
Posty: 581
Pomógł: 17

Ok, dzięki za odpowiedź.
Kompletnie zapomniałem o maskach :D



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 8 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