HOME O MNĚ KOLO ELEKTRONIKA RODINA FOTOGALERIE ODKAZY NOVINKY STÁHNOUT NAPIŠTE MI HLEDAT
  Elektronika  
   

 Základy programování mikroprocesorů v jazyce C

1. Úvodem

Během studií jsem získal základní zkušenosti s programováním mikroprocesorů v assembleru. Po několika letech jsem vrátil zpět k jednočipům, avšak učím se je programovat v jazyce C. Výhodou může být přehledný kód, který s drobnými úpravami snadno přepasujeme na jiný typ mikroprocesoru. Přeložený kód z jazyka C sice může být pomalejší oproti rutinám, napsaným přímo v assembleru. Používám program CodeVision AVR, jako editor kódu a překladač. Existuje řada jiných překladačů, ale tento je jednoduchý a bezproblémový. Mikroprocesor programuji přes ISP rozhraní programátorem Presto od firmy ASIX (www.asix.cz). Programátor je vybaven USB rozhraním, podpora mnoho mikroprocesorů a v neposlední řadě stálá aktualizace a podpora výrobce. Programátor Presto mohu jen doporučit

1.1 Řešené příklady pro mikroprocesor AVR

 1.2 Základní operace v jazyce C:

Provádí negaci 

++ 

přírůstek (i++ je něco jako i = i+1) 

-- 

dekrement (i--je něco jako i = i-1) 

==

je rovno (používáme pro testování podmínky!)

=

přiřazovací příkaz

^=

mění význam je rovno / není rovno (toggle)

!=

není rovno

&

bitový součin AND

&&

AND ... logický součin

|

Bitový součet OR

||

Logický součet OR

^

Exklusive OR (XOR)

~

Bit NOT

<< 

bit LEFT SHIFT (posun)

>> 

bit RIGHT SHIFT (posun)

@

%

 

//

Poznámka, komentář na jednu řádku 

/*bla, bla*/ 

Komentář přes více řádek 

 Hexadecimálního zadání čísla: 0x13

V jazyce C lze používat k zápisu čísel desítkovou nebo hexadecimální soustavu. Dvojková soustava není v jazyce C podporována.

1.3 Bitový nebo bytový přístup - přístup k I/O bráně nebo paměti:

Jednočipy Atmel umožňují bitový přístup na své vstupní / výstupní piny. K celé bráně (8-mi I/O pinům) lze přistoupit adresou jednoho bytu.

Bytový zápis:

PORTB = 0x33;  // tím jsme zapsali, že chceme aktivovat výstup B0, B1, B4 a B5

Bitový zápis:

PORTB.5 = 1; // takto jsme nahodili pin B5

Bitové čtení:

DATA = PINB.2;  // stav na pinu B2 jsme uložili do proměnné data

Ale přístup k proměnným v paměti je pouze bytový. To znamená, že když potřebujeme změnit jeden bit jedné proměnné, musíme provést tzv. maskování a to s celým bytem:

DATA = DATA&0x01;  // smazání celého byte, ponechání hodnoty v prvním bitu

DATA = DATA&0x0f;  // smazání celého 1/2 byte, ponechání spodní poloviny proměnné data

Příklad:

Vyhodnocení stavů na vstupním pinu s následnou změnou jednoho bitu v proměnné DATA.

1)

DATA = 0;

If (INPUT == 1) DATA = DATA|0x01;

     else DATA ==DATA&0xfe;    // aby se na prvni bit zapsala nula

2)

DATA = 0;

If (INPUT == 1) DATA = DATA|0x01;

     else DATA ==DATA&~(0x01);   // provedena bitova inverse, prehledne elegantni reseni

3)

DATA = 0;

DATA+=INPUT?1:0              // elegantni reseni

4) nemusí fungovat, je třeba ověřit

DATA = 0;

DATA = DATA | (unsigned char)INPUT;

5) to samé, ale zapsáno jednodušší formou

DATA = 0;

DATA  |=  (unsigned char)INPUT;

 1.4 Cykly a podmínky v jazyce C

 

 

 

 
     
                  (c) 2008 Microhead, resolution 1280x1024, optimized for Internet Explorer and Mozilla Firefox