You are on page 1of 5

Ksztette: variszabi

AVR-ek programozsa C nyelven


AVR Studio Az AVR Studio egy fejlesztkrnyezet AVR-ekhez C nyelvre, ami egyben egy fordtt is tartalmaz. Mindenek eltt ltre kell hoznunk egy j projektet, a program elindtsa utn rgtn fel is ajnlja, kattintsunk a New Project gombra, projekt tpusnak vlasszuk az AVR GCC-t. Jobboldalt rjuk be a projekt nevt, ami szkzt nem tartalmazhat, al, az Initial filehoz rjuk azt, hogy main, ez lesz a f .c fjlunk neve, alatta, a Create initial file s a Create folder legyen kipiplva, gy ltrehoz egy mappt is. A Location -nl vlasszuk ki, hogy hov mentse a projektet, majt kattintsunk a Finish gombra, gy rgtn elttnk lesz egy res main.c fjl. A Project/Configuration Options menbe meg kell adni nhny dolgot a projektrl a fordtnak. A Device legrdl menben vlasszuk ki a processzor tpust, alatta a Frequency-ben meg kell adni Hertz-ben, hogy mekkora a processzorunk rajele (pl.: 8MHz = 8000000) alatta az Optimization-nek vlasszuk ki az O1-et. Kattintsunk az OK gombra s kezddhet a programozs. A program legelejre lerhatunk pr informcit a programrl. Itt egy plda:
/********************************************************************** // File Name : Fjl neve.c // Version : Verzi // Description : Lers // Author(s) : Kszt // Compiler : Fordt // IDE : Fejlesztkrnyezet // Last Updated : Utoljra frisstve //*********************************************************************

Logika | bit OR & bit AND ~ bit NOT ^ bit EXLUSIVE OR (XOR) << bit LEFT SHIFT >> bit RIGHT SHIFT Az OR igazsg tblzat 0 OR 0 = 0 0 OR 1 = 1 1 OR 0 = 1 1 OR 1 = 1 Az AND igazsg tblzat 0 AND 0 = 0 0 AND 1 = 0 1 AND 0 = 0 1 AND 1 = 1

Ksztette: variszabi

A XOR igazsg tblzat 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 Vltozk deklarlsa A vltozkat a fprogramban kell deklarlnunk a kvetkez mdon: adattpus vltoznv; Ha tbb vltozt szeretnnk deklarlni ugyan olyan adattpussal, akkor: adattpus vltoznv, vltoznv; Deklarlskor adhatunk rtket is a vltoznak: adattpus vltoznv=rtk; Adattpusok: Signed char -127-tl +126-ig Unsigned char 0-255-ig Uint16_t 065535 Int16_t -32767-tl +32766-ig, Char Karakterek Felttelek If(felttel){ Ha a felttel igaz }else{ Ha a felttel hamis } Ha csak egy utastst adunk meg, azt nem kell kapcsos zrjel kz tenni. Plda: If(PINB & (1<<PINB2)) Ha a PB2 magas szinten van Else Ha a PB2 alacsony szinten van Vgtelen ciklus Az AVR-ekben a program csak egyszer fut le, ezrt a program bizonyos rszeit vgtelen ciklusba kell tennnk. Nhny plda a vgtelen ciklusra: For(;;){ utastsok } While(1){ utastsok } Case utasts switch(valtozo) { case 1: utasts ha valtozo=1; break; case 2: utasts ha valtozo=2; break;

Ksztette: variszabi

default: state = 0; //ha az utols 2-es 3-asra billenti, akkor jraindul a folyamat } Ksleltets void m_delay_10ms(unsigned short val) { ///A _delay_ms csak 65.535 ms-ot kpes vrni unsigned char i; for(i=0;i<val;i++){ _delay_ms(10); } } A m_delay_10ms(szam); fggvnnyel lehet ksleltetni, ha 1 msodpercet kell, akkor pldul: m_delay_10ms(100); vagyis 100X10ms-ot ksleltet. Fggvnyek rsa Elszr a void szval kezdjk, majd egy szkz utn berjuk a fggvny nevt, amiben nem lehet szkz, majd nyitott zrjel, a paramter tpusa majd a paramter egy vltozknt megadva, gy lesz deklarlva, bezrjuk a zrjelt, majd kapcsos zrjelek kz rhatjuk a fggvnyt. Ha a fggvny utols sorba berjuk, hogy return valtozo; akkor a valtozo rtkt adja majd vissza. Plda fggvny: Void nev(unsigned short valtozo){ Utastsok; } Fprogram A fprogramot C-ben is egy fggvnybe rjuk: Int main(void){ Utastsok } I/O portok belltsa A nem belltott portok automatikusan bemenetek lesznek, kimenetnek gy vlasztunk ki egy portot:DDRx = (1<<Py); a Py helyre PINy-et is rhatunk, az x helyre a port betjelt, az y helyre a port szmt rjuk (0..7). gy is csinlhatjuk: DDRx = DDRx | 0x00000000; Ebben az esetben az x helyre kell bernunk a port betjelt, a 8 darab nullval pedig a portokat kln-kln llthatjuk be 07-ig (gy jn ki a 8 bit, azaz 8 port). Ha a bit rtke 1, akkor kimenet, ha a bit rtke 0, akkor bemenet. Azokat a portokat, amiket nem hasznlunk, bemenetknt lltsuk be. Felhz ellenlls bekapcsolsa Minden porthoz tartozik egy bels felhz ellenlls, amit a kvetkez mdon kapcsolhatunk be: PORTx |= (1<<Pxy); az x helyre a port betjelt, az y helyre pedig a port szmt kell rni. Input portok tbillentse A portokat H s L szintre billendhetjk.

Ksztette: variszabi

H szint: PORTx = (1<<Pxy); az x helyre a port betjelt, az y helyre pedig a port szmt kell rni. L szint: PORTx &= ~(1<<Pxy); az x helyre a port betjelt, az y helyre pedig a port szmt kell rni. For ciklus For(i=0;i<x;i++){ Ciklusmag } A ciklus gy x-szer fut majd le. While ciklus While(felttel){ Ciklusmag } A ciklus addig fut, amg a felttel igaz. Makrk Makrkat a program elejn adhatunk meg. #define x y gy az x szt a programban a fordt y-ra cserli. Akkor rdemes hasznlni, ha egy hosszabb utastst sokszor szeretnnk hasznlni s nem akarunk olyan hosszt rni, vagy akkor, ha ksbb vltoztatni szeretnnk az rtkt, gy csak egy helyen kell majd vltoztatni. Nem kell utna pontosvessz. Headerek Klnbz fjlokat (headereket) illeszthetnk be, pldul: #include <avr/io.h> #include <util/delay.h> #include util/delay.h Ha <> kz rjuk, akkor globlis, ha kz, akkor loklis headereket hz be. (Loklis: ugyan abban a mappban helyezkedik el, mint a .c fjl.) Memria Az AVR-eknek van egy EEPROM memrijuk, amelyekben az adatok a tpfeszltsg megszakadsa utn is megmaradnak. Pdaprogramok: EEPROM rsa: void EEPROM_write(unsigned char ucAddress, unsigned char ucData) { /* Wait for completion of previous write */ while(EECR & (1<<EEPE)) ; /* Set Programming mode */ EECR = (0<<EEPM1)|(0>>EEPM0) /* Set up address and data registers */ EEARL = ucAddress; EEDR = ucData;

Ksztette: variszabi

/* Write logical one to EEMPE */ EECR |= (1<<EEMPE); /* Start eeprom write by setting EEPE */ EECR |= (1<<EEPE); } EEPROM olvassa: unsigned char EEPROM_read(unsigned char ucAddress) { /* Wait for completion of previous write */ while(EECR & (1<<EEPE)) ; /* Set up address register */ EEARL = ucAddress; /* Start eeprom read by writing EERE */ EECR |= (1<<EERE); /* Return data from data register */ return EEDR; } (A kt pldaprogram az ATTiny13 adatlapjbl vannak. 18-19. oldal.) Binary to hexadecimal converting
0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111

A biteket ngyesvel csoportostjuk. Pldul a 11000000 felrhat 1100 s 0000-knt, az 1100=C, 0000=0, gy lesz belle: C0.

You might also like