henrik^ Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 Heisann! Jeg sitter her og titter litt på programmering av mikrokontrollere. Jeg har pittebittelitt kunnskaper om C, og forstår det aller meste i koden jeg nå leser, untatt dette: #define LEDON PORTB &= ~(1<<4) Er det noen som kan forklare denne for meg? Det er egentlig fra og med '&=' jeg ikke forstår. Hva brukes shift left til i denne sammenheng? Hele koden er her: http://www.avrtutor.com/tutorial/thermo/led.php Lenke til kommentar
GeirGrusom Skrevet 3. desember 2009 Del Skrevet 3. desember 2009 00001 <<4 10000 ~ 01111 Lenke til kommentar
JeffK Skrevet 4. desember 2009 Del Skrevet 4. desember 2009 Det er sånn forbanna makro-hor som man finner i all lavnivåkode. LEDON blir en makro som ekspanderer til PORTB &= ~(1<<4). PORTB er sansynligvis en makro som ekspanderer til en hensiktsmessig deklarert(volatile o.l.) peker. Denne pekeren peker på et register som styrer en PIO port(Memory-mapped I/O). LED'en er i en "aktiv lav" konfigurasjon, dvs. den lyser når PIO pinnen er lav. Det man ønsker å gjøre, er å slå av den bit'en som tilsvarer den aktuelle pinnen. Dette kan man gjøre med en bitmaske og bitwise operatorer. Siden x & 0 = 0 og x & 1 = x kan man ANDe alle de bitene man ikke vil endre med 1, og biten man vil slå av med 0. Dvs., om man vil slå av bit nr. 5, så kan man gjøre slik: PORTB = PORTB & 0b11101111 evt. den mer kompakte notasjonen PORTB &= 0b11101111 eller, siden 0b11101111 = ~0b00010000 = ~(1<<4) PORTB &= ~(1<<4) Lenke til kommentar
BlueEAGLE Skrevet 5. desember 2009 Del Skrevet 5. desember 2009 I C så vil en operator før et likhetstegn gjøre at du utfører operatoren på variabelen før operatoren med verdien etter likhetstegnet. Altså: variabel += 4 er det samme som variabel = variabel + 4 På samme måte som PORTB &= ~(1<<4) er det samme som PORTB = PORTB & ~(1<<4) Tilde i C sin binærlogikk er en invertering som gjør alle 0 til 1 og omvendt. << er bit-skifte-operator i C. Det vil si at den "flytter" bitene i et tall mot venstre eller >> skifter mot høyre. For mer informasjon se: http://www.eskimo.com/~scs/cclass/int/sx4ab.html Lenke til kommentar
svatt Skrevet 6. desember 2009 Del Skrevet 6. desember 2009 (endret) Nvm, det jeg skrev ble ikke helt riktig. Endret 6. desember 2009 av svatt Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå