cenenzo Skrevet 9. mars 2014 Del Skrevet 9. mars 2014 (endret) DETTE ER kode for ADC i C++ ADMUX = (1 << REFS0) | (1 << ADLAR) | (1 << MUX0); while(1) { ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADIF) | (1 << ADPS2); while (!(ADCSRA & 0x10)); Jeg klarer ikke helt å skjønne meg på hva 1 << REFS0 og resten av koden. kan noen forklare meg? klarer heller ikke forstå meg helt på hva left og right shift er. Endret 9. mars 2014 av cenenzo Lenke til kommentar
Emancipate Skrevet 9. mars 2014 Del Skrevet 9. mars 2014 klarer heller ikke forstå meg helt på hva left og right shift er. Kjøp deg en bok om C. Overfladisk forklart så er en variabel konstruert av flere bit som kan være 0 eller 1: 00000000 Vanligvis representerer kombinasjonen et tall, men i denne sammenhengen er det hvilke bit som er 0 og hvilke som er 1 som er viktig. Shift left dytter bits til venstre, Shift right dytter bits til høyre, det antallet plasser som står til høyre for shift-operatoren. 0001 << 1 gir 0010 Den lyseblå 0-en faller ut og en ny null kommer inn på høyre side. or-operatoren (| pipetegn) fungerer sånn at to tall "slås sammen" bit-mot-bit på en sånn måte at hvis minst én av de motsvarende bits er 1 blir resulterende bit 1, ellers 0: 0101 | 0011 = 0111 Lenke til kommentar
Emancipate Skrevet 9. mars 2014 Del Skrevet 9. mars 2014 Funksjonelt kan man forklare dette annerledes. En forklaring som passer på akkurat dette bruksområdet av shift og or. En variabel eller parameter skal inneholde mange forskjellige av/på-innstillinger. Man kan bruke en variabel per instilling, men hardware er ofte lagd mer effektivt, med mange innstillinger i en variabel, en innstilling per bit. Hvis en bit er 0 er den innstillingen av, hvis en bit er 1 er den innstillingen på. Hvilken bit som representerer hvilken innstilling står i manualen til innstillingene/apiet/enheten som programmeres. 1 << KONSTANT_SOM_HAR_NAVNET_PÅ_INSTILLINGEN slår på denne innstillingen. Konstantene er definert i en headerfil fra produsenten. Operatoren | (or) brukes til å kombinere innstillingene til én variabel/ett parameter. Eksempel: innstilling = 1 << LAMPE1_PÅ | 1 << LAMPE3_PÅ | 1 << FLUSH_TOILET; send_til_enhet(innstilling); Lampe 1 slås på, Lampe 2 er av (ettersom vi ikke slo den på), lampe 3 er på, og toalettet skylles ned. Dette funger selvsagt bare dersom vi programmerer et toalett som kan programmeres på denne måten og har inkludert de tilhørende header-filene, jfr. api-dokumentasjonen til toalettet. Lenke til kommentar
cenenzo Skrevet 9. mars 2014 Forfatter Del Skrevet 9. mars 2014 (endret) Funksjonelt kan man forklare dette annerledes. En forklaring som passer på akkurat dette bruksområdet av shift og or. En variabel eller parameter skal inneholde mange forskjellige av/på-innstillinger. Man kan bruke en variabel per instilling, men hardware er ofte lagd mer effektivt, med mange innstillinger i en variabel, en innstilling per bit. Hvis en bit er 0 er den innstillingen av, hvis en bit er 1 er den innstillingen på. Hvilken bit som representerer hvilken innstilling står i manualen til innstillingene/apiet/enheten som programmeres. 1 << KONSTANT_SOM_HAR_NAVNET_PÅ_INSTILLINGEN slår på denne innstillingen. Konstantene er definert i en headerfil fra produsenten. Operatoren | (or) brukes til å kombinere innstillingene til én variabel/ett parameter. Eksempel: innstilling = 1 << LAMPE1_PÅ | 1 << LAMPE3_PÅ | 1 << FLUSH_TOILET; send_til_enhet(innstilling); Lampe 1 slås på, Lampe 2 er av (ettersom vi ikke slo den på), lampe 3 er på, og toalettet skylles ned. Dette funger selvsagt bare dersom vi programmerer et toalett som kan programmeres på denne måten og har inkludert de tilhørende header-filene, jfr. api-dokumentasjonen til toalettet. 1 << REFS0 , så her sånn er den på? siden det står 1? for jeg forstår det med high og low men << >> vil det forandra på det 1 tallet som allerede står der? altså 1 tallet i 1 << REFS0 tror jeg skjønte mer av det, nå som jeg fikk lest eksemplene dine om lampene ! Endret 9. mars 2014 av cenenzo Lenke til kommentar
Jaffe Skrevet 9. mars 2014 Del Skrevet 9. mars 2014 Litt vanskelig å skjønne hva du spør om, men 1 << REFS0 betyr at tallet 1 bitshiftes til venstre, til den posisjonen hvor REFS0 befinner seg i registeret du skriver til. (REFS0 er ikke noe annet enn en konstant som er definert en eller annen plass, sikkert i ei headerfil som du inkluderer. Du kunne like gjerne skrevet 1 << 6, siden REFS0 viser seg å befinne seg i bit 6 av registeret.) Lenke til kommentar
Kakebakelate Skrevet 9. mars 2014 Del Skrevet 9. mars 2014 Hva med å slå opp i databladet til den aktualle mikroprossesoren? Der bruker det å stå ganske godt forklart hva som skjer. Iallefall om du har en AVR. 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å