Diskuze: Céčko programování ATmega16
Člen
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
Toto jsou Cčkové operátory a s atmegou vůbec nesouvisí. Jsou definovány následovně:
Takže jsou to vlatně jen takové zkratky.
Ja len predpokladám, že poznáš rozdiel medzi
& a &&
a |
Díky to samozřejmě
vím.
¨
Jen nechápu proč by prostě nešlo udělat
DDRB = 0b11111101;
místo
DDRB &= 0b11111101;
Šlo, ale autor kódu zjevně chce změnit pouze druhý (index 1) bit registru DDRB, ne celý bajt, protože jej zajímá pouze pin PORTB0.
trochu to rozvedu
jedná se o takzvané maskování - slouží ke čtení-zápisu jenom těch bitů o které máš zájem
takže konkrétně DDRB &= 0b11111101; nastaví nulu(nuly) tam kde chceš - zde bit 1 - ostatní nechá v původním stavu
stejně tak PORTB |= 0b00000010; nastaví jedničku(jedničky) jen tam kde chceš
tento způsob je sice "názorný" , ale jak je vidět tak hlavně matoucí a v praxi se nepoužívá - už u 16, ale hlavně 32 bitových registrů by byl značně nepřehledný
proto se používá tahle forma:
zápis nuly DDRB &=~(1<<1);
zápis jedničky PORTB |= (1<<1);
abys to pochopil a nemátly tě ty jedničky tak zápis na bit 6 by byl PORTB |= (1<<6);
pro bity 1 a 6 by to bylo PORTB |= (1<<1) | (1<<6);
jinak něco si přečti o tom jak fungují registry DDRx, PORTx a k nim ještě patří PINx - třeba tady
Je to ale spíš pro pochopení jak to funguje - nevím jaké máš IDE , ale většina z nich má přístup k jednotlivým bitům buď pomocí
PORTB.6 = 1;
DDRB.6=0;
nebo arduino má funkce
bitWrite(DDRB, 6, 0);
bitWrite(PORTB, 6, 1);
ale tam by nastavení pinu jako vstupu s pulllupem vypadalo takto
pinMode(6,INPUT_PULLUP);
Nechcem ho zaznavat, ale aj napriek tvojmu vysvetleniu tomu myslim nebude rozumiet.
Díky moc konečně nějaké slušné vysvětlení
Zobrazeno 9 zpráv z 9.