Bygg din egen (billigt!) multi-function Trådlös kamera controller. (12 / 22 steg)
Steg 12: Din första Program
Som med alla programmering, kan göra en grundläggande "hello world" ansökan bara att se till att allt fungerar och att AVR är ok.Vi kommer inte att bråka med externa klockor, vi ska bara få ett LED att blinka på och av med jämna mellanrum. Koden är bifogat nedan och kallas "led_blinker.c", också i mappen är korrekt förseningen biblioteket vi behöver för detta projekt och en makefile. Bör du redigera din makefile att motsvara chip du använder - om du inte, det fungerar inte när du lägger upp det!
Låt oss ta en titt på koden då:
#include "adelay.h"
#include < avr/io.h >
Först förklarar vi vilka rubriker/bibliotek vi använder. Allt du behöver för detta är AVR in/ut och det korrekta dröjsmål biblioteket.
IO init
void init_io(void)
{
Alla utgångar på
DDRC = 0XFF;
}
Denna funktion kallas i början av programmet, det tar ingen ingång och returnerar inga värden, men det sätter upp chip redo för insats- och operationer. DDRD hänvisar till registret över riktning, i detta fall vi sätta den till hex värdet av 0xFF som ligger i binärt, 1111 1111. Detta ställer alla stiften på Port C vara utgångar. Det kan verka konstigt att ha bara ett kommando inuti en funktion, men detta kommer att bli större när vi lägga till ytterligare kod.
int main(void)
{
init_io();
While(1)
{
PORTC ^ = (1 << 1);
PORTC ^ = (1 << 2);
Delay_ms(1000);
}
tillbaka 1.
}
Den huvudsakliga funktionen är verkligen enkelt, först kallar vi init-funktionen för att få allt inrättas. Då vi går in en oändlig loop (AVRs bör aldrig avsluta den huvudsakliga funktionen). Använder funktionen nästa bitvisa operatorer, om du tänker göra några programmering för inbäddade enheter, du bör bekanta dig med detta. En bra tutorial finns här:. Vad koden gör, i en knipa, är växlar den på off status för stift 1 och 2 på Port C.
För vissa skäl instructables format ^ = till en exponent ibland, så ber om ursäkt. Det inte gillade också den < och > runt inkluderar (jag antar att det tycker att det är en rogue HTML-tagg).
Funktionen Delay_ms(1000) gör programmet paus för 1000ms (eller en sekund) och fortsätter sedan.
Så, det borde vara ganska uppenbart där detta kommer, det finns en oändlig loop (som while(1) är alltid sant) och varje gång loopen itererar, det växlar mellan stiftet och försenar en sekund, vilket ger oss en trevlig 1Hz blinker.
Använda makefile nedan, men döp om den till "makefile" först.
Nästa vi skicka detta till programmeraren och ladda upp den!