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

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Standardní knihovní funkce pro práci s textovými řetězci
Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Vytváření, použití dávkových souborů
VISUAL BASIC Práce se soubory.
Semestrální práce KIV/PT Martin Kales Hana Hůlová.
Pole, ukazatele a odkazy
Algoritmy I Cvičení č. 5.
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
Algoritmy I. Cvičení č. 10.
Programování v C++ Cvičení.
Algoritmizace a programování
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Výukový program: Mechanik - elektrotechnik Název programu: Číslicová technika - mikroprocesory III. ročník Mikrořadiče Vypracoval : Vlastimil Vlček Projekt.
Ing. Josef Veselý Označení šablony a vzdělávací sady viz.rozpis.
Datové typy a práce s nimi
Jiří Znoj - zno Tvorba konkordace Algoritmy II 3. projekt, 5. zadání Jiří Znoj - zno
Cvičení.
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Příklady v jazyku C – část 3
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
8 ZÓN 16 KLÁVESNIC 32 TYPŮ ZÓN 6 VÝSTUPŮ 10 UŽIVATELSKÝCH KÓDŮ 100 UDÁLOSTÍ V HISTORII DETEKTORY KLÁVESNICE G8.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Příklady v jazyku C – část 2
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
4. Typ pole 4.1 Jednorozměrná pole
Úloha 4 Ovládání motoru pomocí detekce zvuku a ultrazvuku Projekt CZ.1.07/1.1.16/ Bc. Jaroslav Zika 2014.
Úloha 1 Měření úrovně zvuku pomocí zvukového senzoru na vstupu mikroprocesoru Projekt CZ.1.07/1.1.16/ Bc. Jaroslav Zika 2014.
Úloha 1 Měření vzdálenosti pomocí ultrazvuku na vstupu mikropočítače Projekt CZ.1.07/1.1.16/ Bc. Štěpán Janás 2013.
Úloha 3 Projekt CZ.1.07/1.1.16/ David Holoubek 2014 Využití zvukového modulu NXT na základě pohybu - Pozdrav.
Úloha 2 Zabezpečení prostoru pomocí detekce zvuku. Projekt CZ.1.07/1.1.16/ Bc. Jaroslav Zika 2014.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
Úloha 1 Projekt CZ.1.07/1.1.16/ David Holoubek 2014 Dotykový senzor na vstupu mikrokontroléru NXT.
Úloha 5 Ultrazvukový senzor, tlačítko a motor řízený mikropočítačem Projekt CZ.1.07/1.1.16/ Bc. Štěpán Janás 2013.
Základy programování mikropočítačů První program v jazyce symbolických adres.
Programování mikropočítačů Programování HCS08 v C KBI, Časovač.
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Programování mikropočítačů Programování HCS08 v jazyku C.
Mikropočítače a PLC Programování mikropočítačů HCS08 v jazyku C Mikropočítače a PLC.
Programování mikropočítačů Programování HCS08 v jazyku C.
Programování mikropočítačů Práce s PLC Foxtrot. PLC Foxtrot na učebně Pří PLC Foxtrot Tlačítkové panely pro ovládání digitálních vstupů Sedmisegmentovka.
PLC Sekvenční logika. RS Klopný obvod (paměť)  Přivedením log. 0 na vstup S (set) se nastaví Q = 1  Q zůstane 1 i po změně vstupu S na log.1 (pamatuje.
Programování mikropočítačů
Programování mikropočítačů Platforma Arduino
Výukový materiál zpracován v rámci projektu
Inicializace portů mikrokontroléru
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Vývojový kit Freescale M68EVB908GB60
Výukový materiál zpracován v rámci projektu
Využití ICT pro rozvoj klíčových kompetencí CZ.1.07/1.5.00/
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Vzorové řešení zápočtového testu
Algoritmizace a programování
Programování mikropočítačů
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Výukový materiál zpracován v rámci projektu
Oblast platnosti identifikátoru (1)
Juliovy množiny 1.
Programování mikrokontrolerů PIC 16F84A
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Projekt Anglicky v odborných předmětech, CZ.1.07/1.3.09/
Transkript prezentace:

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

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.

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

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

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

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

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.

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; }

Ú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.

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

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 = % nebo PTFDD_PTFDD0 = 1;

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

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().

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).

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

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.

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 */ }

Využití displeje v jazyku C

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ů

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)

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.

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.

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");

Projekt pro práci s displejem

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

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

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);

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