2.4 Cykly 2. ZÁKLADY JAZYKA C

Podobné dokumenty

11 Elektrické specifikace Mezní parametry* Okolní teplota pøi zapojeném napájení 40 C až +125 C Skladovací teplota 65 C až +150 C Napájecí napìtí na V

1.2 Realizace èekání pomocí jednoduché programové smyèky Pøíklad 3: Chceme-li, aby dítì blikalo baterkou v co nejpøesnìjším intervalu, øekneme mu: Roz

9. Harmonické proudy pulzních usměrňovačů


VLASTNOSTI PLOŠNÝCH SPOJÙ

Spínaèe jsou elektrické pøístroje, které slouží k zapínání, pøepínání a vypínání elektrických obvodù a spotøebièù. Podle funkce, kterou vykonávají, je

3/ %,1'(& 83'1 &( &3 )XQNFH. + ; ; ; ; / ; ; + ; EH]H]PuQ\



Elektronická stavebnice: Teploměr s frekvenčním výstupem

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

:5$ =islv GDW V DOWHUQDFt QHMY\ããtKRELWX

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15


12 15 Instalace mikroturbíny v blokové plynové výtopnì " ZADÁNO: Instalace mikroturbíny v blokové plynové výtopnì Zjistìte: 1 Zda je ekonomicky výhodn

9. Rozšiřující desky Evb_Display a Evb_keyboard

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

MIKROKONTROLÉRY PIC BEZ PŘEDCHOZÍCH ZNALOSTÍ

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }


než je cca 5 [cm] od obvodu LT1070, doporučuje se blokovat napětí U IN

Aplikace Embedded systémů v Mechatronice. Michal Bastl A2/713a

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Algoritmizace a programování

Modul LCD displeje se čtyřmi tlačítky. Milan Horkel

červená LED 1 10k LED 2

Manuál přípravku FPGA University Board (FUB)

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:



AUTOMATIZACE Úvod do programování PLC

8. ZÁKLADNÍ ZAPOJENÍ SPÍNANÝCH ZDROJŮ

Elektronický psací stroj

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1


MSP430: Světelné efekty na maticovém displeji

MIKROPROCESOROVÁ TECHNIKA 9 Událostní systém 9.1 Události Síť ERN Časování událostí Filtrace

Číslicový zobrazovač CZ 5.7

Návod k obsluze výukové desky CPLD

Laboratorní cvičení z předmětu Elektrická měření 2. ročník KMT

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Part 1

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Programovací jazyk Pascal

MIKROKONTROLÉRY PIC PRO POKROČILÉ

1. GPIB komunikace s přístroji M1T330, M1T380 a BM595

Komunikace modulu s procesorem SPI protokol

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT


6 Příkazy řízení toku

APLIKACE MIKROKONTROLÉRŮ PIC32MX

EduKit84. Výuková deska s programátorem pro mikrokontroléry PIC16F84A firmy Microchip. Uživatelská příručka

Komunikační protokol

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

[ 2] [ 1] Stanovení znaménka (2.10)

TECHNICKÝ POPIS MODULU GRAFIK =============================

Řízení IO přenosů DMA řadičem


Jízda po čáře pro reklamní robot

Úvod do programování 7. hodina

Použití UART a radia na platformě micro:bit

Návrh konstrukce odchovny 2. dil

3.1 Útlum atmosférickými plyny Rezonance molekul nekondenzovaných plynù obsažených v atmosféøe zpùsobuje útlum šíøících se elektromagnetických vln. Ab

PK Design. Modul multiplexovaných 8 LED displejů v2.0. Přídavný modul modulárního vývojového systému MVS. Verze dokumentu 1.0 (2. 6.

Vstupně - výstupní moduly

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Program "Světla" pro mikropočítač PMI-80

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

LED zobrazovač. Úvod. Jak to pracuje? Popis zapojení. Autor: Ing.Tomáš Pavera / OK2TPQ Datum: Revize: 1.0

Číslicový zobrazovač CZ 5.1

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

1. 5. Minimalizace logické funkce a implementace do cílového programovatelného obvodu CPLD

ASYNCHRONNÍ ČÍTAČE Použité zdroje:

CTR pro optoèlen s LED a tranzistorem:,& &75 = [%] U, CE = const ) Obvykle CTR urèíme pøi I F = 10 ma a U CE = 5 V. Hodnoty zjistíme z tabulky.,& &75

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:


Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

NAPOJENÍ ZAŘÍZENÍ S KOMUNIKACÍ BELIMO MP-BUS NA SÍŤ AUTOMATŮ MICROPEL

Pointery II. Jan Hnilica Počítačové modelování 17

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

4x vstup pro měření unifikovaného signálu 0 10 V, 0 20 ma, 4 20 ma. komunikace linkami RS232 nebo RS485

Algoritmizace prostorových úloh

AD4RS. měřící převodník. 4x vstup pro měření unifikovaného signálu 0 10 V, 0 20 ma, 4 20 ma. komunikace linkami RS232 nebo RS485

Návrh synchronního čítače

PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury Příklad PROG_

PVKpro vývojový kit s programátorem pro mikrokontrolér PIC16F84 Připojení k PC: paralelní port Uživatelská příručka

požadovan adované velikosti a vlastností Interpretace adresy POT POT

Fz =a z + a z +...+a z +a z =

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Funkce, podmíněný příkaz if-else, příkaz cyklu for

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST

Sekvenční logické obvody

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Stručný postup k použití programu PL7 Junior (programování TSX Micro)

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Znakové. Zapojení vývodů. standard. vývod. popiss napájení GND G napájení +5V =data) Data Bus 0

Algoritmizace prostorových úloh

Transkript:

Vážení zákazníci, dovolujeme si Vás upozornit, že na tuto ukázku knihy se vztahují autorská práva, tzv. copyright. To znamená, že ukázka má sloužit výhradnì pro osobní potøebu potenciálního kupujícího (aby ètenáø vidìl, jakým zpùsobem je titul zpracován a mohl se také podle tohoto, jako jednoho z parametrù, rozhodnout, zda titul koupí èi ne). Z toho vyplývá, že není dovoleno tuto ukázku jakýmkoliv zpùsobem dále šíøit, veøejnì èi neveøejnì napø. umis ováním na datová média, na jiné internetové stránky (ani prostøednictvím odkazù) apod. redakce nakladatelství BEN technická literatura redakce@ben.cz

2. ZÁKLADY JAZYKA C chceme zpracovat. Druhý operand je maska, která určuje místa provedení negace. Bitové posuvy << a >> provádí posuv dvojkové hodnoty o stanovený počet bitů doprava nebo doleva. První operand je posouvaná hodnota, druhý určuje počet posunutí v bitech. 2.4 Cykly Cykly slouží pro opakované provádění příkazů. Používání cyklů je při programování mikrokontrolérů nezbytné, protože samotný hlavní program, používá nekonečnou smyčku řešenou pomocí cyklu. Hlavní program provede úvodní inicializaci, která spočívá například v nastavení činnosti periferií. Poté se rozbíhá nekonečná smyčka, která reaguje na vstupní hodnoty a podle toho řídí běh programu. 2.4.1 Cyklus while cyklus s podmínkou na začátku Nejjednodušším příkladem cyklu je příkaz while. Je to cyklus, který provádí uvedený příkaz tak dlouho, dokud je podmínka pravdivá. Platnost podmínky se testuje vždy před vykonáním příkazu. Formát: while(<logický výraz>) <příkaz>; Příklad 1: Výchozí hodnota proměnné x je 0. Cyklus bude postupně zvyšovat proměnnou x tak, že se bude měnit jako 1, 2, 3, 4 a 5. Jakmile je podmínka x<5 neplatná (to se stane v okamžiku, kdy x=5) je cyklus ukončen a program pokračuje dalšími příkazy. Příklad 2: Cyklus while umožňuje opakovaně vykonat pouze jeden příkaz. Zapíšeme-li za while více příkazů, bude se opakovaně provádět pouze první příkaz. Další příkazy se provedou pouze jednou a to až po dokončení cyklu. Pokud je nutné provádět v cyklu více příkazů, musíme je zapsat do bloku. Blok je definován pomocí složených závorek. Blok se z hlediska cyklu chápe jako jeden (složený) příkaz. Níže zapsaný příklad funguje podobně jako Příklad 1. Hodnota proměnné x je ale odesílána na port B. Jelikož operace x++ předchází zápisu na port, jsou na port zapsány hodnoty 1, 2, 3, 4 a 5. PORTB=x; Pokud pořadí dílčích operací v bloku vzájemně zaměníme, budou na port odesílány hodnoty 0, 1, 2, 3 a 4: 2-9

PORTB=x; MIKROKONTROLÉRY PIC BEZ PŘEDCHOZÍCH ZNALOSTÍ Příklad 3: Nekonečný cyklus vytvoříme tak, že do závorek příkazu while zapíšeme logický výraz, který představuje stále platnou podmínku. Nejjednodušší je tedy do závorek uvést nenulovou hodnotu (například 1). Jak bylo naznačeno výše, nekonečný cyklus je používán pro zápis hlavního programu. Mikrokontrolér je stále taktován hodinovým kmitočtem, musí tedy stále provádět nějaké příkazy. Pokud by hlavní program skončil, bylo by chování mikrokontroléru nedefinované. while(1) //nekonečná smyčka //příkazy 2.4.2 Cyklus do..while cyklus s podmínkou na konci Cyklus do..while funguje podobně jako příkaz while. Rozdíl je však v tom, že podmínka je testována až po provedení příkazu, který je v cyklu zapsán. Formát: do <příkaz>; while(<logický výraz>) Příklad: do Výchozí hodnota proměnné x je 0 a postupně se mění na hodnoty: 1, 2, 3, 4, 5, 6. 2.4.3 Cyklus for cyklus s předem daným počtem opakování Pro přehlednější zápis cyklu je možné použít příkaz for. Výhodou tohoto příkazu je, že zápis je strukturován do tří logických částí: 1. Inicializace řídicí proměnné cyklu, 2. Podmínka provádění cyklu, 3. Předpis pro změnu řídicí proměnné. Jednotlivé části se zapisují do společných závorek a vzájemně se oddělují středníky. Opět je možné opakovaně provádět pouze jeden příkaz, pro seskupení více příznaků použijeme blok. Formát: for(<inicializace>;<podmínka>;<změna_řídicí_proměnné>) <příkaz>; 2-10

2. ZÁKLADY JAZYKA C Příklad: Výchozí hodnotu proměnné x nemusíme nastavovat před spuštěním cyklu, inicializaci provedeme až v rámci cyklu. Nastavili jsme výchozí hodnotu x=0, po každém průchodu se x zvýší o 1 a podmínka omezí provádění tak, že x bude postupně nabývat hodnot: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 a 10. Poslední průchod cyklem bude s hodnotu x=9, následně se však hodnota x zvýší ještě jednou a po ukončení cyklu bude x=10. Takže na port B se odešlou hodnoty 0 až 9, ale po ukončení cyklu bude x=10. for(x=0;x<=9;x++) PORTB=x; 2.5 Přípravek M7SEG 7segmentovka Přípravek M7SEG použijeme pro prezentování výše uvedených programových konstrukcí v několika příkladech. P U CC D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0 GND 1 2 3 4 5 6 7 8 9 10 R 1 R 2 R 3 R 4 R 5 R 6 R 7 R 8 a b c d e f g dp f e ANODY a b g c d dp Obr. 2.11 Schéma zapojení přípravku M7SEG Schéma zapojení přípravku M7SEG je uvedeno na obr. 2.11, jedná se o přípravek vybavený 7segmentovkou se společnou anodou. Katody jednotlivých segmentů jsou připojeny přes omezovací rezistory R1 až R8, nyní není použit budič sběrnice typu 74245 jako u dříve popsaného přípravku M8LED. Segmenty svítí (opět) při log. 0. Rozpis součástek: Označení dle TME stručný popis počet DISP SA56-11EWA 7segmentový LED displej, velikost 14 mm, společná anoda 1 ks R1 až R8 RC1206JR-07680R SMD rezistor 680 (velikost 1206) 8 ks P ZL231-10PG kolíková lišta 2 5 rozteč 2,54 mm 1 ks Jako dno lze použít jeden díl krabičky KM-22 (TME). 2-11

MIKROKONTROLÉRY PIC BEZ PŘEDCHOZÍCH ZNALOSTÍ Obr. 2.12 Výkres desky plošných spojů přípravku M7SEG Obr. 2.13 Osazovací plánek přípravku (strana běžných součástek) Obr. 2.14 Osazovací plánek přípravku (strana SMD) 2.6 PROG_02 základní ovládání 7segmentovky Přípravek M7SEG neobsahuje dekodér, který by hodnotu zobrazované číslice převedl na odpovídající kombinaci segmentů. Dekódování tedy musíme provést programově. Pokud chceme zobrazit například číslici 0, je třeba rozsvítit segmenty a, b, c, d, e, f a segmenty g a dp nechat zhasnuté. 00000011 10011111 00100101 00001101 10011001 01001001 01000001 00011111 Ze schématu dle obr. 2.11 vyplývá, že je třeba připojit dvojkovou kombinaci 00000011. Situace pro všechny 00000001 00001001 00010001 11000001 01100011 10000101 01100001 01110001 šestnáctkové číslice je uvedena formou obr. 2.15 (kód pro zobrazení Obr. 2.15 Číslice 0 až F a kódy pro jejich zobrazení je uveden vždy pod číslicí). 2-12

2. ZÁKLADY JAZYKA C Účelem příkladu PROG_02 je vyzkoušet funkci přípravku M7LED tak, že na něm opakovaně zobrazujeme číslice 0 až F. Převod zobrazované číslice na odpovídající kombinaci řídicích signálu 7segmentovky (kód dle obr. 2.15) bude nejsnazší provést pomocí pole. Opět se bude jednat o pole 8bitových čísel bez znaménka, zvolíme tedy typ uint8_t. Deklaraci lze zapsat takto: uint8_t tab7seg[16]= 0b00000011, 0b10011111, 0b00100101, 0b10011001, //atd. Pro úsporu datové paměti (takové pole zabere 16 bajtů, kapacita datové paměti je jen 224 bajtů) je vhodné použít modifikátor const. Tento modifikátor určuje, že pole je určeno pouze pro čtení (to nám nevadí, protože jednotlivé kódy potřebuje z pole pouze vytáhnout, není třeba je přepisovat) a hlavně, že bude uloženo ne do datové paměti, ale do paměti programu! Programová paměť má podstatně větší kapacitu. Jak převod číslice na kód funguje? Pokud zapíšeme tab7seg[0] je výsledkem hodnota 0b00000011, podobně pro tab7seg[2] dostáváme kód 0b00100101, atd.. Kód pro zobrazení číslice tedy vytahujeme z pole tab7seg pomocí indexu, který odpovídá zobrazované číslici. Pole provede transformaci číslice na kód pro její zobrazení. Opakované zobrazování číslic 0 až F docílíme pomocí cyklu, v tomto případě je vhodné použít cyklus for. Pomocí řídicí proměnné index (mění se od 0 do 15) měníme číslici pro zobrazení, kterou polem tab7seg převedeme na odpovídající kód a odešleme na port B. Po zobrazení číslice je třeba vložit krátké zpoždění, opět využijeme funkci delay_ms: for(index=0;index<=15;index++) //meni index od 0 do 15 PORTB=tab7seg[index]; delay_ms(500); //cekani Celý program je vypsán níže. Přípravek M7SEG musí být připojen na port B. PROG_02: #pragma config FOSC = INTOSCIO //vnitrni osc., RA6 a RA7 volne #pragma config WDTE = OFF //vypnuti WDT #pragma config LVP = OFF //vypnuti LVP, RB4 volny #define _XTAL_FREQ 4000000UL //taktovaci kmitocet 4 MHz #include <xc.h> #include <stdint.h> void main(void) const uint8_t tab7seg[16]= 0b00000011, //0 0b10011111, //1 0b00100101, //2 0b00001101, //3 0b10011001, //4 0b01001001, //5 2-13

MIKROKONTROLÉRY PIC BEZ PŘEDCHOZÍCH ZNALOSTÍ 0b01000001, //6 0b00011111, //7 0b00000001, //8 0b00001001, //9 0b00010001, //A 0b11000001, //b 0b01100011, //c 0b10000101, //d 0b01100001, //E 0b01110001; //F uint8_t index; TRISB=0; //vsechny vyvody portu B jsou vystupy while(1) //nekonecna smycka for(index=0;index<=15;index++) //meni index od 0 do 15 PORTB=tab7seg[index]; delay_ms(500); //cekani return; 2-14