Stap 12: Uw eerste programma
Laat doen een basistoepassing alleen maar om ervoor te zorgen dat alles werkt en dat de AVR ok is ingesteld om "hello world" zoals met alle programmering.We zullen niet knoeien met externe klokken, we gaan gewoon om een LED knipperen aan en uit met regelmatige tussenpozen. De code is die hieronder zijn toegevoegd en heet "led_blinker.c", ook in de map zijn de nauwkeurige vertraging bibliotheek we voor dit project en een makefile moeten. U moet bewerken uw makefile overeenstemmen met de chip u - als u dat niet doet, zal het niet werken wanneer u het uploadt!
Laat een kijkje nemen op de code vervolgens:
#include "adelay.h"
#include < avr/io.h >
Eerst verklaren wij wat headers/bibliotheken die we gebruiken. Alles wat u nodig hebt voor dit is de AVR in/out bibliotheek en de nauwkeurige vertraging-bibliotheek.
io init
VOID init_io(void)
{
Alle uitgangen op
DDRC = 0XFF;
}
Deze functie wordt aangeroepen bij het begin van het programma, het neemt geen input en geeft geen waarden als resultaat, maar worden ingesteld de chip klaar voor input- en output-operaties. DDRD verwijst naar het register van richting, in dit geval zetten we het op de hexadecimale waarde van 0xFF oftewel, in binaire, 1111 1111. Hiermee stelt u alle de pinnen op poort C als uitgangen. Het lijkt misschien vreemd dat slechts één opdracht binnen een functie, maar deze krijgt groter aangezien wij meer code toevoegen.
int main(void)
{
init_io();
while(1)
{
PORTC ^ = (1 << 1);
PORTC ^ = (1 << 2);
Delay_ms(1000);
}
return 1;
}
De belangrijkste functie is heel simpel, eerst noemen we de init functie om alles instellen. Vervolgens betreden we een oneindige lus (AVR's moeten nooit verlaten de hoofdfunctie). De volgende functie wordt gebruikt met bitsgewijze operatoren, als u van plan bent om een programmering voor ingesloten apparaten te doen, moet u vertrouwd zijn met dit. Een goede tutorial is hier:. Wat de code doet, in een snuifje, is knevels de op uit status voor Pin 1 en 2 op poort-C.
Voor sommige reden instructables formaten ^ = in een exponent soms, dus excuses. Het hield ook niet de < en > rond omvat (ik denk dat hij denkt dat het is een rogue HTML-tag).
De Delay_ms(1000) functie maakt het programma onderbreken voor 1000ms (of één seconde) en vervolgt.
Het moet dus, vrij duidelijk zijn waar dit gaat, er is een oneindige lus (zoals while(1) altijd waar is) en telkens wanneer de lus een iteratie uitgevoerd, schakelt u de PIN-code en vertraging van een seconde, geven ons een mooi 1Hz blinker.
De makefile hieronder gebruiken, maar de naam 'makefile' eerst.
Volgende we sturen dit naar de programmeur en upload het!