AVRSH: Ett kommando tolken skal för Arduino/AVR. (2 / 6 steg)
Steg 2: Läsa och skriva register
Manipulera AVR registrerar medan du kör
För att få en lista över alla kända register på din Arduino, skriv:
skriva ut register
och du får en utskrift som ser ut så här...
Jag vet om följande register:
TIFR0 PORTC TIFR1 PORTD TIFR2 DDRD
PCIFR DDRB EIFR DDRC EIMSK PINB
EECR PINC EEDR PIND SREG EEARL
GPIOR0 EEARH GPIOR1 GTCCR GPIOR2 TCCR0A
TCCR0B TCNT0 OCR0A OCR0B SPCR SPDR
ACSR SMCR MCUSR MCUCR SPMCSR WDTCSR
CLKPR PRR OSCCAL PCICR EICRA PCMSK0
PCMSK1 TIMSK0 TIMSK1 TIMSK2 ADCL ADCH
ADCSRA ADCSRB ADMUX DIDR0 DIDR1 TCCR1A
TCCR1B TCCR1C TCNT1L TCNT1H ICR1L ICR1H
OCR1AL OCR1AH OCR1BL OCR1BH TCCR2A TCCR2B
TCNT2 OCR2A OCR2B ASSR TWBR TWSR
TWAR TWDR TWCR TWAMR UCSR0A UCSR0B
UCSR0C UBRR0L UBRR0H UDR0 PORTB
root
För att se hur de enskilda bitarna anges i något register, Använd kommandot echo eller katt :
katt % GPIOR0
Här ber jag kommandotolken som ska visas, eller echo, innehållet i de allmänna ändamål i/o-registrera #0. Observera procenttecken (%) framför namnet register. Du behöver detta för att indikera på tanken att detta är ett reserverat nyckelord som identifierar ett register. Typiska utdata från en echo-kommandot ser ut så här:
GPIOR0(0x0) inställd [00000000]
Visar namnet på registret, det hexadecimala värdet i registret och den binär representationen av registret (visar varje bit som en 1 eller 0). Ange en viss bit i något register med den "index av" operatör []. Till exempel, låt oss säga jag vill ha den 3: e lite till 1.
% GPIOR0 [3] = 1
och skalet kommer att ge dig ett svar som anger det är action och resultatet:
GPIOR0(0x0) inställd [00000000] -> (0x8) inställd [00001000]
Dont' glömma procenttecknet berätta skalet du arbetar med ett register. Observera att genom att 3: e biten, som beror på 4 bitar i vår AVR använder ett nollbaserat index. Med andra ord räkna till 3: e lite du räkna 0, 1, 2, 3, som är den 4: e platsen, men den 3: e lite. Du kan rensa lite på samma sätt genom att ställa in lite till noll.
Genom att ställa in bitar som denna kan du ändra hur din AVR i farten. Till exempel genom att ändra CTC timern matcha värdet som hittades i OCR1A. Du kan också kika in särskilda inställningar som du måste kolla programmässigt i din kod, som det UBBR värdet för din baudfrekvens.
Arbeta med DDRn, PORTn och PINn
I/O pins tilldelas också till register och kan ställas in på exakt samma sätt, men en speciell syntax har skapats för att arbeta med dessa typer av register.
I koden, det är en normal process för, säg, vrida på en LED eller annan enhet som kräver en digital hög eller låg. Det kräver att Data riktning registrera att ange PIN-koden är för utdata, och sedan skriva en 1 eller 0 till visst lite i rätt port. Förutsatt att vi har en lysdiod ansluten till digital pin 13 (PB5) och vi vill slå på den, här är hur man gör det när din AVR körs:
ställa in pin pb5 outputwrite pin pb5 hög
Produktionen, förutom att kunna se din LED kom igen, skulle se ut så här:
root Ställ in pinkodsskydd pb5 outputSet pb5 för outputroot skriva pin pb5 highWrote logic hög till pin pb5
"Root är den avsats snabb som visar det är klar att ta emot kommandon från dig. Om du vill inaktivera LED, skulle du helt enkelt skriva en låg till stift. Om du vill läsa den digitala indata från en PIN-kod, kommandot Läs. Med hjälp av våra ovanstående exempel:
roten läsa pin pb5Pin: pb5 är hög
Alternativt kan du bara echo pin registret som styr det pin porten. Till exempel om vi har dip-switchar ansluten till digital stift 7 och 8 (PD7 och PD8), kan du skicka kommandot:
ECHO % PIND
och skalet skulle sedan Visa innehållet i registret, visar du alla input/output stater anslutna enheter och om tillståndet i växeln var på eller av.