Atmel start 3: Binky en-PORT, PIN, DDR och LED (9 / 12 steg)
Steg 9: Blinky en-innebörden av uttalandena som kodning
Referenser ger några mycket bra böcker och artiklar för att lära sig C och C++ för Atmel MCU [5-8, 11]. Artiklarna nedan följer i huvudsak i en Binky programmet.
#include: compiler direktiv till att omfatta en header-fil till koden med specificerade funktioner och metoder. De flesta av header-filer kan ses genom att placera muspekaren över namnet och högerklicka och välja "gå till genomförande".
AVR/IO.h: består av andra header-filer (dvs .h sträckningarna) för den specifika MCU [17]. Header-filer inkludera sökord som DDRB, PORTB, PB0, TIMSK och TCNT0. Io.h kan tydligen inte visas med "go till genomförande" beskrivs i punkt 1 ovan.
util/Delay.h: metoder för att fördröja programkörningen. Inkluderar en till dröjsmål millisekunder och en annan för mikrosekunder.
#define x y: A compiler direktivet att ersätta texten y när texten x är möte i programmet. Kompilatorn definitionerna används ofta så att programmet kan lätt ändras utan att söka igenom hela koden för alla platser att ändra en parameter när det behövs.
#define F_CPU 8000000UL: kompilatorn kommer att ersätta 8000000UL för texten "F_CPU" när uppstod i koden. Obs: filen delay.h sidhuvud kräver F_CPU definieras innan du importerar delay.h eftersom den delay.h filen använder F_CPU. 8000000UL hänvisar till klockhastighet. I vårt fall använder vi 8MHz valts av säkringarna. F_CPU av 16000000 skulle dock vara korrekt för en 16MHz kristall till exempel. UL i slutet hänvisar till "osignerade långa" heltal.
int main(void): main är en funktion som alla C och C++ program måste införliva. Programkörningen börjar vid funktionen "viktigaste". Nyckelordet 'int' anger att "viktigaste" kan återvända ett heltal (16bits). Funktioner har argument i parentes (). I det här fallet anger 'void' funktionen inte använder en parameter. Om vi hade nyckelordet void före namnet på funktionen som till exempel i "Ogiltig main(void)" då skulle funktionen returnerar inte ett värde - det skulle vara en subrutin.
Klammerparenteser {}: Spänna av koden definierar funktionen "main" omges av {}. I själva verket de flesta C och C ++ kodning strukturer (till exempel "Stäng" och "if") använda hängslen {} för att ange deras räckvidd. Se till att inkludera dem!
Semikolon: Kodning uttalanden avslutas med den ';'. Uttalandet kan springa över flera textrader som behövs.
_delay_ms(x): en metod (dvs funktion) definieras i delay.h som fördröjer programkörningen av x millisekunder. I vårt fall, x = 1000 och så förseningen är 1000mS som är 1 sekund. Märka tha parenteser surround parametern x.
DDRB = 0b00000001: Data riktning registrera för Port B. B0 blir en utgång och resten kommer att ingångar. För ATTiny 2313A är B0 Pin12.
PORTB = 0b1: uppsättningar B0 1 som översätts till Vcc på fysiskt pin (12) motsvarar B0. En enklare och Rekommenderad sättet att skriva detta uttalande är PORTB = 1; eller PORTB = 0x01;
PORTB = 0X00; Ställer in B0 0 som översätts till 0v på det fysiska pin (12) som motsvarar B0. Detta skulle också kunna skrivas som PORTB = 0;
While(x): The MCU kommer kör satser mellan de efterföljande två motsvarande hängslen {} så länge som meddelandet x är sant. X kan ifrågasätta huruvida två variabler en och b är lika som en == b (Observera de dubbla jämlikar). I vårt fall vill vi LED kontinuerligt blinka så uttalanden mellan klammerparenteserna måste kontinuerligt utföra. Vi kunde skriva "while(true == true)" där "==" är C/C++ operatören kontrollera logiska jämställdhet (ett enda '=' sätt att tilldela något till en variabel som i z = 3). Uttrycket "while(true==true)" skulle orsaka den oändlig loopen att vi vill sedan 'true' är alltid sant. I vårt fall tas 1 till vara en 'sann'. Så kommer att "while(1)" orsaka den oändlig loopen eftersom det är en genväg för att skriva "while(true)" som är en genväg för att skriva "while(true=true)".