pachu80 napisał:
1. Czy jest jakaś różnica miedzy używaniem sbi(),cbi() a DDR,PORT i która opcje lepiej stosować ?
to nie ma za wiele wspólnego ze sobą, bo sbi() cbi() służą do ustawiania, kasowania wybranych bitów natomiast nazwy DDRx, PORTx oraz PINx to są nazwy rejestrów dzięki którym dokonujemy komunikacji z procesorem.
DDRx - służy do ustawiania kierunku pinów portu
PORTx - służy do wystawiania stanu 0 lub 1 na pinie jeśli jest on ustawiony jako WYJŚCIE za pomocą powyższego rejestru DDRx (albo do podciągania programowego pinu do VCC)
PINx - z tego rejestru odczytujemy natomiast stan jaki jest na pinie który jest ustawiony jako wejście (np przy sprawdzaniu stanu klaiwszy)
pachu80 napisał: 2. Jak dokładnie działają & | ^ ~ proszę o wytłumaczenie jak najprościej
To są operatory służące m.in do operacji na bitach ale nie tylko, tu warto sięgnąć po jakąś książkę - nawet taką do czystego języka C dla komputerów PC albo do wikipedii - będzie sporo dokładnych opisów
pachu80 napisał: 3. I ostatnie pytanie jak lepiej pisać PORTB = _BV(1) | _BV(2) czy może PORTB = 0x06 jest jakaś różnica ?
Jeśli już wybierać spośród tych dwóch sposobów które przedstawiłeś to korzystaj z makr _BV(). Aczkolwiek jest jeszcze trzeci i wg mnie o wiele lepszy sposób, np jeśli chcesz odwołać się do jakiegoś bitum np ustawić na jedynkę to używaj tzw operatorów przesunięć bitowych, o tak:
Zaloguj się, aby zobaczyć kod
ale nigdy nie stosuj zapisu typu:
Zaloguj się, aby zobaczyć kod
bo to jest masakra i najgorszy styl programowania w C.
Pomyśl sobie gdy np będziesz miał ustawić preskaler i tryb CTC w rejestrze konfiguracyjnym timera to jaki zapis powie ci dużo więcej taki?
Zaloguj się, aby zobaczyć kod
czy może taki:
Zaloguj się, aby zobaczyć kod
no chyba ten drugi prawda? bo od razu widzisz jasno z kodu, jakie bity ustawiasz
