180 likes | 359 Views
C keel AVR mikrokontrolleril. Testprogramm. #include <stdio.h> void main() { printf(“Hello world!<br>”); }. Süntaks. // Makro-keel #include <stdio.h> // Deklaratsioonid int i; // Funktsioonid int main( void ) { // Laused printf(“Hello world!<br>”); // Avaldised
E N D
Testprogramm #include <stdio.h> void main() { printf(“Hello world!\n”); }
Süntaks // Makro-keel #include <stdio.h> // Deklaratsioonid int i; // Funktsioonid int main(void) { // Laused printf(“Hello world!\n”); // Avaldised i = 32 + 5 * 4 / (23 % 5); }
Andmetüübid ja muutujad • Baas andmetüübid:char, int, short, long, float • Massiivid:char[], int[][] • Struktuurid:struct { char, int } • Ühendtüüp (jagatud mälu):union { char[2], int }
Baas-andmetüübid short = int int x; // Näidismuutuja tüübist int
Massiivid ja struktuurid unsigned char array[3]; // Ühemõõtmeline massiiv unsigned int table[10][20]; // Kahemõõtmeline massiiv // Struktuurne muutuja struct { int speed; unsigned int mass; } car; // Struktuurne andmetüüp typedef struct { int x, y; } vector; vektor points[20]; // Massiiv struktuurist
Funktsioonid // Funktsioon [andmetüüp] nimi([andmetüüp] argument1, [andmetüüp] argument2) { /* Funktsiooni keha */ } • Funktsioon tagastab määratud andmetüübiga väärtuse. • Erand on andmetüüp void mis ei oma väärtust. • Funktsiooni kehas võivad olla samad deklaratsioonid mis failis. int summa(int a, int b) { return a + b; }
Avaldised // Avaldis operand1 [operaator] operand2 • Operand on konstant, muutuja või funktsioon. • Operandi asemel võib omakorda avaldis olla. • Avaldistest tekib väärtus mida saab omistada muutujatele, anda funktsiooni argumentideks või tagastada funktsioonis. int y = 0x04; int x = ruut(4) * (5 + y << 2);
Operaatorid • Aritmeetika:+ - / * % • Loogikaavaldised:! && || • Bitiloogika:~ & | ^ • Bitinihutus:<< >> • Võrdlus:== != <= >= • Omistus:= += -=
Laused • Tingimuslause:if ([avaldis]) [lause] • Valikulause:switch ([avaldis]) { case [väärtus]: break; } • Tsükkel:for ([lause]; [avaldis]; [lause]) { }while ([avaldis]) {}
Tingimuslause // Ühe tingimuse võrldus if ((2 + 1) > 2) x = 5; // Muul-juhul lause if (x == 5) { y = 2; } else if (x == 6) { y = 3; } else { y = 0; }
Valikulause int y; switch (y) { case 1: funktsioonA(); break; case 2: funktsioonB(); break; case 3: funktsioonC(); break; case 4: // Täitmisele tuleb esimene järgnev lause case 5: funktsioonYhine(); break; default: muu_funktsioon(); // Kõik muud juhtumid }
Tsükkel int i, x = 5; // Tsükkel toimub 5 korda – ehk seni kuni avaldis on täidetud. for (i = 0; i < 5; i++) { x += 2; // Liitev-omistav operaator } // Siinkohal tuleb x väärtuseks 15 printf(“%d”, x);
Tsükkel while (1) { // Lõputu tsükkel sest avaldis on alati tõene } While (1) { // Kuigi tsükkli avaldis on alati tõene on break käsuga võimalik väljuda tsüklist if (x > 100) break; if (x < 10) continue; // Kui x on alla 10, siis järgnev kood täitmisele ei lähe, vaid tsükklit alustatakse otsast y++; }
AVR siinide kasutamine Siinid: DDRA - Suund PORTA – Väljund PINA – Sisend // Viigud 0-3 väljundiks, 4-7 sisendiks DDRA = 0x0F; // Väljundisse arv 10 PORTA = 10; // = 0x0A // Sisendi lugemine X = (PINA & 0xF0) >> 4;
AVR viikude manipuleerimine // Viigu üheks seadmine PORTA |= (1 << BITT); // Viigu nullimine PORTA &= ~(1 << BITT); // Viigu inverteerimine PORTA ^= (1 << BITT); // Viigu väärtuse lugemine X = (PINA & (1 << BITT) ? 1 : 0);