UNIVERZITA TOMÁŠE BATI VE ZLÍNĚ FAKULTA APLIKOVANÉ INFORMATIKY
PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 7 Využití knihoven podprogramů, displej Jan Dolinay Petr Dostálek Zlín 2013
Tento studijní materiál vznikl za finanční podpory Evropského sociálního fondu (ESF) a rozpočtu České republiky v rámci řešení projektu: CZ.1.07/2.2.00/15.0463, MODERNIZACE VÝUKOVÝCH
MATERIÁLŮ A DIDAKTICKÝCH METOD
Cvičení 7 – Využití knihoven podprogramů, displej
Cvičení 7 – Využití knihoven podprogramů, displej
STRUČNÝ OBSAH CVIČENÍ:
Použití knihovny podprogramů pro práci s periferiemi – ovladače Ovladač displeje na vývojovém kitu Ukázkový program – výpis textu na displej Úkoly k procvičení
VSTUPNÍ ZNALOSTI: Toto cvičení předpokládá znalosti z předchozích cvičení.
CÍL:
Na tomto cvičení si ukážeme, jak se pracuje s LCD displejem na vývojovém kitu s využitím ovladače (knihovny podprogramů).
Cvičení se vztahuje k těmto otázkám
Přerušovací systém mikropočítače HC08 – princip obsluhy přerušení, typy přerušení
MODERNIZACE VÝUKOVÝCH MATERIÁLŮ A DIDAKTICKÝCH METOD CZ.1.07/2.2.00/15.0463,
2
Cvičení 7 – Využití knihoven podprogramů, displej
Řešené příklady Příklad 1 – Výpis textu na displej Úkol: Vytvořte program, který vypíše na první řádek displeje text „Hello World“ a na druhý řádek vypíše znaky: „U“, „T“, „B“ na pozicích 3, 6 a 9.
Řešení Použijeme podprogramy ovladače pro vypsání textového řetězce, pro posun kurzoru a pro výpis znaku. Program je natolik jednoduchý, že zde nebudeme uvádět vývojový diagram. Postup bude takovýto:
Definujeme textový řetězec, do kterého uložíme text „hello world“. V podstatě se jedná o pole bajtů, které obsahují konstantní hodnoty a to kódy příslušných znaků v ASCII. Zavoláme podprogram ovladače displeje dinit, který provede inicializaci displeje Zavoláme podprogram dcls který smaže displej Nastavíme kurzor na první řádek a první sloupec displeje podprogramem setcursor Vypíšeme text na displej voláním podprogramu dtext s příslušným parametrem Přesuneme kurzor na druhý řádek a třetí sloupec Vypíšeme znak U podprogramem douta Stejným postupem vypíšeme znaky T a B, vždy po přesunutí kurzoru na potřebnou pozici na displeji. Pozor: Před překladem programu je nutno přidat do projektu v Code Warrior zdrojový kód ovladače disp_gb60.asm a soubor definic funkcí ovladače disp_gb60.inc. Do našeho zdrojového kódu vložíme odkaz na soubor disp_gb60.inc pomocí direktivy include. Postup je uveden níže při popisu překladu a testování programu.
MODERNIZACE VÝUKOVÝCH MATERIÁLŮ A DIDAKTICKÝCH METOD CZ.1.07/2.2.00/15.0463,
3
Cvičení 7 – Využití knihoven podprogramů, displej
Vysvětlení programu Na obr. 1 je zdrojový kód programu podle zadání. MyCode: text
SECTION dc.b dc.b
‘Hello World' 0
; text, ktery chceme zobrazit ; zakoncovaci znak
main: _Startup:
konec
ldhx txs cli
#__SEG_END_SSTACK
jsr jsr
dinit dcls
ldx lda jsr ldhx jsr
#1 #1 setcursor #text dtext
ldx lda jsr lda jsr lda jsr lda jsr
#2 #3 setcursor #'U' douta #6 setcursor #'T' douta
lda jsr lda jsr
#9 setcursor #'B' douta
; inicializace zasobniku ; povol preruseni
; inicializace displeje ; smazani displeje ; 1.radek ; 1.sloupec ; nastaveni kurzoru na pozadovanou pozici ; adresa textu do H:X ; zavolame funkci pro zobrazeni retezce ; 2.radek ; 3.sloupec ; nastaveni kurzoru na pozadovanou pozici ; vypis znaku 'U' ; 6.sloupec ; nastaveni kurzoru ; vypis znaku 'T' ; 9.sloupec ; nastaveni kurzoru ; vypis znaku 'B'
feed_watchdog bra konec
Obr. 1 ‐ Výpis ukázkového programu obsluhy displeje pomocí ovladače
MODERNIZACE VÝUKOVÝCH MATERIÁLŮ A DIDAKTICKÝCH METOD CZ.1.07/2.2.00/15.0463,
4
Cvičení 7 – Využití knihoven podprogramů, displej
V programu je nejprve pomocí direktivy DC.B (vytvoř konstantu) vytvořen textový řetězec text. Jméno této proměnné samozřejmě nemusí být zrovna „text“, může být libovolné. Všimněte si nuly, který je vložena hned na dalším řádku – v paměti bude následovat za textem a to je ona ukončující značka NULL, která označuje konec textového řetězce. Kód našeho programu pak začíná řádkem JSR dinit – tj. voláním podprogramu ovladače displeje pro inicializaci displeje. Pak smažeme displej zavoláním podprogramu dcls. Poté posuneme kurzor na začátek prvního řádku pomocí podprogramu setcursor. Tento podprogram má 2 parametry, viz popis podprogramů výše, a to číslo řádku v registru X a číslo sloupce v registru A. Tedy souřadnice, kam se má nastavit kurzor. V našem případě nastavujeme kurzor na první řádek (#1 v registru X) a na první sloupec v tomto řádku (#1 v registru A). Poté vypíšeme textový řetězec podprogramem dtext, kterému předáváme v reg. H:X adresu našeho řetězce, tj. proměnné text. Všimněte si, že v istrukci LDHX
#text
je před názvem proměnné text mřížka (#). Takže do registru H:X se nenahrává obsah proměnné text, ale její adresa (tedy číslo reprezentované v našem programu symbolickým jménem „text“. Nahrát do registru H:X celý textový řetězec by ani nebylo možné, protože náš textový řetězec je dlouhý 11 bajtů a registru H:X má velikost pouze 2 bajty. Následuje nastavení kurzoru na zadanou pozici na řádek 2 a vypsání znaku U. Pro výpis znaku voláme podprogram douta, kterému v registru A předáváme kód znaku, který se má vypsat. Díky překladači můžeme místo číselné hodnoty zapsat znak v apostrofech (‚U‘) a překladač jej při překladu sám nahradí odpovídajícím ASCII kódem.
Překlad a testování programu Předtím než začnete vytvářet nový projekt, připravte si soubory ovladače (disp_gb60.ASM a disp_gb60.INC). Pak vytvořte nový projekt obvyklým způsobem, ale po vybrání typu připojení (HCS08 seriál monitor) neukončujte průvodce kliknutím na tlačítko Dokončit, ale pokračujte na další krok průvodce tlačítkem Další. Dostanete se tak do okna jaké je na obrázku 7.2, tj. přidání dalších souborů do projektu. Zde podle snímku vyberte oba soubory ovladače a přidejte je do projektu. Pak klikněte na Dokončit.
MODERNIZACE VÝUKOVÝCH MATERIÁLŮ A DIDAKTICKÝCH METOD CZ.1.07/2.2.00/15.0463,
5
Cvičení 7 – Využití knihoven podprogramů, displej
6
Všimněte si, že v levém okně Code Warrioru se nyní objeví kromě souboru main.asm i oba vložené soubory ovladače. Pokud byste nevložili ovladač do projektu tímto způsobem při vytváření aplikace, můžete jej vložit dodatečně tak, že klepnete pravým tlačítkem myši na projekt ve stromovém seznamu Files v okně Code Warrior a vyberete „Add files...“. Do kódu v main.asm ještě připište řádek INCLUDE 'disp_gb60.INC' a to na začátek souboru, za řádek INCLUDE 'derivative.inc', který je tam již vložen průvodcem při vytváření kostry projektu.
Obr. 2 ‐ Vložení ovladače displeje do projektu
Po nahrání programu do mikropočítače a spuštění by se měl na displeji objevit na prvnim řádku nápis „Hello World“ a na druhém řádku pak písmena U T B.
Příklady k procvičení
1. Vytvořte program, který provede analýzu znakové sady uložené v paměti displeje. Na prvním řádku bude postupně zobrazovat číslice od 0 do 255 a na druhém řádku bude zobrazovat odpovídající znak reprezentovaný daným číselným kódem.
MODERNIZACE VÝUKOVÝCH MATERIÁLŮ A DIDAKTICKÝCH METOD CZ.1.07/2.2.00/15.0463,
Cvičení 7 – Využití knihoven podprogramů, displej
2. Vytvořte program „Stopky“, který po stisku tlačítka SW1 spustí odměřování času po 1 sekundě, stiskem tlačítka SW2 se měření zastaví a stiskem tlačítka SW3 se stopky vynulují. Předpokládejte, že maximální měřený čas je 255s.
Nápověda k úkolům: Úkol 1: V tomto úkolu máme na první řádek postupně vypisovat čísla od 0 do 255 a na druhý řádek pak vždy odpovídající znak ASCII tabulky (tak, jak je uložena v paměti displeje). Jde tedy o to, použít nějakou smyčku se zpožděním – můžeme použít podprogram cekej z minulé lekce. Nebo můžeme využít periodické přerušení od časovače a v jeho obsluze vždy vypisovat kód a znak. Na následujícím obrázku je ukázka jak by měl vypadat výstup programu na displej.
Obr. 3 ‐ Příklad výstupu na displej pro úkol 1
Úkol 2. Zde máme vytvořit stopky. Princip je tedy podobný jako v předchozím úkolu - také vypisujeme čísla od 0 do 255. Rozdíl je, že zde se dá čítání ovládat tlačítky. Pro realizaci tohoto programu je možné využít buď přerušení časovače a test kláves provádět v nekonečné smyčce, nebo provádět inkrementaci „času“ v nekonečné smyčce (bez nároku na skutečnou reálnourychlost plynutí času) a pro detekci stisku tlačítek využít přerušení KBI, nebo použít jak přerušení KBI tak i časovače.
Obr. 4 ‐ Příklad výstupu na displej pro úkol 2 MODERNIZACE VÝUKOVÝCH MATERIÁLŮ A DIDAKTICKÝCH METOD CZ.1.07/2.2.00/15.0463,
7
Cvičení 7 – Využití knihoven podprogramů, displej
Doplňující zdroje [1]
Freescale: Firemní dokumentace pro mikropočítače HCS08, dostupné online: http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=S08GB&nodeId= 01624684491437EDD5
MODERNIZACE VÝUKOVÝCH MATERIÁLŮ A DIDAKTICKÝCH METOD CZ.1.07/2.2.00/15.0463,
8