Gå til innhold

ADC C++ kode enkel forklaring


Anbefalte innlegg

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 av cenenzo
Lenke til kommentar
Videoannonse
Annonse

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

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

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 av cenenzo
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...