Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování mikropočítačů Programování HCS08 v C Obsluha vstupů a výstupů, displej.

Podobné prezentace


Prezentace na téma: "Programování mikropočítačů Programování HCS08 v C Obsluha vstupů a výstupů, displej."— Transkript prezentace:

1 Programování mikropočítačů Programování HCS08 v C Obsluha vstupů a výstupů, displej

2 Jazyk C C je jazyk vyšší úrovně než assembler Zdrojové kódy mají příponu C (např. main.C) Datové typy: char = znak (1 B) int = celé číslo (2 B) long = celé číslo (4 B) float = reálné číslo (4 B) - podporováno pokud při vytváření projektu povolíme „floating point support“. Výchozí nastavení je program bez podpory čísel v plovoucí řádové čárce.

3 Vytvoření projektu v C Vybereme C zde Ostatní volby jsou stejné jako u projektu v ASM

4 Kostra programu v C Direktiva #include = vložení souboru Funkce main = hlavní program

5 Obecné programové konstrukce proměnná, pole, cyklus, funkce…

6 Program – aritmetické operace Definice globálních proměnných Kód programu

7 Program 2 – pole a cyklus void main(void) { int c1 = 5; int c2 = 3; int vetsi; int i; int M[5]; EnableInterrupts; /* enable interrupts */ /* include your code here */ // ulozi vetsi z obou cisel do promenne vetsi if ( c1 > c2 ) vetsi = c1; else vetsi = c2; for ( i = 0; i< 5; i++ ) // Vynuluje pole M { M[i] = 0; } for(;;) { __RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ } Program  Program určuje, které z čísel c1 a c2 je větší, to pak uloží do proměnné vetsi.  Druhá část programu nuluje pole M o pěti prvcích.

8 Program 3 - funkce Program pomocí funkce JeSude počítá sudá čísla void main(void) { int c1 = 5; int c2 = 4; int nSude; /* include your code here */ nSude = 0; if ( JeSude(c1) == 1 )// JE c1 SUDE CISLO? nSude = nSude + 1;// ano, pak ink. pocitadlo if ( JeSude(c2)) nSude++; for(;;) { __RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ } // Podprogram, funkce, JeSude // Vraci 1 jestlize je predane cislo sude, // 0 pokud neni int JeSude(int cislo) { int zbytek; zbytek = cislo % 2; // zbytek po celociselnem del. if ( zbytek == 0 ) return 1; else return 0; }

9 Úkoly k procvičení Úkol 1: Vytvořte program, který vyhledá v poli pěti čísel minimální a maximální hodnotu a uloží je do proměnných min a max.

10 Programová obsluha diskrétních vstupů a výstupů LED a Tlačítka

11 Obsluha vstupů a výstupů Definice registrů portů, časovače atd. viz #include „derivative.h“ -> #include Např. port F (LED), datový registr: PTFD = byte, tj. celý port F nebo PTFD_PTFD0, PTFD_PTFD1… = bity portu F Příklad použití: nastavit bit 0 portu F jako výstup. PTFDD = 0x01;// 0x01 = hexadecimální číslo = %00000001 nebo PTFDD_PTFDD0 = 1;

12 Program - blikání LED Zadání: Vytvořte program, který bude blikat LED1. (LED1 je připojena na portu F, bit 0) Postup činnosti programu: 1)Nastavit bit 0 portu F jako výstup 2)Zapsat do něj 0 tj. rozsvítit LED 3)Počkat cca 0,5 s 4)Zapsat do bitu 0 portu F log. 1 tj. zhasnout LED

13 Program – blikání LED void main(void) { PTFPE = 0;// vypnuti pull-up rezistoru PTFDD_PTFDD0 = 1; // PTF0 výstupní režim EnableInterrupts; /* enable interrupts */ while (1) { PTFD_PTFD0 = 0;// rozsvitime LED1 cekej(); PTFD_PTFD0 = 1;// zhasneme LED1 cekej(); } for(;;) { __RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ /* please make sure that you never leave this function */ } // Cekaci smycka void cekej() { unsigned int i; for (i = 0; i < 0xFFFF; i++ ) __RESET_WATCHDOG(); }  Program bliká LED1  Blikání je realizováno pomocí čekací smyčky ve funkci cekej().

14 Binární vstupy – tlačítka Tlačítka jsou připojena na port A SW1 – PTA4, SW2 – PTA5 SW3 – PTA6, SW4 – PTA7  Port je řízen pomocí 3 registrů: PTAD – datový registr portu A, při jeho načtení získáme stav pinů portu, zápisem změníme stav výstupních pinů. PTADD – řídicí registr portu A, slouží pro konfiguraci jednotlivých pinů do vstupního nebo výstupního režimu. (0=vstupní, 1=výstupní režim) PTAPE – registr pro aktivaci interních „pull-up“ rezistorů (0=pull-up deaktivován, 1=pull-up aktivován).

15 Příklad - tlačítka Zadání: Vytvořte program, který při stisku tlačítka SW1 zapne nebo vypne LED1.

16 Postup v programu Nastavit PTA4 jako vstup (tlačítko SW1) Nastavit PTF0 jako výstup (LED1) Ve smyčce testovat stav vstupního pinu PTA4. Pokud je 0, tlačítko je stisknuto, pokud je 1, tlačítko není stisknuto.

17 Program - tlačítko void cekej(void); void main(void) { PTADD_PTADD4 =0; // PTA4 vstupni rezim PTAPE_PTAPE4 = 1;// pull-up pro PTA4 zapnut PTFD = 0xFF; // zhasneme LED diody PTFDD_PTFDD0 = 1;// PTF0 vystupni rezim PTFPE = 0x00;// pull-up na portu F vypnuty EnableInterrupts; /* enable interrupts */ for(;;) { // pokud je stisknuto tlacitko if ( PTAD_PTAD4 == 0 ) { // pokud LED sviti, zhasnout if ( PTFD_PTFD0 == 0 ) PTFD_PTFD0 = 1; else PTFD_PTFD0 = 0; // jinak rozsvitit cekej();// kvuli opakovanemu vyhodnoceni stisku… } __RESET_WATCHDOG(); /* feeds the dog */ } /* loop forever */ }

18 Využití displeje v jazyku C

19 Displej Displej – jakákoliv jednotka určená pro zobrazování požadovaných dat. Např. televizor, počítačový LCD monitor, atd. Vlastnosti displeje kitu M68EVB908GB60 LCD, 2 řádky, 16 znaků na každém řádku Matice 5x7 bodů pro každý znak Připojen na portu G a E (PTG3-7, PTE6-7) Až 8 uživatelsky programovatelných znaků

20 Programová obsluha displeje 2 možnosti programové obsluhy: A) Přímé řízeníB) Pomocí ovladače Ovladač: programové vybavení pro práci s hardware, sada podprogramů pro práci s HW zařízením. Ovladač Displej Náš program Registry displeje Zápis kódů požadavků a adres dat do registrů Displej Náš program Registry displeje Požadavky typu vypiš text, smaž displej atd. (podprogramy)

21 Ovladač displeje Ovladač = knihovna podprogramů Před použitím je nutno přidat do projektu zdrojový kód ovladače disp_gb60.asm a soubor definic funkcí ovladače disp_gb60.inc pro program v assembleru, nebo disp_gb60.h pro program v C.

22 Práce s displejem v C Úkol: Program vypíše na displej text „Ahoj Svete“ a na druhý řádek pak znaky U, T, B na pozice 3, 6 a 9. Budeme potřebovat soubory ovladače: disp_gb60.asm – zdrojový kód v assembleru disp_gb60.h – hlavičkový soubor pro C Vytvoříme tzv. „mixed project“ - assembler a C. Hlavičkový soubor disp_gb60.h totiž pouze definuje prototypy pro funkce ovladače napsané v assembleru. Program z C tedy bude volat funkce v assembleru.

23 Funkce pro práci s displejem void dinit (void) – provede inicializaci displeje př.: dinit(); void dcls (void) – vymazání displeje př.: dcls(); void setcursor (char radek, char sloupec) – nastavení kurzoru na požadovanou pozici př.: setcursor(1,10); void douta (char znak) – výstup znaku na displej př.: douta('A'); void dtext (char* string) – výstup textového řetězce na displej př.: dtext("testovaci text");

24 Projekt pro práci s displejem

25 Vložení souborů ovladače 1. Zde vybrat disp_gb60.h a disp_gb60.asm 2. Tlačítkem přidat vybrané soubory do projektu

26 Program - displej void main(void) { char znak = 'U'; char* text = “Ahoj Svete"; EnableInterrupts; /* enable interrupts */ /* include your code here */ asm_main(); /* call the assembly function */ dinit();// Inicializace displeje dcls();// Smazani displeje dtext(text); // vypis textoveho retezce setcursor(2,3);// nastaveni kurzoru na 2 radek, 3 sloupec douta(znak);// vypis znaku setcursor(2,6); douta('T'); znak = 'B'; setcursor(2,9); douta(znak); while(1) __RESET_WATCHDOG(); } #include /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ #include "main_asm.h" /*interface to the assembly */ #include "disp_gb60.h" // hlavickovy soubor ovladace disp

27 Převod čísla na text Často potřebuje zobrazit na displeji hodnotu nějaké proměnné tj. číslo. K tomu můžeme využít standardní funkci jazyka C „sprintf“. Je nutno: #include Změnit velikost zásobníku v souboru PROJECT.PRM (nachází se ve složce nastavení projektu: „Project Settings / Linker Files“): STACKSIZE na 0x100 (místo výchozí hodnoty 0x50), viz obrázek. Ukázkový kód: int cislo = 156; char buffer[20]; sprintf(buffer, ‘‘%d“, cislo); dtext(buffer);

28 Konec Zvládli jste základy programování HCS08 v C


Stáhnout ppt "Programování mikropočítačů Programování HCS08 v C Obsluha vstupů a výstupů, displej."

Podobné prezentace


Reklamy Google